2014-10-05 38 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被捕獲(應該是):嘗試這一行。您可能需要稍作修改才能使光標從正確的位置繼續,但它應該是微不足道的。