Python 脚本,用于转发特定推文的 twitter 机器人

Posted

技术标签:

【中文标题】Python 脚本,用于转发特定推文的 twitter 机器人【英文标题】:Python script, twitter bot for retweeting specific tweets 【发布时间】:2018-01-18 08:30:44 【问题描述】:

我制作了一个 Twitter 机器人,用于转发、关注和取消关注人(达到最大值时),但是当我认为我的机器人完全可以运行时,Twitter 阻止了我。那是因为如果不想检查我的机器人是否已经转发了一条推文但我有一个 try/except 块。所以我做了很多 api 调用来转推......我想知道如何检查我是否已经转推了这条推文? 我想查找已转发推文的每个用户,如果我的用户名在其中,则传递到下一条推文,但这不是很有效。我可以分享我的代码,并随时要求任何澄清。 谢谢, 卡伊皮奥 PS:我正在使用 tweepy 与 API 进行交互!

更新,这是我的代码的一部分,只是检查转发的部分:

loginToTwitter()
query = 'a string'  
tweet_cursor= tweepy.Cursor(api.search, query, result_type="recent").items()
print("Searching")
for tweet in tweet_cursor:
    tweetText = tweet.text.lower()
    if "rt" in tweetText:
        if tweet.retweeted == True: #It return me each time a false boolean but then I get the api.code 327 from twitter 
            print("already retweeted")
            continue
        try:
            api.retweet(tweet.id)
            print('Retweedted')
            time.sleep(2)
        except tweepy.TweepError as e:
            if e.api_code == 327:
                print("Tried but tweet already Retweeted" )
            print(e)
            time.sleep(0.5)
            continue

【问题讨论】:

“我可以分享我的代码”请这样做 如果您使用的是 REST API,那么是的,您会调用很多转推。为什么不看看流式 API(tweepy 也可以处理)? 更新状态!阿列克斯·安德烈耶夫 @ason​​gtoruin 你能解释一下我如何在我的机器人上使用流 API 吗?根据我对研究的理解,这就像对 twitter 服务器的开放请求。 【参考方案1】:

您可以通过跟踪推文的 id 来检查您是否已经转发了特定推文。在转发之前,只需对照您的 id 列表(或数据库表)检查推文的 id。如果您正在转发的推文也是对另一条推文的转发,您可以通过查看 retweet_status 字段来检查该推文的 ID。

我认为您不会因为多次转发同一条推文而被屏蔽。一般来说,Twitter 不会让你在 24 小时内多次发布同一条推文。 Twitter 将改为返回错误代码 187。 (Twitter's error codes.) 如果您发推文过于频繁,您可能会被屏蔽。 Twitter 没有指定状态更新的速率限制。如果您确实超出了他们的内部速率限制,您将收到一个 403 HTTP 状态代码,然后您可以退出更新,直到您不再收到 403 代码。

【讨论】:

我刚刚更新了我的问题,以便更好地理解我的问题。我有一个 try/catch 块的事实使我的机器人每次都执行 api 请求。我在一个半月内转发了 2 万条推文。该文件会很大:p 我想到了,我认为它可以在更小的范围内工作! Twitter 将允许您在 24 小时后发布相同的推文。因此,该文件只需要包含您在过去 24 小时内发布的推文。只需在 24 小时后从文件中删除推文。 您的 try/catch 的问题在于,当 Twitter 向您发送一个要求您停止发推文一段时间的错误时,您的代码会忽略该错误并继续发推文。然后你就被屏蔽了。 但我只想转发一条推文。是否有 API 调用来检查我或特定用户(我会写我的用户名)是否转发了推文?我没有在 24 小时内得到这个东西,如果我转发一条推文,他将永远转发,或者直到用户删除它。 不,没有 API 调用来检查是否有人转发了推文。【参考方案2】:

我们在这里讨论了多少条推文?您可以使用 sqlite 数据库来存储您已经转发的推文的 ID。如果推文太多,您可以清理您在 10 天前转发的推文 ID 的数据库,假设您在 10 天后找不到相同的推文?

【讨论】:

我转发赠品,推文数量巨大,数据库也很大。有些赠品会在一个月左右后结束..

以上是关于Python 脚本,用于转发特定推文的 twitter 机器人的主要内容,如果未能解决你的问题,请参考以下文章

Twitter 流式处理脚本在推文的位置字段上抛出一个 keyerror

如何在不和谐机器人中显示用户自己对他人推文的转发?

从特定用户那里获取对特定推文的推文回复

获取推文作者对特定推文的推文回复

回复特定推文,Twitter API

特定推文的 Twitter 链接的 URL