2016-08-04 46 views
0

Python-Code unter Verwendung von Tweets zu sammeln und es in eine CSV-Dateiimmer diese Fehlermeldung, wenn verwendet tweepy

Fehlern

tweepy.error.RateLimitError Rückkehr hält an: [{ 'Code': 88, 'message' : ‚Rate Grenze überschritten‘}]

versuchen, die letzten Zeitleiste und senden alle diese Tweets auf die cSV-Datei

dank für jede Hilfe

def get_all_tweets(screen_name): 

    #authorize twitter, initialize tweepy 
    auth = tweepy.OAuthHandler(consumer_token, consumer_secret) 
    auth.set_access_token(access_token, access_secret) 
    api = tweepy.API(auth) 

    #initialize a list to hold all the tweepy Tweets 
    alltweets = []  


    new_tweets = api.home_timeline (screen_name = screen_name,count=20) 

    #save most recent tweets 
    alltweets.extend(new_tweets) 

    #save the id of the oldest tweet less one 
    oldest = alltweets[-1].id - 1 

    while len(new_tweets) > 0: 
     print ("getting tweets before %s" % (oldest)) 

     #all subsiquent requests use the max_id param to prevent duplicates 
      new_tweets = api.home_timeline(screen_name =  screen_name,count=20,max_id=oldest) 

     #save most recent tweets 
     alltweets.extend(new_tweets) 

     #update the id of the oldest tweet less one 
     oldest = alltweets[-1].id - 1 

     print ("...%s tweets downloaded so far" % (len(alltweets))) 

    #transform the tweepy tweets into a 2D array that will populate the csv  
    outtweets = [[tweet.id_str, tweet.created_at, tweet.text.encode("utf-8")] for tweet in alltweets] 

    #write the csv  
    with open('%s_tweetsBQ.csv' % screen_name, 'w') as f: 
     writer = csv.writer(f) 
     writer.writerow(["id","created_at","text"]) 
     writer.writerows(outtweets) 

    pass 


    if __name__ == '__main__': 
    #pass in the username of the account you want to download 
    get_all_tweets("BQ") 
01 zu erhalten

Antwort

1

Ihr Code in Ordnung ist, erreicht man nur den Twitter-Streaming API Limit. Es dauert ungefähr eine Stunde, damit Sie Tweets erneut extrahieren können.

Sie sollten die wait_on_rate_limit=True Option hinzufügen, bei der Initialisierung tweetpy:

api = tweepy.API(auth, wait_on_rate_limit=True) 

Ich empfehle, dass Sie einen Blick auf: https://dev.twitter.com/rest/public/rate-limiting für weitere Details.

+0

wäre es möglich, damit alle Tweets ab einem bestimmten Tag zu bekommen? – Barry

+0

Wenn Sie Tweets der letzten Tage erhalten möchten, muss Ihr Code etwas optimiert und geändert werden, da die Streaming API Tweets liefert, die wie jetzt getwittert wurden. Darüber hinaus speichert Twitter Tweets bis zu einer Woche in der Vergangenheit, so dass Tweets von zwei Wochen in der Vergangenheit nicht erhalten werden können. –

+0

Wie würde ich das machen? fügen Sie den spezifischen Tag hinzu, den ich will? – Barry

0

Haben Sie diese Option auf tweepy Initialisierung hinzuzufügen versucht, so wird es warten, anstatt zu scheitern, wenn Rate Limit erreicht ist:

api = tweepy.API(auth, wait_on_rate_limit=True)