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

使用Twitter Streaming API筛选指定用户发布及被@推文相关问题

Twitter Streaming API 过滤逻辑解决方案

以下逻辑适配Twitter API v1.1版本的返回字段结构。

1. 过滤指定用户自主发布的推文

stream.filter(follow=['user_id'])的默认返回规则:会返回所有和目标用户关联的事件,包括该用户发推、转推、回复他人、他人回复该用户、他人@该用户等内容,因此需要在on_status回调中新增多层过滤。

过滤条件

  • 第一层:确认发布者为目标用户:判断status.user.id_str是否等于你传入的目标用户ID,直接排除所有非该用户发布的内容
  • 第二层:排除转推内容:若存在status.retweeted_status字段,说明本条为转推,直接跳过,这也是你搜索到的示例代码的作用
  • 第三层:排除回复内容:若status.in_reply_to_user_id_str不为空,说明本条为该用户回复其他人的内容,不属于自主发布,直接跳过
  • 可选过滤:如果需要排除引用其他推文的原创内容,可新增判断hasattr(status, 'quoted_status'),存在该字段则跳过

代码示例

TARGET_USER_ID = "你的目标用户ID"
def on_status(self, status):
    # 非目标用户发布直接跳过
    if status.user.id_str != TARGET_USER_ID:
        return
    # 排除转推
    if hasattr(status, 'retweeted_status'):
        return
    # 排除回复
    if status.in_reply_to_user_id_str is not None:
        return
    # 可选:排除引用推文
    # if hasattr(status, 'quoted_status'):
    #     return
    # 剩下的就是目标用户自主发布的原创推文
    print(status.text)

2. 过滤@目标账号的提及推文

stream.filter(track=["@screen_name"])的默认返回规则:只要推文全文中出现@screen_name字符串就会返回,包括转推内容里的@、回复其他用户时附带的@、甚至正文文本中巧合出现的相同字符串,因此需要过滤:

过滤条件

  • 第一层:排除转推内容:同样判断是否存在status.retweeted_status,存在则跳过,避免转推内容里的@被计入
  • 第二层:校验官方识别的提及列表:Twitter API会在status.entities['user_mentions']中返回本条推文中真实@的所有账号列表,只有列表中存在目标账号的screen_name或user_id,才是有效提及
  • 可选过滤:如果仅需要定向发送给该用户的内容(即推文以@该账号开头,专门发给该用户的内容),可新增判断status.text.strip().startswith(f"@{TARGET_SCREEN_NAME}")

代码示例

TARGET_SCREEN_NAME = "你的目标账号用户名(不带@)"
TARGET_USER_ID = "你的目标用户ID"
def on_status(self, status):
    # 排除转推
    if hasattr(status, 'retweeted_status'):
        return
    # 检查是否为有效提及
    is_mention = False
    for mention in status.entities['user_mentions']:
        # 匹配user_id更准确(用户名可修改,ID不变)
        if mention['id_str'] == TARGET_USER_ID:
            is_mention = True
            break
    if not is_mention:
        return
    # 可选:仅保留开头@目标账号的定向发送内容
    # if not status.text.strip().startswith(f"@{TARGET_SCREEN_NAME}"):
    #     return
    # 剩下的就是符合要求的提及推文
    print(status.text)

内容的提问来源于stack exchange,提问作者Data_Science_110

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:45:03