[PYTHON] Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (1))

Bis zum letzten Mal

Denke erst

Wenn Sie entschieden haben, was zu tun ist und die Aussetzung, ist es Ihr Stil, ** von Google zu starten. Kurz gesagt, "** 80% von dem, was ich tun wollte, ist jemand, der es zuerst tut **". Sogar in Qiita, Ähnliche Dinge ( Ich meine, es gibt Leute, die fortgeschrittenere Dinge tun) , und ich habe keine andere Wahl, als es als Referenz zu verwenden, aber leider gibt es keine Fälle, in denen alles in Ordnung ist. Soweit ich Stack Over Flow untersucht habe, gab es keinen Fall, in dem ein Programm veröffentlicht wurde, das die erforderlichen Spezifikationen ordnungsgemäß erfüllen konnte. Es wäre einfacher gewesen, wenn es ... Chi </ sub> gegeben hätte

Selbst wenn Sie durch Kopieren und Einfügen des Skripts etwas erstellen, das den Anforderungen im Bereich des persönlichen Gebrauchs von Skripten entspricht, müssen Sie diesen Bereich anscheinend selbst organisieren.

Warum überhaupt Public Stream?

Es gibt ungefähr zwei Arten der Datenerfassung von Twitter: "** REST-API ** verwendet" und "** Streaming-API ** verwendet". ** REST ** ist eine Möglichkeit, eine Nachricht zu senden und das Ergebnis zurückzugeben, während ** Streaming API ** einen Befehl einmal sendet und das Ergebnis dann endlos an ihn sendet. Es wird gesendet. (Und ich verstehe. Bitte überprüfen Sie die Literatur für Details. )

Der Grund, es überhaupt zu Public Steram zu machen, ist

  1. Es bestand eine große Wahrscheinlichkeit, dass die erwartete Durchflussrate die im REST-Format erreichbare Grenze überschreitet.
  2. Solange Sie Twitter API Pocket Reference kaufen und lesen, tun Sie dies mit REST (wenn Sie nur davon ausgehen, dass Sie lesen). Es scheint unerwartet nervig zu sein.

Es ist ein sehr fauler Grund, dass die Stream-API weniger problematisch zu sein scheint als REST, wenn Sie nur eine geeignete Bibliothek einbringen und sie lesen. Sie sollten einfach weiter werfen, was in die DB gesendet wurde.

Es gibt auch mehrere Stream-APIs, ** "Alles, was zu Twitter fließt (Vertrag erforderlich)" **, ** "Tweets auf meiner Timeline" **, ** "Zufällig 1% der Gesamtzahl" * Es gibt mehrere * und ** "Ergebnisse, die durch Schlüsselwörter, Gebietsschemas usw. für das Ganze eingegrenzt werden" , aber hier die letzten " <a href =" https://dev.twitter.com/streaming/reference " / post / statuses / filter "> Eingeschränkt durch das angegebene Suchwort **" wird verwendet. Public Stream scheint ein Oberbegriff für diese zu sein, aber da bin ich mir nicht sicher. (Ich habe es gerade nachgeschlagen, aber ist es in Ordnung zu verstehen, dass die Gesamtzahl der Tweets, die mit Filfer abgerufen werden können, nicht 1%, sondern alle beträgt?) </ Small>

Trennen und wieder verbinden

Vielleicht, weil es ein Rotor-Mensch ist, wird gesagt, dass die Stream-API eine HTTP-Verbindung aufrechterhält, aber sie ist unzuverlässig, oder ** sie trennt die Verbindung, selbst wenn nichts passiert. Ich bin eher vorsichtig, wenn ich nicht verbunden bin **, weil es kein Problem gibt. Selbst wenn Sie sich das vorherige Nachschlagewerk (Taschenreferenz) ansehen, ist es so geschrieben, dass Sie von einer erneuten Verbindung ausgehen müssen, da die Verbindung getrennt wird, wenn etwas passiert. …… Aber selbst wenn Sie sich die Seite einer bekannten Bibliothek oder das Beispiel für die Implementierung selbst ansehen, gibt es keine Seite, die die Wiederverbindung nach dem Trennen * innerhalb des Bereichs beschreibt, den Sie ungefähr sehen können. * * ...... Kannst du das mit der API machen? Wenn ja, war es noch nie so einfach ...

(Hinweis für diejenigen, die wissen: Ich schreibe während des Codierens und Erinnerns entlang der Zeitreihen in meinem Gehirn, also warten Sie bitte eine Weile.)

Bibliotheksauswahl

Ich muss über viele Dinge nachdenken, aber ich habe mich entschlossen, eine mit Twitter verbundene Bibliothek mit vielen japanischen Materialien in Betracht zu ziehen, um auf den wunderbaren Code meiner Vorgänger zu verweisen.

  • Natürlich muss es die Stream-API unterstützen
  • Idealerweise sollten Sie eine schnelle Antwort von Google erhalten. Auf dieser Grundlage habe ich mich für Tweepy entschieden.

Als ich auf der Datenbankseite unter dem gleichen Gesichtspunkt nach einer Bibliothek suchte,

  • Wie auch immer, die Menge der Codierungsbeschreibung ist gering
  • Sie können die Antwort normalerweise über Google finden.
  • MongoDB-Beamter oder ähnliches Aus diesem Grund habe ich mich für PyMongo entschieden.

Eine Eisenplatte, die dazu neigt, passend zu sein? Nun, wenn Shiroto etwas dagegen tun müsste, müsste er den Standard verwenden ...

Entwicklungsumgebung.

Nachdem Sie entschieden haben, was verwendet werden soll, bereiten wir eine Entwicklungsumgebung und eine Testumgebung vor. Ich bin ein Gatchigachi Win-Shop, der von VB und in C → VC ++ → C # kam. Die Umgebung, die für die Entwicklung verwendet werden kann, ist natürlich auch Windows. Es versteht sich von selbst, dass es ideal ist, bis kurz vor Release = Implementierung unter Win zu entwickeln. Oder besser gesagt, wenn Sie keine IDE (Integrated Development Environment) haben, werden Sie sofort sterben. Umso mehr, wenn Ihnen gesagt wird, wie es unter Linux geht, haben Sie keine andere Wahl, als sich zu setzen.

Da es sich um eine Skriptsprache handelt, besteht glücklicherweise keine große Abhängigkeit von der Umgebung, und heutzutage ist die Installation von Bibliotheken usw. automatisiert, sodass die Probleme viel geringer sein sollten als in der Vergangenheit.

Ich denke, das ist in Ordnung für die Infrastruktur, aber ich möchte doch IDE verwenden ~~ Ich habe die Welt geleckt ~~ Als ich in einer vertrauten Umgebung gegoogelt wurde, Python-Tools für Visual Studio ist eine wunderbare Sache. ** Darüber hinaus können Sie problemlos vor Ort debuggen, indem Sie die Win-Version Python wie Anaconda aufrufen **. Weil es nur noch das gibt

  • Anaconda (Python 3.5.2 :: Anaconda 4.1.1 (64-bit) )
  • MongoDB for Win(MongoDB shell version: 3.2.10)
  • VisualStudio2013 + Python Tools For Visual Studio(Ver.2.2.2)
  • Tweepy + PyMongo (spätestens zum Zeitpunkt der Übernahme)

Beschlossen, mit der Konfiguration zu entwickeln und zu testen. Als Anliegen,

  1. Gibt es ein Problem bei der Ausführung in der Ausführungsumgebung? Gibt es einen Teil, der von der Umgebung abhängt?
  2. Ist es möglich, ausreichende Tests in der Entwicklungsumgebung durchzuführen? Wird es unvorhergesehene Probleme geben?
  3. Die Version rund um die Infrastruktur kann sich je nach Entwicklungsumgebung und Ausführungsumgebung ändern.

Herum, aber ... Nun, auf jeden Fall ist der eigentliche Maschinentest am Ende notwendig, und wenn Sie ihn nicht gut schreiben, tritt kein Problem auf, also lassen Sie ihn vorerst. (Wenn dies ein Job ist, muss ich ihn leider überall einpacken ...)

Programmanforderungen

Das Programm, das ich dieses Mal mache, enthält die Regel des Teufels, dass Sie, sobald Sie anfangen zu laufen, 3 Monate lang weitermachen können, was Sie wollen, und es stoppen können. Daher werden wir es implementieren, indem wir uns auf die wesentlichen Funktionen konzentrieren und auf andere Weise etwas anderes tun **.

Zu implementierende Funktionen mit höchster Priorität

  • Erhalte öffentlichen Stream von Twitter
  • Speicherung der empfangenen Daten in MongoDB
  • Möglichkeit, die Verbindung im Falle einer unerwarteten Trennung wiederherzustellen

Funktion, die als zweite Priorität implementiert werden soll

  • Eine Funktion zum Aufzeichnen, wenn ein Ereignis wie Verbindung, Trennung oder erneute Verbindung auftritt.
  • Zusätzlich zu den oben genannten Funktionen eine Funktion zum Benachrichtigen über das Auftreten eines Ereignisses mit Direct Message auf Twitter (elterlicher Kontaktwunsch)

Funktionen, die nach Möglichkeit implementiert werden müssen

  • Benachrichtigung über die tägliche Durchflussrate und die verbleibende Speicherkapazität.

Funktion, um zu prüfen, ob freie Kapazität vorhanden ist

  • Endet automatisch, wenn ein bestimmtes Datum und eine bestimmte Uhrzeit eintreffen

Funktionen, die nicht in den erforderlichen Spezifikationen enthalten sind

  • Blacklist-spezifische Funktion zur Abwehr von Konten (als Funktion innerhalb des Programms).
  • Verarbeitung von Tweet-Daten unter Annahme einer Echtzeitanalyse (als Funktion im Programm)

Nun, es sieht so aus. Beginnen wir mit den Elementen mit der höchsten Priorität und verbessern schrittweise den Grad der Perfektion.

Twitter-Empfangsprogramm vorerst

Mit dem Gelübde "** Ich habe O'Reillys Python-Tutorial " und " Ich google, wenn ich nicht verstehe **" begann ich vorerst mit der Erstellung eines Demonstrationsprogramms. Geben Sie unter Erstellen eines neuen Projekts in Visual Studio "Python-Anwendung" an, und Sie können Python-Code in Ihrem vertrauten Editor schreiben. Das ist praktisch. Nachdem Sie den Tutorial-Code eingegeben haben, führen Sie ihn mit [F5] aus. Sie können es mit dem gleichen Verfahren wie mit der C-Sprachkonsolen-App versuchen, sodass es wirklich keinen Stress gibt. Es tut mir leid, dass ich nicht treten kann.

Wenn Sie nicht zuerst mit Twitter sprechen können, kommt dies nicht in Frage. Beginnen wir also damit, diesen Bereich zu erstellen. Sie müssen zuerst Tweepy installieren. Wenn Sie der Meinung sind, dass Sie den Befehl "pip" in der Anaconda-Eingabeaufforderung eingeben können, kann dies auch in Visual Studio ausgeführt werden.

  1. Wählen Sie in der Menüleiste [Ansicht] -> [Andere Windows] -> [Python-Umgebungen], um sie anzuzeigen.
  2. Wählen Sie pip aus der mittleren Dropdown-Liste des Fensters Python Environments aus.
  3. Geben Sie "tweepy" in das Textfeld "PyPl und installierte Pakete durchsuchen" ein.
  4. Klicken Sie auf "" pip install tweepy "von PyPl". Dann ist die Installation abgeschlossen.

Es macht so viel Spaß wie NuGet.

Stream basierend auf einigen Seiten, die Google derzeit gefunden hat, und Tweepys Tutorial Schreiben Sie ein Programm, um Tweets mit API zu erhalten.

tweetCheck.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-

import tweepy
#Bereiten Sie die Variablen vor, die erforderlich sind, um die Twitter-API selbst auszuführen.
CK = ''   # Consumer Key
CS = ''   # Consumer Secret
AT = ''   # Access Token
AS = ''   # Accesss Token Secert

class Listener(tweepy.StreamListener):
    def on_status(self, status):
        print(status.text.encode('shift_jis', 'ignore'))
        return True

    def on_error(self, status_code):
        print('Ein Fehler ist aufgetreten: ' + str(status_code))
        return True

#Hauptverarbeitung von hier
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)     #Zugriffstoken erhalten

listener = Listener()                       #Listener-Klasseninstanz
stream = tweepy.Stream(auth, listener)      #Die Rezeption beginnt hier.

#Wählen Sie eine aus und kommentieren Sie sie aus.
#stream.filter(track=['#xxxxxx'])  #Nach angegebenem Suchwort filtern
stream.sample()                    #1 von allen Twitter-Tweets%abholen
#stream.userstream()               #Benutzereigene TL

…… Eh, 31 Zeilen (Leerzeilen, einschließlich Kommentare)? Was kann ich damit machen? ?? Beim Denken ausführen. Ausführungsergebnis Ich kann es nicht lesen (weil es UTF-8 ist), aber ich kann es empfangen. Mit Strg + C zwangsweise beenden.

Vorsichtsmaßnahmen

Es fühlt sich an, als würde es sich schnell bewegen, aber es ist tatsächlich an zwei Stellen verstopft.

  • Es wird nur eine Zeile angezeigt, die jedoch sofort zwangsweise beendet wurde.
    → Der Zeichencode der von Visual Studio erstellten Py-Datei lautete "Shift-JIS".
    Wählen Sie UTF-8 unter [Menü] → [Datei] → [Detaillierte Einstellungen für gespeicherte Datei] und speichern Sie.
  • Wenn Sie es ausführen, nachdem Sie das oben genannte Problem behoben haben, wird es für einen Moment angezeigt, aber es wird zwangsweise beendet. Das Timing ist zufällig.
    → Der Druck unter "def on_status (self, status):" war ursprünglich "print (status.text)", aber
    <a href = "http://lab.hde.co" .jp / 2008/08 / pythonunicodeencodeerror.html "> Ich habe gehört, dass ich beim Versuch, Zeichen anzuzeigen, die nicht an der Eingabeaufforderung angezeigt werden können, gestorben bin.
    Als ich versuchte, die Codierung zu konvertieren, wurde sie angezeigt, obwohl sie verstümmelt war.

Ersteres ist in Ordnung, wenn Sie es beim ersten Mal beheben. Letzteres ist in Ordnung, da es nicht angezeigt werden muss, wenn es sich immer bewegt. Wenn Python zum ersten Mal in wenigen Tagen in diesem Umfang verwaltet werden kann, kann es unerwartet rechtzeitig für Ende Oktober sein.

Nächstes Mal werde ich diese Sauce ausarbeiten. (Fortsetzen)

Recommended Posts

Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (3))
Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (1))
Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (2))
Experimentieren Sie, um Tweets für eine lange Zeit zu sammeln (Programmvorbereitung (5))
Experimentieren Sie, um Tweets für eine lange Zeit (unmittelbar vor der Ausführung) zu sammeln.
Experimentieren Sie, um Tweets über einen längeren Zeitraum zu sammeln (Aggregation und Bestätigung des Inhalts).
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
Eine Lernmethode für Anfänger zum Erlernen der Zeitreihenanalyse
Ich möchte vorerst eine Docker-Datei erstellen.
[Profil] Identifizieren Sie, wo das Programm lange dauert (google-perftool)
[Python] Es war sehr praktisch, die Python-Klasse für das ROS-Programm zu verwenden.
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Einführung in discord.py (1. Tag) -Preparation for discord.py-
Eine einfache Problemumgehung für Bots, um zu versuchen, Tweets mit demselben Inhalt zu veröffentlichen
Das Herunterfahren von CentOS 7 mit LVM-Konfiguration dauert lange.