2017-07-06 3 views
0

Hier ist der Code, den ich für den Zweck verwende .Für jede Benutzeranforderung dauert es zu lange Zeit, um alle Tweets herunterzuladen. Was sind einige Möglichkeiten, um die Ausführungszeit zu beschleunigen.Die Idee besteht darin, Tweet Analytics in Echtzeit zu verwenden wie der Benutzer die Website besucht. Ich bin neu zu Python, so würde jede Hilfe geschätzt werden.Gibt es eine Möglichkeit, Python-Code zum Herunterladen von Tweets mit Tweepy zu beschleunigen?

import tweepy #https://github.com/tweepy/tweepy 


#Twitter API credentials 
consumer_key = ".." 
consumer_secret = ".." 
access_key = ".." 
access_secret = ".." 


def get_all_tweets(screen_name): 
    #Twitter only allows access to a users most recent 3240 tweets with this method 

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

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

    #make initial request for most recent tweets (200 is the maximum allowed count) 
    new_tweets = api.user_timeline(screen_name = screen_name,count=200) 

    #save most recent tweets 
    alltweets.extend(new_tweets) 

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

    #keep grabbing tweets until there are no tweets left to grab 
    while len(new_tweets) > 0: 
     print ("getting tweets before %s".format(oldest)) 

     #all subsiquent requests use the max_id param to prevent duplicates 
     new_tweets = api.user_timeline(screen_name = screen_name,count=200,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".format(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] 
    return outtweets 

Antwort

2

Ein Weg, um Ihre Lösung schneller zu machen, wäre, etwas Cache zu machen.

Wenn Sie alle Tweets für einen Chat-Namen heruntergeladen haben, sie zum Beispiel als [twitter_screen_name] lokal speichern .json

dann Ihre Funktion bearbeiten für Ihre Cache-Dateien zu überprüfen. Wenn es nicht existiert, erstellen Sie es leer. Dann lade es, aktualisiere nur, was nötig ist, und speichere deine json-Cache-Datei.

So, wenn ein Benutzer besucht, laden Sie nur das diff mit Twitter herunter. Dies wird für die regelmäßig aufgerufenen Bildschirmnamen viel schneller sein.

Dann könnten Sie etwas hinzufügen, um den Cache automatisch zu löschen - ein einfaches CRON, das Dateien mit zuletzt zugegriffenem META entfernt, die älter als n Tage sind.

Verwandte Themen