[PYTHON] Seien Sie vorsichtig, wenn Sie in regelmäßigen Abständen Tweets mit der Twitter-API abrufen

Wenn Sie sorgfältig darüber nachdenken, ist es ganz natürlich, aber ich bin ziemlich süchtig danach, also lasse ich es als Memo.

Auslösen

Ich habe ein Skript geschrieben, das die Twitter-API verwendet, um Tweets in Python abzurufen und alle 15 Minuten in der Datenbank zu speichern, um es für Deep-Learning-Programme zu verwenden, aber manchmal ist die Anzahl der abgerufenen Tweets abnormal gestiegen. FullSizeRender.jpg Normalerweise dauert es durchschnittlich 20 Tweets / 15 Minuten, aber plötzlich werden nur an einigen Stellen fast 600 bis 700 Fälle erfasst. Dies geschieht fast jeden Tag, aber nicht zu einer festgelegten Zeit, und die Häufigkeit, mit der es an einem Tag geschieht, ist unbestimmt.

Tweet-Erfassungsprogramm, das ich verwendet habe

Es war ein Programm, das die ID des neuesten Tweets zum Zeitpunkt der vorherigen Erfassung speichert und bei der nächsten Ausführung vom neuesten Tweet zu diesem Tweet zurückkehrt und ihn erfasst.

--------------------Diesmal Akquisition--------------------
Tweet 1 ID 899673612013064192<-Geh von hier zurück
Tweet 2 ID 899673575619141633
Tweet 3 ID 899673508619276288
.         .          .
.         .          .
.         .          .
Tweet n ID 899669914251796480
--------------------Diesmal Akquisition--------------------
--------------------Letzte Akquisition--------------------
Tweet 1' ID 899669914251796480 <-Beenden Sie, wenn Sie hier erreichen
Tweet 2' ID 899669747448414209
Tweet 3' ID 899669628170911750
.         .          .
.         .          .
.         .          .
Tweet n' ID 899668363969941506 

Wie oben gezeigt, werden 100 Tweets vom letzten Tweet abwärts abgerufen. Wenn die Tweet-ID mit der zuletzt erhaltenen ID übereinstimmt, endet sie. In Python war es so:

fetch.py


for tweet in fetched:
    if tweet["id_str"] == last_time_id: # last_time_id ist eine Zeichenfolge
        break
    else:
        tweets.append(tweet)

Ursachen und Gegenmaßnahmen

Die Ursache war, dass der Tweet mit "last_time_id" vor der nächsten Erfassung gelöscht wurde. Oder der Retweet wurde abgesagt. Mit anderen Worten, es gibt keine Tweets mehr, die mit der ID von "last_time_id" übereinstimmen. Daher werden Neuerfassungen für immer wiederholt, ohne dass die ID von "tweet [" id_str "]" übereinstimmt. Das "id_str" in der Antwort der API ist die Zeichenkettenversion des ursprünglichen numerischen Werts "id" (es scheint, dass eine Zeichenkette vorbereitet wird, da je nach Sprache ein Fehler auftritt, wenn es sich um einen numerischen Wert handelt), aber ich verwende diesen Es scheint, dass es die Ursache war. Tweet-IDs sind Zahlen, die mit der Zeit zunehmen. Sie können den Fehler also folgendermaßen beheben:

fetch_fixed.py


for tweet in fetched:
    if tweet["id"] <= int(last_time_id):
        break
    else:
        tweets.append(tweet)

Ich habe gerade beide Seiten in Zahlen geändert und es in <= geändert. Selbst wenn der Tweet mit der ID "last_time_id" gelöscht wird, hat der vorherige Tweet eine kleinere ID, sodass Sie ihn an diesem Punkt brechen können.

Recommended Posts

Seien Sie vorsichtig, wenn Sie in regelmäßigen Abständen Tweets mit der Twitter-API abrufen
Seien Sie vorsichtig, wenn Sie CakePHP3 mit PHP7.2 ausführen
Achten Sie beim Erstellen einer Bildmaske mit Numpy auf den Typ
Twittern Sie regelmäßig mit der Twitter-API in Go-Sprache
Seien Sie vorsichtig, wenn Sie mit gzip-komprimierten Textdateien arbeiten
Klicken Sie nach der Oauth-Authentifizierung mit Django auf die Twitter-API
Seien Sie vorsichtig, wenn Sie die Eigenvektoren einer Matrix unterscheiden
Seien Sie vorsichtig beim Lesen von Daten mit Pandas (geben Sie dtype an)
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
Lösung, wenn das Bild mit tkinter [python] nicht angezeigt werden kann
Optimieren Sie das Sammeln von Informationen mit Twitter API und Slack Bots
Verwenden Sie die Twitter-API mit Python
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit der Twitter-API
Unterstützen Sie sich mit der Twitter API
Rufen Sie die API mit python3 auf.
Suche nach Twitter-Tweets mit Python
Erfolgreiches update_with_media mit Twitter API
Seien Sie vorsichtig, wenn Sie den Standardargumentwert in der Python 3-Serie angeben
[Neueste Version] Lassen Sie den Bot in regelmäßigen Abständen mit discord.py sprechen
[Python] Code, der zu Beginn beim Scraping als Anfänger mit Hirntod geschrieben werden kann