Python Tweepy调用search_all_tweets接口报403 Forbidden错误
问题排查与解决方案
核心报错原因
你遇到的403问题和密钥有效性无关,是明确的规则匹配和代码写法问题:
- 接口权限不匹配:
search_all_tweets是Twitter API v2的全量历史推文搜索接口,仅对开通了「学术研究(Academic Research)」权限等级的开发者账号开放,普通免费/基础付费的开发者项目哪怕完成了Project绑定,也没有这个接口的调用权限。这也是为什么你调用get_tweets(基础公开接口,普通项目权限即可调用)能正常运行,只有全量搜索接口报错的核心原因。 - 代码参数写法错误:你调用搜索接口时给
query参数传值多写了冗余的query=前缀,实际参数值直接传搜索关键词即可,不需要加前缀。 - 客户端初始化存在无效代码:你初始化client后手动赋值
consumer_key的代码里,api_key_str变量从未定义,属于无效逻辑,Tweepy 4.x版本的Client初始化直接传参即可,不需要初始化后再单独挂载属性。
对应修正方法
根据自己的账号权限选对应方案即可:
- 普通开发者账号(无学术研究资质)
直接替换成普通权限支持的search_recent_tweets接口即可,这个接口支持搜索最近7天内的公开推文,普通绑定Project的App就能调用,修正后代码如下:import tweepy # 替换为你自己的有效bearer token bearer_token_str = 'your bearer token' client = tweepy.Client(bearer_token=bearer_token_str) # 注意query直接传关键词,不要加query=前缀 res = client.search_recent_tweets( query='sunshine', tweet_fields=["created_at", "text", "geo"] ) - 已开通学术研究权限的账号
先到开发者后台确认当前使用的App已经挂载到学术研究等级的Project下,再修正query参数写法调用全量搜索接口即可,代码如下:# 确认账号有Academic Research权限后使用 res = client.search_all_tweets( query='sunshine', tweet_fields=["created_at", "text", "geo"] )
补充说明:Twitter API v2不同接口的权限门槛是独立划分的,不要因为基础接口能调用,就默认所有接口都有权限,搜索类接口的权限要求普遍高于基础的单条推文查询接口。
内容的提问来源于stack exchange,提问作者getUnstacked
相关产品推荐
相关产品推荐

