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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:16:20