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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:05:26