使用Python Tweepy获取Twitter用户时间线时遇403错误求助
解决Twitter API v2 403 Forbidden错误及提取用户2年时间线方案
一、403错误的核心解决步骤
- 确保你的开发者账号已创建关联项目的应用:Twitter API v2要求所有请求必须绑定到具体项目,未关联项目的旧版独立应用无法使用v2端点。登录开发者门户,检查应用是否归属某个项目,无项目则新建并关联应用。
- 正确使用认证凭据:
- 若使用Bearer Token,必须是从关联项目的应用中生成的Token,而非旧版v1.1的Token。
- 若使用OAuth 1.0a(consumer_key等),需确认这些密钥来自关联项目的应用,而非未绑定项目的旧应用。
- 注意:Tweepy的Client初始化时,Bearer Token优先级高于OAuth密钥,若用OAuth方式,可只传入consumer_key、consumer_secret、access_token、access_token_secret,避免同时传Bearer Token引发冲突。
二、修改代码以提取过去2年的时间线
原代码缺少时间范围过滤,结合认证修正后的代码如下:
import tweepy from datetime import datetime, timedelta # 替换为你关联项目的应用密钥/令牌 client = tweepy.Client( bearer_token='你的项目关联应用Bearer Token', # 或选择OAuth 1.0a认证(二选一即可) # consumer_key='你的consumer_key', # consumer_secret='你的consumer_secret', # access_token='你的access_token', # access_token_secret='你的access_token_secret' ) # 获取目标用户ID user = client.get_user(username='nytimes') if not user.data: print("无法获取用户信息") exit() # 计算2年前的日期(符合Twitter API要求的ISO 8601格式) two_years_ago = (datetime.now() - timedelta(days=365*2)).isoformat() + "Z" # 分页获取过去2年的推文,添加时间范围过滤 paginator = tweepy.Paginator( client.get_users_tweets, id=user.data.id, max_results=100, # v2单次请求最大结果数为100 start_time=two_years_ago, tweet_fields=['created_at'] # 可选,获取推文创建时间用于验证 ) # 遍历所有符合条件的推文 for tweet in paginator.flatten(): print(f"推文ID: {tweet.id}, 创建时间: {tweet.created_at}, 内容: {tweet.text}")
三、额外注意事项
- API权限:确保应用拥有Read/Write或Read and Write权限(免费项目的基础权限即可满足读取需求),权限不足需在开发者门户申请调整。
- 速率限制:免费层级每15分钟最多获取900条推文,Tweepy会自动处理速率限制等待,但大数量提取需耐心等待。
- 推文数量上限:免费层级最多可获取用户最近3200条推文,若目标用户2年内推文超过3200条,无法获取全部,需升级到付费层级。
内容的提问来源于stack exchange,提问作者Rauer Figueiredo Castro
相关产品推荐
相关产品推荐

