使用twitter-api-v2获取速率限制遇认证错误,如何解决?
问题:调用Twitter API获取速率限制时认证失败
我尝试使用node-twitter-api-v2库及其速率限制插件调用Twitter API,代码如下:
import dotenv from 'dotenv' import { TwitterApi } from 'twitter-api-v2'; import { TwitterApiRateLimitPlugin } from '@twitter-api-v2/plugin-rate-limit' dotenv.config() const API_KEY = process.env.TWITTER_API_KEY; const API_SECRET = process.env.TWITTER_API_SECRET; const BEARER_TOKEN = process.env.BEARER_TOKEN; const rateLimitPlugin = new TwitterApiRateLimitPlugin() // Instantiate with desired auth type (here's Bearer v2 auth) const twitterClient = new TwitterApi(process.env.BEARER_TOKEN, { plugins: [rateLimitPlugin] }); //const twitterClient = new TwitterApi({ appKey: API_KEY, appSecret: API_SECRET }, { plugins: [rateLimitPlugin] }); await twitterClient.v2.me() const currentRateLimitForMe = await rateLimitPlugin.v2.getRateLimit('users/me') console.log(currentRateLimitForMe.limit) // 75 console.log(currentRateLimitForMe.remaining) // 74
调用时出现如下错误:
'Unsupported Authentication: Authenticating with OAuth 2.0 Application-Only is forbidden for this endpoint. Supported authentication types are [OAuth 1.0a User Context, OAuth 2.0 User Context].'
我猜测问题出在认证方式上,已尝试BEARER令牌和API Key,但均无效。请问如何正确获取速率限制信息?
解决方案
错误原因
users/me(即twitterClient.v2.me())接口属于需要用户上下文的接口,不支持应用级认证(Bearer令牌、仅API Key/Secret都属于应用级认证),必须使用用户上下文认证(OAuth 1.0a 用户上下文或 OAuth 2.0 用户上下文)。
正确实现步骤
1. 准备用户上下文认证凭证
你需要在Twitter开发者平台获取以下凭证(以OAuth 1.0a为例):
- API Key(即appKey)
- API Secret(即appSecret)
- Access Token
- Access Token Secret
将这些凭证添加到你的.env文件中。
2. 修改后的代码
import dotenv from 'dotenv' import { TwitterApi } from 'twitter-api-v2'; import { TwitterApiRateLimitPlugin } from '@twitter-api-v2/plugin-rate-limit' dotenv.config() const API_KEY = process.env.TWITTER_API_KEY; const API_SECRET = process.env.TWITTER_API_SECRET; const ACCESS_TOKEN = process.env.TWITTER_ACCESS_TOKEN; const ACCESS_TOKEN_SECRET = process.env.TWITTER_ACCESS_TOKEN_SECRET; const rateLimitPlugin = new TwitterApiRateLimitPlugin() // 使用OAuth 1.0a用户上下文认证初始化客户端 const twitterClient = new TwitterApi({ appKey: API_KEY, appSecret: API_SECRET, accessToken: ACCESS_TOKEN, accessTokenSecret: ACCESS_TOKEN_SECRET, }, { plugins: [rateLimitPlugin] }); // 调用接口(认证方式符合要求) await twitterClient.v2.me() // 获取目标接口的速率限制信息 const currentRateLimitForMe = await rateLimitPlugin.v2.getRateLimit('users/me') console.log(currentRateLimitForMe.limit) console.log(currentRateLimitForMe.remaining)
3. 补充说明
- 若选择OAuth 2.0用户上下文认证,需通过OAuth授权流程获取用户级Bearer令牌(区别于开发者平台直接生成的应用级Bearer令牌),再用该令牌初始化
TwitterApi,同样可通过插件获取速率限制。 - 应用级认证仅适用于不需要用户上下文的公开接口(如搜索公开推文、获取公开用户资料),涉及当前用户信息的接口必须使用用户上下文认证。
内容的提问来源于stack exchange,提问作者Ritzy Dev
相关产品推荐
相关产品推荐

