GDPR更新后Python调用Twitter API速率限制端点返回空resources问题
解决Twitter API rate_limit_status返回空resources的问题
Hey,我最近刚好留意到好几个开发者都碰到了和你一模一样的问题,这绝对不是你的操作失误!
问题根源
虽然官方文档还没更新说明,但结合最近Twitter因GDPR做的API调整,大概率是应用-only认证的权限被悄悄限制了——之前允许应用-only令牌获取全量的速率限制数据,现在这个接口对这类令牌返回空的resources,而其他API调用不受影响(比如你测试的users/lookup),也侧面印证了这一点。另外你用的twitter-application-only-auth==0.3.3是个很老的库(最后一次更新在2016年),可能也没适配API的隐性变更。
可行的解决办法
- 切换到用户上下文认证:如果你的应用场景允许,改用OAuth 1.0a或者OAuth 2.0用户上下文令牌来调用
rate_limit_status接口,不少开发者反馈这种方式能正常拿到完整的resources数据。 - 绕过旧库,手动构造请求:试试用
requests库直接发送请求,确保请求头和参数都是最新的,示例代码如下:
import requests import base64 # 替换成你的密钥 CONSUMER_KEY = "你的consumer key" CONSUMER_SECRET = "你的consumer secret" # 获取Bearer Token auth_credentials = f"{CONSUMER_KEY}:{CONSUMER_SECRET}" encoded_credentials = base64.b64encode(auth_credentials.encode("utf-8")).decode("utf-8") token_headers = { "Authorization": f"Basic {encoded_credentials}", "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" } token_data = {"grant_type": "client_credentials"} token_response = requests.post("https://api.twitter.com/oauth2/token", headers=token_headers, data=token_data) bearer_token = token_response.json()["access_token"] # 调用速率限制接口 rate_limit_headers = {"Authorization": f"Bearer {bearer_token}"} url = "https://api.twitter.com/1.1/application/rate_limit_status.json?resources=help,users,search,statuses" response = requests.get(url, headers=rate_limit_headers) print(response.json())
- 临时替代方案:如果暂时没法切换认证方式,可以自己在代码里维护调用计数,同时每次API请求后解析响应头里的
X-Rate-Limit-Remaining和X-Rate-Limit-Reset字段,来跟踪剩余调用次数,这也是很多开发者应急的办法。 - 蹲官方更新:Twitter经常会延迟更新文档,建议多刷开发者论坛或者官方状态页,等后续的正式说明。
内容的提问来源于stack exchange,提问作者hackartist
相关产品推荐
相关产品推荐

