如何使用Tweepy 4.12从Twitter API v2获取完整JSON对象
解决Tweepy 4.12 + Twitter API v2流获取地点字段的问题
核心问题原因
Twitter API v2 默认仅返回推文的基础字段(ID、文本等),地点相关字段(country、country_code、bounding_box)属于扩展字段,需要显式请求;另外如果需要仅获取美国地区的推文,需添加对应的流过滤规则。
具体解决方案
1. 添加流过滤规则(获取美国地区推文)
在启动流之前,添加包含place_country:US的规则,确保只接收地点标记为美国的推文。如果已有旧规则,建议先清除避免冲突。
2. 请求扩展字段获取地点数据
调用filter()方法时,通过expansions、tweet_fields、place_fields参数指定需要返回的地点相关字段:
expansions="geo.place_id":关联推文的地点IDtweet_fields="geo":获取推文的地理信息字段place_fields="country,country_code,bounding_box":指定要返回的地点具体字段
3. 修改代码实现
以下是修改后的完整代码:
import tweepy import time import json bearer_token = "你的Bearer Token" consumer_key = "" consumer_secret = "" access_token = "" access_token_secret = "" class MyStreamListener(tweepy.StreamingClient): def setup(self, in_queue): self.count = 0 self.in_queue = in_queue def on_data(self, raw_data): # 解析原始JSON,查看包含地点字段的完整数据 data = json.loads(raw_data) print(json.dumps(data, indent=2)) return True def on_connect(self): print('Connected') def on_tweet(self, tweet): if tweet.referenced_tweets is None: print(tweet.text) # 若推文含地理信息,可获取place_id关联地点详情 if tweet.geo: print(f"地点ID: {tweet.geo['place_id']}") time.sleep(0.2) def process_and_save_to_db(in_queue, keywords): # 保存到数据库的逻辑 pass if __name__ == '__main__': myStreamListener = MyStreamListener(bearer_token=bearer_token) # 清除已有规则(可选,避免重复匹配) rules = myStreamListener.get_rules().data if rules: rule_ids = [rule.id for rule in rules] myStreamListener.delete_rules(rule_ids) # 添加新规则:关键词 + 美国地区过滤 keywords = ['elon musk', 'tesla', 'electric vehicle'] for keyword in keywords: rule = f'"{keyword}" place_country:US' myStreamListener.add_rules(tweepy.StreamRule(rule, tag=keyword)) # 启动流,指定需要的扩展字段 myStreamListener.filter( expansions="geo.place_id", tweet_fields="geo", place_fields="country,country_code,bounding_box" )
代码说明
- 规则添加:每个关键词规则后追加
place_country:US,确保只抓取美国地区的相关推文。 - 扩展字段请求:通过
expansions关联地点ID,place_fields指定返回的地点具体字段,原始JSON的includes字段中会包含完整的地点信息(country、country_code、bounding_box等)。 - on_data处理:解析原始JSON可直接查看完整响应结构,包含推文基础信息和关联的地点详情。
内容的提问来源于stack exchange,提问作者Wolf Walker
相关产品推荐
相关产品推荐

