如何使用Twitter API获取推文作者用户名、粉丝数等相关信息
Twitter API v2 爬取用户关联信息解决方案
核心原因
你添加的expansions和user.fields请求参数配置逻辑是正确的,获取不到用户信息是因为Twitter API v2的扩展关联数据不会和推文基础数据放在同一层级的data字段中,而是单独存储在返回体的includes.users数组里,需要你自行通过author_id做映射匹配。
调整步骤
1. 补全请求参数
要获取你需要的4项用户信息,需要补充user.fields的取值范围,修正后的参数如下:
query = 'football' tweet_fields = "author_id,created_at,text,public_metrics,possibly_sensitive,source,lang" # 补全user.fields:username=用户名,name=显示名称,public_metrics包含粉丝、关注数 user_fields = "username,name,public_metrics,description" max_results = "50" headers = {"Authorization": "Bearer {}".format(BEARER_TOKEN)} # URL拼接逻辑不变 url = "https://api.twitter.com/2/tweets/search/recent?query={}&tweet.fields={}&expansions=author_id&user.fields={}&max_results={}".format(query, tweet_fields, user_fields, max_results)
2. 正确解析返回结果
拿到响应后需要同时提取推文数据和关联用户数据,把用户数据转为ID为键的字典方便匹配,示例代码如下:
response = requests.request("GET", url, headers=headers) if response.status_code != 200: raise Exception(response.status_code, response.text) res_json = response.json() # 提取推文基础数据 twitter_search_data = res_json['data'] # 提取关联用户数据,转为ID映射字典 user_list = res_json['includes']['users'] user_map = {user['id']: user for user in user_list} # 遍历匹配用户信息 twitter_response = [] for tweet in twitter_search_data: # 匹配当前推文对应的作者信息 author_info = user_map.get(tweet['author_id'], {}) # 提取你需要的字段 full_data = { **tweet, # 1. 作者用户名 'author_username': author_info.get('username'), # 2. 作者显示名称 'author_name': author_info.get('name'), # 3. 作者粉丝数 'author_followers': author_info.get('public_metrics', {}).get('followers_count'), # 4. 作者关注数 'author_following': author_info.get('public_metrics', {}).get('following_count') } twitter_response.append(full_data) print(full_data)
内容的提问来源于stack exchange,提问作者taga
相关产品推荐
相关产品推荐

