2014-10-05 21 views
0

我的代码尝试在2014-10-01收集关于“cars”的推文。为了处理速率限制或任何其他与Twitter相关的错误(即超过容量),我最终实现了代码,告诉程序停止并等待TminepError发生时的20分钟。尝试绕过“Rate limits”和其他Twitter API错误失败

不幸的是,由于脚本崩溃,它不工作,我仍然可以看到速率限制错误消息。请指教,谢谢。

import tweepy 
import time 
import csv 

ckey = "xxx" 
csecret = "xxx" 
atoken = "xxx-xxx" 
asecret = "xxx" 

OAUTH_KEYS = {'consumer_key':ckey, 'consumer_secret':csecret, 
    'access_token_key':atoken, 'access_token_secret':asecret} 
auth = tweepy.OAuthHandler(OAUTH_KEYS['consumer_key'], OAUTH_KEYS['consumer_secret']) 
api = tweepy.API(auth) 

startSince = '2014-10-01' 
endUntil = '2014-10-02' 

searchTerms = 'cars' 

for tweet in tweepy.Cursor(api.search, q=searchTerms, 
    since=startSince, until=endUntil).items(999999999): 

    try: 
     print "Name:", tweet.author.name.encode('utf8') 
     print "Screen-name:", tweet.author.screen_name.encode('utf8') 
     print "Tweet created:", tweet.created_at 

    except tweepy.error.TweepError: 
     time.sleep(60*20) 
     continue 

    except tweepy.TweepError: 
     time.sleep(60*20) 
     continue 

    except TweepError: 
     time.sleep(60*20) 
     continue 

    except IOError: 
     time.sleep(60*5) 
     continue 

    except StopIteration: 
     break 
+0

你为什么不使用流API?它没有速率限制 - https://dev.twitter.com/streaming/overview – 2014-10-06 08:41:28

+0

哦,我不知道流媒体API没有速率限制。虽然我认为获得前一天的API数据对于我的项目来说更好,因为1)我担心互联网是否出现故障,流式传输将丢失大量数据,而要从API调用1%前一天的推文,如果情况变差,我可以重试,2)我实际上并不需要流式传输数据,因为我的当前应用程序不需要立即获取数据。 – KubiK888 2014-10-06 16:52:21

回答

0

您的问题是,你的try-except陈述情况的独立你的电话到Twitter API的。 tweepy.Cursor是触发速率限制错误的原因。您try

for tweet in tweepy.Cursor(api.search, q=searchTerms, 
    since=startSince, until=endUntil).items(999999999): 

,看看TweepError被捕获(应该是):尝试这一行。您可能需要稍作修改才能使光标从正确的位置继续,但它应该是微不足道的。