You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:01:11