使用免费版Twitter API通过Tweepy获取用户推文遇权限问题
问题分析与解决方案
你遇到的453错误核心原因是:Twitter API免费访问级别已不再开放v1.1版本的user_timeline接口,该接口目前仅对基础版(付费)及以上权限开放。
不过你不需要升级权限,改用Twitter API v2的免费端点就能实现需求,Tweepy已经支持v2接口。以下是修改后的完整代码:
import tweepy import pandas as pd # Twitter API v2 凭证 API_KEY = 'x' API_SECRET_KEY = 'x' ACCESS_TOKEN = 'xx' ACCESS_TOKEN_SECRET = 'xxxx' # 初始化v2客户端 client = tweepy.Client( consumer_key=API_KEY, consumer_secret=API_SECRET_KEY, access_token=ACCESS_TOKEN, access_token_secret=ACCESS_TOKEN_SECRET ) def get_tweets(username, count=200): # 先通过用户名获取用户ID(v2接口要求用ID查询) user = client.get_user(username=username) user_id = user.data.id # 获取用户推文,包含所需字段 tweets = client.get_users_tweets( id=user_id, max_results=count, tweet_fields=['created_at', 'public_metrics'], expansions='author_id' ) # 整理推文数据 tweet_data = [] for tweet in tweets.data: tweet_data.append({ 'tweet_id': tweet.id, 'created_at': tweet.created_at, 'text': tweet.text, 'likes': tweet.public_metrics['like_count'], 'retweets': tweet.public_metrics['retweet_count'] }) return tweet_data def main(): user = 'x' data = get_tweets(user, count=200) df = pd.DataFrame(data) df.to_excel('twitter_data.xlsx', index=False) if __name__ == "__main__": main()
代码关键点说明:
- 改用Tweepy的
Client类初始化API v2客户端,替代原v1.1的API类 - v2接口需要通过用户名先获取用户ID,再用ID查询推文
- 推文的点赞、转发数统一放在
public_metrics字段中,需对应提取 - 免费版v2接口支持最多获取用户最近3200条推文,完全覆盖原需求的200条限制
内容的提问来源于stack exchange,提问作者Nripesh Niketan
相关产品推荐
相关产品推荐

