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

如何使用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":关联推文的地点ID
  • tweet_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:14:57