Zurück zum Blog

Twitter-Daten mit Python extrahieren

Twitter-Daten mit Python extrahieren

Twitter ist nicht nur eine erweiterte Nachrichtenquelle, es ist bei Weitem eine der besten Stichproben der Gedanken der Welt. Mit mehr als 330 Millionen aktiven Nutzern ist es eine der Top-Plattformen, auf denen Menschen gerne ihre Gedanken teilen. Twitter-Daten können für eine Vielzahl von Zwecken verwendet werden, wie zum Beispiel Forschung, Verbrauchererkenntnisse, demografische Erkenntnisse, und viele mehr.

Daher ist das Hauptziel dieses Tutorials, Ihnen zu zeigen, wie Sie eine für Ihr Projekt oder Ihr Unternehmen relevante Stichprobe von Twitter-Daten erhalten.

Stellen Sie vor dem Fortfahren sicher, dass Sie alle diese Variablen griffbereit haben:

  1. Consumer Key
  2. Consumer Secret
  3. Access Token
  4. Access Token Secret

Wenn Sie wissen möchten, wie Sie die oben genannten Details erhalten, lesen Sie den Blogbeitrag, der von meinem Kollegen Dattatray Upase geschrieben wurde.

Jetzt geht’s ans Codieren!

Definieren der Eingabevariablen

Zuerst müssen Sie einige der globalen Variablen definieren, die Sie für das Programm benötigen:

Ich importiere ‘sys’, um Befehlszeilenargumente abzurufen, da ich möglicherweise Keywords, das Start- oder Enddatum ändern möchte. Für die Sprache habe ich Englisch gewählt, aber Sie möchten vielleicht prüfen, welche anderen Sprachen unterstützt werden. Die Ergebnisse werden am Ende in ‘data’ gespeichert.

Infolgedessen würde eine typische Verwendung des Skripts wie folgt aussehen:

python script.py start_date end_date keyword

Zugriff auf die Twitter-API
Twitter ermöglicht die Nutzung seiner API über ein oauth2-Autorisierungs-Framework. Sie stellen auf ihrer Website die Dokumentation bereit, mit der das Filtern von Tweets durchgeführt werden kann. Der obige Codeausschnitt würde dies für Sie implementieren.

Die req_count-Variable ist die Anzahl der Male, die ich die API bei der Ausführung meines Programms verwendet habe. Ich erhalte den folgenden Fehler mit dem angegebenen Code:

TypeError: Unicode-objects must be encoded before hashing

Um dies zu vermeiden, ändere ich post_body=”” in post_body=b”” und das behebt das Problem.

Twitter-API-Nutzung und -Referenz

Es ist an der Zeit, die API-URL festzulegen, um die Twitter-Daten abzurufen. Ich verwende den Parameter min_faves. Hier ist die Erklärung der URL und einige Optimierungstricks:

‘min_faves’ wird verwendet, um die Mindestanzahl an Favoriten festzulegen, die ein Tweet in den Daten haben sollte. Es ist eine sehr nützliche Funktion, aber sie wird in der Twitter-API-Dokumentation nicht erwähnt.

‘q’ repräsentiert die Suchanfrage oder die Keywords, die Sie eingeben möchten. Hier ist es wichtig, sicherzustellen, dass Sie so wenige Keywords wie möglich angeben. Stellen wir uns beispielsweise vor, ich möchte Tweets über Facebook und Google. Wenn ich beide als Keywords angebe, sagen wir FACEBOOK und GOOGLE, wird es mir maximal nur 100 Tweets zurückgeben, da dies eine Einschränkung ist. Wenn ich die Abfrage jedoch zweimal ausführe – einmal mit Facebook und einmal mit Google, kann ich insgesamt 200 Tweets erhalten. Kurz gesagt: Es ist besser, ein Keyword pro Abfrage zu verwenden.

‘lang’ repräsentiert die Sprache der gefilterten Tweets. Da ich Tweets auf Englisch erhalten möchte, setze ich es auf ‘en’.

‘since’ ist das Startdatum des Zeitraums, aus dem Sie nach Tweets suchen möchten. Dieses Startdatum sollte aus den letzten 7 Tagen stammen. Dies ist eine weitere Funktion, die in der Twitter-API-Dokumentation nicht dokumentiert ist.

‘until’ repräsentiert das Enddatum Ihres gewünschten Zeitraums. Logischerweise sollte es auch aus den letzten 7 Tagen stammen. Es ist auch nicht in der Twitter-API-Dokumentation dokumentiert.

‘result_type’ repräsentiert die Art von Tweets, die Sie möchten. Es hat 3 Werte:

‘recent’ liefert die neuesten Tweets, d. h. die Tweets am Ende des ausgewählten Zeitraums.

‘popular’ liefert die beliebtesten Tweets und lässt daher viele Tweets aus. Sie würden immer die Tweets mit den meisten Favoriten und Retweets erhalten. Das min_faves -Feature wäre hier nutzlos.

‘mixed’ liefert eine Mischung aus aktuellen und beliebten Tweets.

‘count’ stellt die maximale Anzahl von Tweets im Ergebnis dar. Der Standardwert ist auf 15 eingestellt und das Maximum ist 100.

Mit dem gemischten result_type und der Verwendung von min_faves, können wir die maximale Anzahl an Tweets abrufen, indem wir die Abfrage mehrmals ausführen.

Für weitere dokumentierte Funktionen können Sie sich auch die Twitter’s API-Dokumentation.

Speichern/Automatisches Speichern der abgerufenen Tweet-Daten

Als nächsten Schritt müssen Sie eine Methode zum automatischen Speichern/Speichern definieren, die den Parameter ‘saveOverride’ hat. Dieser Schritt ist einfach erforderlich, um die Zeitbeschränkung für das automatische Speichern aufzuheben und die Datei zu speichern. Um dies zu tun, erstelle ich ein t_last um die Startzeit des Programms zu speichern. Dann greife ich im Programm darauf zu und prüfe, ob seit dem t_last (letzte Speicherzeit). Wenn mehr als 5 Minuten vergangen sind, markiere ich den „saveStatus“ als True.

Als Nächstes prüfe ich auf „saveOverride“, was einfach bedeutet, dass ich meinem Programm die Anweisung geben muss, dass die Datei auf jeden Fall jetzt gespeichert werden soll. Hierfür setze ich den saveStatus auf True.

Wenn dann „saveStatus“ True ist, ändert das Skript die t_last auf die aktuelle Zeit. Danach erstellt der Code ein Dictionary-Objekt und gibt “Autosave um [time]” aus, damit Sie wissen, dass die Daten automatisch gespeichert werden.

Als Nächstes prüfe ich, ob die Ausgabedatei bereits existiert. Wenn dies der Fall ist, kombiniere ich die Daten und die Daten aus einer bereits gespeicherten Datei. Nach dem Kombinieren schreibe ich sie in dieselbe Datei. Wenn sie nicht existiert, erstelle ich eine neue Datei und schreibe die Daten dann in diese Datei.

Als Ergebnis habe ich fast die gesamte Funktionalität programmiert, die ich wollte.

Weitere Optimierung

Schließlich ist es an der Zeit, diese Funktionen zu nutzen. Ich schreibe eine while(1)-Schleife, was while(True) bedeutet. Dies führt im Wesentlichen dazu, dass die Anweisung ewig läuft, bis eine ‘break’-Anweisung aufgerufen oder eine Ausnahme ausgelöst wird.

Zuerst sammle ich die Tweet-Daten im Dictionary  ‘d’ mit json.loads das die Daten in ein Dictionary-Format umwandelt. Dann führe ich ein try-catch/except auf dem Codeblock, der Statusmeldungen aus den Daten extrahiert. Ich verwende try-catch, weil die Twitter-API manchmal keine Daten zurückgibt, sondern ein JSON, das den Fehler meldet. Ich möchte nicht, dass mein Programm in solchen Fällen stoppt. Außerdem möchte ich, dass es abruft, bei welcher Anforderungsnummer das passiert, und meine Twitter-Daten mit dem autosave-Befehl speichert. Twitter erlaubt es uns, 180 Anfragen pro 15 Minuten zu stellen. Das sind etwa 12 Anfragen pro Minute oder eine Anfrage alle fünf Sekunden. Um auf Nummer sicher zu gehen, füge ich einen sleep-Befehl hinzu, damit mein Programm nach der Ausführung einer Iteration 5 Sekunden lang pausiert.

Danach zeigt der Code die Anzahl der Tweets an, die das Skript bisher gesammelt hat.

Schließlich ist es Zeit für den großen Optimierungstrick. Ich habe dieses Skript fast eine Woche lang getestet und die folgende Anzahl von Tweets für jeden min_faves-Wert erhalten. Ich kann maximal 100 Tweets pro Anfrage abrufen und möchte so viele wie möglich erhalten. Derzeit gibt es nicht viele Tweets mit höheren Werten von min_faves, aber wir wollen die Zeiten berücksichtigen, in denen das Unternehmen oder das Keyword vielleicht im Trend liegt. Der Maximalwert von min_faves kann 999999 sein.

min_faves-Wert Anzahl der Tweets
100,000 1
90,000 1
80,000 1
70,000 2
60,000 3
50,000 6
40,000 6
30,000 12
25,000 12

Daher verwende ich eine Logik, die Tweets von einem min_faves-Wert von 60000 abruft und diesen dann jedes Mal um 10000 verringert, bis er 10000 erreicht. Aber wenn wir beispielsweise annehmen, dass das Keyword im Trend liegt und ich 100 Tweets erhalte, wenn ich mit dem Wert von min_faves auf 30000 arbeite, wird es den min_faves auf 35000 erhöhen und dann die Ergebnisse erneut abrufen. Die neue Logik ist nun also 5000 statt 10000. Wenn sich die Änderung jedoch auf weniger als 1000 verringert, weise ich sie an, dies zu ignorieren und mit dem Abziehen von 1000 fortzufahren.

Ich lege ein festes Intervall von 1000 fest, um das min_faves verringert werden soll, wenn min_faves ist kleiner oder gleich 10000.

Am Ende des Programms teilt Ihnen das Programm mit, dass die Arbeit erledigt ist, indem es ‘End’ anzeigt.

Den gesamten Code findest du auf GitHub.

Das war’s. Im nächsten Twitter-Daten-Tutorial werde ich dir zeigen, wie du Echtzeit-Tweets mit dem Big-Data-Tool ‘Flume’ abrufst. Bleib dran!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev ist ein kreativer Designer bei CloudSigma und konzentriert sich auf eine konsistente Unternehmensidentität durch traditionelle und innovative Marketingkanäle. Er versteht es meisterhaft, künstlerische Vision mit strategischem Marketing zu verbinden, um wirkungsvolle Markengeschichten zu schaffen.

Kommentare

Noch keine Kommentare. Schreiben Sie den ersten.