Flutter获取用户Twitter Feed遇认证错误,求解决方案及完整Feed获取方法
解决Twitter API获取用户Feed的认证错误
错误原因
你遇到的错误是因为当前使用了OAuth 2.0 应用级认证(Application-Only),但获取用户Feed的/2/users/{id}/tweets接口要求必须使用用户上下文认证(OAuth 1.0a User Context 或 OAuth 2.0 User Context)。免费版Twitter API仅支持通过用户上下文认证访问该接口。
解决步骤(使用twitter_api_v2包)
1. 获取用户上下文认证凭证
你需要让用户授权你的应用,获取以下OAuth 1.0a凭证(适合免费版场景):
- Consumer Key (API Key)
- Consumer Secret (API Secret)
- Access Token
- Access Token Secret
这些凭证可通过Twitter开发者后台的"User authentication settings"配置PIN-based等授权流程后获取。
2. 初始化带用户上下文的客户端
用上述凭证替换应用级Bearer Token,初始化TwitterApi客户端:
final twitter = TwitterApi( oauthTokens: OAuthTokens( consumerKey: '你的Consumer Key', consumerSecret: '你的Consumer Secret', accessToken: '用户授权的Access Token', accessTokenSecret: '用户授权的Access Token Secret', ), );
3. 获取用户完整Feed
先通过用户名获取用户ID,再调用接口获取推文Feed,无需提前传入tweet IDs:
// 1. 通过用户名查询用户ID final userResponse = await twitter.users.findUserByUsername('目标用户名'); final userId = userResponse.data.id; // 2. 获取用户公开推文Feed(按时间顺序) final tweetsResponse = await twitter.tweets.userTweets( userId, maxResults: 100, // 免费版单次请求最多返回100条 tweetFields: [TweetField.createdAt, TweetField.publicMetrics], ); // 处理返回的推文列表 final userFeed = tweetsResponse.data; // 如需分页获取历史推文,使用paginationToken参数 if (tweetsResponse.meta?.nextToken != null) { final nextPageResponse = await twitter.tweets.userTweets( userId, paginationToken: tweetsResponse.meta?.nextToken, maxResults: 100, ); }
免费版账号限制说明
- 接口速率限制:每15分钟最多15次请求
- 仅能获取用户公开推文,无法访问私有内容(除非用户额外授权)
- 支持通过分页参数
paginationToken遍历用户历史推文
关于dart_twitter_api包的补充
该包基于旧版API v1.1,同样需要用户上下文认证。之前未解决问题大概率是仍使用应用级认证,切换到用户授权的OAuth 1.0a凭证即可正常调用接口。
内容的提问来源于stack exchange,提问作者Khyati Modi
相关产品推荐
相关产品推荐

