如何在tweepy中自动回复包含关键字的实时推文?

时间:2015-11-21 17:20:19

标签: python twitter tweepy

所以我下面的代码是我做的,但它只回复现有的推文,我试图在循环中运行它,但它非常快速地达到api限制,我可以延迟时间,但我想要更高效的东西而且很快,我听说过使用推文流,我不明白它是如何工作的我是新编码的,不管怎样,这里的代码很快就能达到api限制

import tweepy
from random import randint
from time import sleep

CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
ACCESS_TOKEN = 'xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
ACCESS_TOKEN_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)

num=0
count=0
temp=0

while (count < 100):

    firstTweet = api.search("dogs")[0]
    if firstTweet.id==temp:
        sleep(randint(10,20))
        continue

    rid=firstTweet.id
    rsn=firstTweet.user.screen_name

    m="@%s If you love dogs, follow us" % (rsn)
    api.update_status(status=m, in_reply_to_status_id=rid)
    count=count+1
    print(count)
    temp = firstTweet.id

基本上它搜索关于狗的推文,获取最多的推文,回复它,并在温度中保存推文ID,以便循环继续运行,如果顶部推文仍然相同,它不会回复一次它会改变(也就是有一条新的推文)它会回复,但是这段代码只运行了5分钟然后命中限制有没有其他方法可以做到这一点?

2 个答案:

答案 0 :(得分:0)

如果您只是提出搜索请求,那么最好使用应用程序身份验证(oauth2),它允许您每15分钟搜索450个请求。

但是,您还要进行更新状态请求,这要求您使用用户身份验证(oauth1)进行身份验证,就像您在示例中所做的那样。这使您可以每15分钟发出180次搜索请求。

但是,更大的问题是更新状态请求。 Twitter没有公布此请求的速率限制,因为它会使垃圾邮件发送者更容易做到这一点。

您唯一的办法是检查Twitter是否返回403错误,这意味着您已达到限制。然后等待15分钟后再尝试。你经常要小心超过这个限制;否则,Twitter会认为你是垃圾邮件。

答案 1 :(得分:0)

你的答案有几个错误。首先,如果您使用声明

firstTweet = api.search("dogs")[0]

您实际上是在进行API调用,但最终只保存搜索API返回的第一条推文。如果您查看Twitter API文档(https://dev.twitter.com/rest/reference/get/search/tweets),则在每次调用api.search()时,都会返回默认的15条推文。这就是你超出限制的原因。

现在解决方法是使用tweepy Cursor。可以找到相同的示例here。还要确保使用since_id&amp;搜索API调用中的max_id个参数,以便您在下一次调用search时收到一组新的推文。否则,您将在每次通话中获得相同的推文。这在上面的链接的评论部分中得到了很好的解释。