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

使用Tweepy创建Twitter线程时报错187状态重复如何解决

问题原因与修复方案

报错187的根因

tweepy.error.TweepError: [{'code': 187, 'message': 'Status is a duplicate.'}] 是推特平台的反垃圾机制触发,你要发布的推文内容和该账号历史发布过的内容完全重复,被系统拦截了。

现有代码的逻辑缺陷

你当前的实现有2个明显问题:

  • 账号时间线home是在循环开始前一次性拉取的,不会自动更新。你发布完第一条推文后,home[0]仍然是执行代码前的最新推文,不是刚发的第一条线程内容,后续回复的目标ID完全错误,很容易出现内容重复、线程串位的问题
  • 拆分后的短语如果有重复,或者和历史发布内容撞车,就会触发187报错

修复后的实现方案

优化逻辑:每次发布完推文直接保存该条的ID作为下一条的回复目标,同时给每条内容加序号后缀,既避免重复报错,也方便读者阅读线程,代码示例如下:

import time

# tweet_list 为拆分完成的短语列表
last_tweet_id = None

for index, content in enumerate(tweet_list):
    # 拼接序号后缀,格式为「当前条数/总条数」
    tweet_text = f"{content} {index + 1}/{len(tweet_list)}"
    if last_tweet_id is None:
        # 发布线程第一条内容
        publish_resp = api.update_status(status=tweet_text)
        last_tweet_id = publish_resp.id
    else:
        # 回复上一条内容,接续线程
        publish_resp = api.update_status(
            status=tweet_text,
            in_reply_to_status_id=last_tweet_id,
            auto_populate_reply_metadata=True
        )
        # 更新为最新发布的推文ID
        last_tweet_id = publish_resp.id
    time.sleep(30)

额外排查建议

  • 如果不需要显式展示序号,可以在内容末尾加无意义的随机字符(比如1位随机数字),同样可以避开重复校验
  • 若修改后仍然报错187,检查你的拆分逻辑是否输出了完全一致的短语片段
  • 不要通过拉取账号时间线的方式获取上一条推文ID,万一sleep间隔内账号发布了其他内容,会导致整个线程串到无关推文下,直接保存接口返回的ID是最稳妥的实现方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:36:03