所以我下面的代码是我做的,但它只回复现有的推文,我试图在循环中运行它,但它非常快速地达到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分钟然后命中限制有没有其他方法可以做到这一点?
答案 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
时收到一组新的推文。否则,您将在每次通话中获得相同的推文。这在上面的链接的评论部分中得到了很好的解释。