【问题标题】:How do I make sure a twitter bot doesn't retweet the same tweet multiple times?如何确保 Twitter 机器人不会多次转发同一条推文?
【发布时间】:2013-04-04 06:00:06
【问题描述】:

我正在用 Python 编写一个简单的 Twitter 机器人,想知道是否有人可以为我回答和解释这个问题。

我可以发布推文,但我还没有让机器人转发任何人。我害怕多次发布用户的推文。我计划让我的机器人仅基于 Windows 计划任务运行,因此当脚本(例如)第三次运行时,我如何获取它以便脚本/机器人不会再次转发推文?

为了澄清我的问题: 假设有人在下午 5:59 发推文“#computer”。现在我的 twitter 机器人应该转发任何包含 #computer 的内容。假设当机器人在下午 6:03 运行时,它会找到该推文并转发它。但是,当机器人在下午 6 点 09 分再次运行时,它会再次转发同一条推文。如何确保它不会转发重复的推文?

我是否应该创建一个单独的文本文件并添加推文的 ID 并在每次机器人运行时通读它们?我无法找到任何有关此问题的答案,也不知道有效的检查方法。

【问题讨论】:

    标签: python twitter


    【解决方案1】:

    您应该将处理的最新推文的时间戳存储在某处,这样您就不会两次浏览相同的推文,因此不会转发两次推文。

    这也应该使推文处理更快(因为您只处理每条推文一次)。

    【讨论】:

    • 我一直在尝试考虑如何在程序本身内“内部”存储时间戳 - 可能吗?我只能想到打开、写入和读取一个 txt 文件并对其进行检查。
    • 好吧,如果您不将最后处理的推文的时间戳保存在文件中(本地或在线),那么在程序关闭后您将无法检索它。因此,您可能应该一个接一个地处理推文,并在程序退出时保存最后处理的推文,这样您下次打开时就不会重新处理它!
    • @simplycoding 您能接受答案或告诉我们您还需要什么吗?
    【解决方案2】:

    几个月前我用 python 写了一个 twitter 机器人,这个link 帮助很大。我还使用了这个github repo,虽然它是在 Ruby 中,但对逻辑流很有帮助。这个 repo 使用了与您提到的类似的方法,创建了以前转发的本地数据存储,以与每条推文进行比较。

    【讨论】:

    • 您能否解释一下本地数据存储的含义?它只是另一个文本文件还是其他东西?我尝试浏览了这两个存储库,但不太了解发生了什么......
    • 是的,您可以使用文本文件或 sqlite 数据库。我找到了另一个对我有很大帮助的链接,作者做了同样的事情,将推文 ID 写入文本文件。链接在这里:inventwithpython.com/yhobos_script.py
    【解决方案3】:

    我就是这样做的。我抓取了要转发的内容列表和我的提要列表。我将列表缩减为仅在过去 24 小时内发布的帖子。然后对于可转发的每个项目,我检查它是否在我的提要列表中。如果不是,我会发布 RT @user 转推内容。

    我还编写了一个函数来将 str 缩减为 140 个字符(137 + '...')

    例如

    TO_RT = 'a post to post'
    MYTWT = ('old post', 'other old post')
    
    if TO_RT not in MYTWT
      Tweet(TO_RT)
    

    【讨论】:

      【解决方案4】:

      Twitter 设置为您不能多次转发同一件事。因此,如果您的机器人收到这样的推文,它将被 API 重定向到错误 403 页面。您可以通过将脚本每次运行之间的时间缩短到大约一分钟来测试此策略;这将生成错误 403 链接,因为当前的推文提要保持不变。

      【讨论】:

        猜你喜欢
        • 2018-01-18
        • 2023-04-07
        • 1970-01-01
        • 2018-04-02
        • 2018-08-28
        • 1970-01-01
        • 1970-01-01
        • 2013-11-24
        • 2017-07-31
        相关资源
        最近更新 更多