使用tweepy.Stream过滤原创推文时偶发误放行回复的问题排查
Tweepy机器人误转回复推文修复方案
问题根因
现有过滤逻辑仅校验了in_reply_to_status_id字段是否为空,未覆盖两类符合回复/非原创特征、但该字段为空的场景:
- 他人转发的内容(存在
retweeted_status字段):转发动作本身不会生成回复ID,原内容即使是回复也会被现有逻辑放过 - 非正式回复:用户未点击回复按钮,手动输入@用户开头发布的内容,这类内容本质属于回复,但无回复ID关联
- 引用推文(存在
quoted_status_id字段):引用其他推文的内容不属于纯原创,也可能被误判为合规内容
修复方法
替换原有is_not_a_reply方法,增加多维度校验即可:
def is_not_a_reply(self, status): # 过滤正式回复内容 if status.in_reply_to_status_id is not None: return False # 过滤转发内容 if hasattr(status, "retweeted_status"): return False # 过滤引用推文内容 if hasattr(status, "quoted_status_id") and status.quoted_status_id is not None: return False # 可选:过滤开头@用户的非正式回复,不需要可删除本段 # 兼容长文本字段取值 if hasattr(status, "extended_tweet"): content = status.extended_tweet["full_text"] else: content = status.text if content.startswith("@"): return False return True
补充说明
原有代码中判断空值使用== None的写法不规范,Python 中推荐使用is None/is not None判断空值,避免自定义对象重载__eq__方法导致的判断异常。
内容的提问来源于stack exchange,提问作者Meysam
相关产品推荐
相关产品推荐

