使用Tweepy获取单个用户实时推文时过滤提及内容的技术问询
如何用Tweepy仅获取指定用户自身的实时推文
我明白你的困扰——用streamer.filter(follow=['25073877'])的时候,连别人提及、转发这个用户的内容都一起拿到了,并不是你想要的仅该用户自己发的推文。这其实是因为follow参数的设计就是追踪所有包含该用户ID关联的推文,包括回复、提及、转发,而不是只追踪用户自主发布的内容。下面给你两种可行的解决方案:
方案1:在流回调中过滤(适配Tweepy所有版本)
这是最通用的方法,不管你用的是Tweepy v3还是v4,都可以在接收推文后,检查推文的发布者ID是否匹配目标用户,只处理符合条件的内容。
完整示例代码:
from __future__ import print_function import tweepy # 替换成你自己的API密钥信息 consumer_key = "你的Consumer Key" consumer_secret = "你的Consumer Secret" access_token = "你的Access Token" access_token_secret = "你的Access Token Secret" # 完成认证 auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) # 自定义流监听器 class TargetUserStreamListener(tweepy.StreamListener): def on_status(self, status): # 目标用户的ID(注意这里用字符串匹配更稳妥,避免整数类型问题) target_user_id = "25073877" # 检查当前推文的发布者是否是目标用户 if status.user.id_str == target_user_id: # 在这里处理你需要的逻辑,比如打印推文内容 print(f"目标用户推文:{status.text}") # 返回True保持流连接 return True def on_error(self, status_code): # 处理错误,比如速率限制 if status_code == 420: print("触发速率限制,断开流连接") return False # 初始化监听器和流 listener = TargetUserStreamListener() streamer = tweepy.Stream(auth=auth, listener=listener) # 依然用follow参数追踪相关推文,但在回调里过滤出目标用户自己发的 streamer.filter(follow=['25073877'], encoding='utf8')
方案2:用Twitter API v2的规则过滤(适配Tweepy v4+)
如果你的Tweepy版本是v4及以上,推荐使用Twitter API v2的流功能——它支持更精准的规则过滤,能直接在服务端就把非目标用户发布的内容过滤掉,减少客户端的处理压力。
示例代码:
import tweepy # 替换成你的API v2 Bearer Token bearer_token = "你的Bearer Token" # 自定义流处理类 class TargetUserStream(tweepy.StreamingClient): def on_tweet(self, tweet): # 处理目标用户的推文 print(f"目标用户推文:{tweet.text}") # 初始化流客户端 stream = TargetUserStream(bearer_token=bearer_token) # 添加过滤规则:仅目标用户发布的推文 # 如果想要排除目标用户自己转发的内容,可以把规则改成 "user_id:25073877 -is:retweet" stream.add_rules(tweepy.StreamRule("user_id:25073877")) # 启动流,指定需要获取的字段(比如作者ID) stream.filter(tweet_fields=["author_id"])
小提示
- 如果你还在使用旧版Tweepy(v3及以下),只能用方案1;升级到v4+才能用上API v2的强大功能。
- 注意用户ID的匹配:尽量用字符串类型的
id_str对比,避免整数溢出的潜在问题。
内容的提问来源于stack exchange,提问作者The BrownBatman
相关产品推荐
相关产品推荐

