[PYTHON] Machen Sie eine Tweet-Box für Pepper

Bewegungen und Gespräche mit Pepper zu führen kann sehr interessant sein, aber ich möchte mich trotzdem mit sozialen Netzwerken verbinden.

Wenn Sie Python in [Python Box] schreiben (http://qiita.com/Atelier-Akihabara/items/f6a05ca14be786f9a94c), können Sie verschiedene Dinge tun, aber selbst wenn Sie sich die offizielle Dokumentation ansehen, gibt es keine Möglichkeit, eine externe Bibliothek zu importieren. ・ ・ ・ Wenn Sie denken WIE IMPORTIEREN SIE PYTHON-DATEIEN IN IHRE PFEFFER-APPS? Es gab, also werde ich es versuchen.

Erstellen einer Twitter-Tweet-Box

Lassen Sie uns zunächst eine Vorstellung davon bekommen, was Sie brauchen. Um Zugriff auf die Twitter-API mit Python zu lesen, scheinen die folgenden Elemente für den Zugriff auf Twitter erforderlich zu sein.

Ich frage mich auch, ob Folgendes als aus dem Skript importierte Bibliothek erforderlich ist.

Basierend auf diesen werden wir erwägen, die folgende Twitter-Tweet-Box zu realisieren.

tweet-design.png

Wie für die Spezifikationen der Tweet-Box,

  1. Input onStart ist ein Zeichenfolgentyp und empfängt die Inhaltsnachricht, die Sie twittern möchten
  2. Wenn die Eingabe in onStart eingegeben wird, wird die Tweet-Verarbeitung durchgeführt.
  3. Bei Erfolg wird onStopped ausgegeben. Kein Wert (Typ "van")
  4. Wenn dies fehlschlägt, wird onFailed ausgegeben. Der Statuscode (numerischer Wert) wird übergeben
  5. Der für den Zugriff auf die Twitter-API erforderliche Verbraucherschlüssel, das Verbrauchergeheimnis, das Zugriffstoken und das Zugriffstokengeheimnis werden durch Parameter angegeben
  6. Der Zugriff auf die Twitter-API wird in Python geschrieben und die importierte OAuth-Bibliothek als Projektdatei gespeichert.

Ich fühle mich so. Als Verfahren,

  1. Erstellen Sie eine Python-Box auf Choregraphe
  2. Bereiten Sie die Bibliothek für den Import aus dem Python-Skript vor
  3. Schreiben Sie ein Python-Skript

Ich werde es in der Reihenfolge versuchen.

Versuchen Sie zu machen

Eine Box erstellen

Erstellen Sie zunächst eine Kastenform auf Choregraphe.

  1. Klicken Sie mit der rechten Maustaste auf das Flussdiagramm und wählen Sie ** [Neue Box erstellen] - [Python ...] ** new-python-box.png

  2. Geben Sie ** Tweet in den Namen ** ein add-new-box.png

  3. Ändern Sie den OnStart-Eingabetyp in eine Zeichenfolge. Eingabe ** Klicken Sie auf Start [A] ** auf die Schaltfläche Einstellungen und dann auf die Dropdown-Liste ** Typ [B] ** edit-onstart-type-1.png

Daraufhin wird eine Liste der Typen angezeigt. ** Wählen Sie [Zeichenkette] ** und klicken Sie auf die Schaltfläche [OK]. edit-onstart-type-2.png

  1. Fügen Sie als Nächstes onFailed zur Ausgabe hinzu. Klicken Sie in der Ausgabe auf die Schaltfläche ** Hinzufügen [+] ** add-onfailed-1.png

Da der Einstellungsdialog genauso wie die Eingabe angezeigt wird, geben Sie ** onFailed in Name [A] ** ein und ändern Sie den Typ in ** [Nummer] [B] ** add-onfailed-2.png

  1. Fügen Sie Parameter hinzu. Klicken Sie auf die Schaltfläche ** Hinzufügen [+] für die Variable [A] **, geben Sie ** Consumer Key in Name [B] ** ein, ändern Sie Type in ** [Character String] [C] ** und klicken Sie dann auf [ Klicken Sie auf die Schaltfläche OK add-param-1.png

Wenn Sie die Taste [OK] drücken, können Sie sehen, dass der Verbraucherschlüssel zur Variablenliste hinzugefügt wurde. add-param-2.png

  1. Fügen Sie Consumer Secret, Access Token und Access Token Secret auf die gleiche Weise wie 5 hinzu. add-param-3.png

  2. Klicken Sie auf die Schaltfläche [OK], um ein ** Tweet-Feld ** im Flussdiagramm zu erstellen. new-tweet-box.png

Jetzt ist die Außenseite der Box fertig.

Bibliotheksvorbereitung

In das Tweet-Feld importieren wir die folgenden Bibliotheken für die OAuth-Authentifizierung.

Beim Betrachten der Anforderungen.txt dieser Bibliothek stellte ich fest, dass auch die folgenden Bibliotheken erforderlich sind, also auch diese Ich werde es aufnehmen.

Ich denke, ich sollte das Paketverwaltungstool richtig verwenden, aber zunächst möchte ich die oben genannten drei Bibliotheken verwenden, und ich werde versuchen, die Bibliotheksdateien wie folgt in das Projekt zu integrieren.

  1. Anfragen-oauthlib, Anfragen, [oauthlib](https: // github. Holen Sie sich Dateien aus 3 Repositories (com / idan / oauthlib) git-download-zip.png

Wählen Sie dieses Mal ** [ZIP herunterladen] ** und laden Sie die Dateien im Repository mit ZIP herunter.

  1. Erstellen Sie einen lib-Ordner in einem geeigneten Ordner, extrahieren Sie die drei heruntergeladenen ZIP-Dateien und fügen Sie sie in der folgenden Konfiguration zusammen.

    • lib
      • requests_oauthlib
        • __init__.py
        • ...
      • oauthlib
        • __init__.py
        • ...
      • requests
        • __init__.py
        • ...
  2. Klicken Sie im Bereich [Projektinhalt] auf die Schaltfläche ** Hinzufügen [+] und wählen Sie [Ordner importieren ...] ** import-folder.png

  3. Das Dialogfeld [Zu importierenden Ordner auswählen] wird geöffnet. Wählen Sie den in 2. erstellten Ordner lib aus und klicken Sie auf die Schaltfläche ** [Ordner auswählen] **. import-folder-dialog.png

  4. Das lib-Verzeichnis wird zur Dateiliste hinzugefügt. Erweitern Sie daher den Verzeichnisbaum und stellen Sie sicher, dass die Dateien importiert werden. imported-lib.png

Sie sollten nun in der Lage sein, die Python-Bibliothek als Projektdatei zu importieren (sollte). Schreiben Sie als nächstes als Python-Skript für die Tweet-Box Code, der diese Bibliotheken zum Twittern verwendet.

Python-Skripte schreiben

Doppelklicken Sie auf das Tweet-Feld, um den Skript-Editor zu öffnen und das folgende Skript einzufügen.

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        self.framemanager = ALProxy("ALFrameManager")
        self.folderName = None

    def onUnload(self):
        import sys
        if self.folderName and self.folderName in sys.path:
            sys.path.remove(self.folderName)
        self.folderName = None

    def onInput_onStart(self, p):
        import sys, os
        self.folderName = os.path.join(
                    self.framemanager.getBehaviorPath(self.behaviorId), "../lib")
        if self.folderName not in sys.path:
            sys.path.append(self.folderName)
        for moduleName in os.listdir(self.folderName):
            #Modul neu laden
            if moduleName in sys.modules:
                self.logger.info("Loaded: %s, %s" % (moduleName, sys.modules[moduleName].__file__))
                reload(sys.modules[moduleName])
        from requests_oauthlib import OAuth1Session
        self.logger.info("Tweeten... %s" % p)

        url = "https://api.twitter.com/1.1/statuses/update.json"

        #Tweet Körper
        params = {"status": p}

        twitter = OAuth1Session(self.getParameter("Consumer Key"),
                        self.getParameter("Consumer Secret"),
                        self.getParameter("Access Token"),
                        self.getParameter("Access Token Secret"))
        req = twitter.post(url, params = params)

        if req.status_code == 200:
            self.logger.info("OK")
            self.onStopped()
        else:
            self.logger.warn("Failed: %d" % req.status_code)
            self.onFailed(req.status_code)

    def onInput_onStop(self):
        self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
        self.onStopped() #activate the output of the box

Der Punkt des Codes ist ...

  1. Rufen Sie zunächst bei onLoad einen Verweis auf ALFrameManager (der für die Pfadauflösung von Dateien im Projekt verwendet wird) ab und initialisieren Sie Variablen.

    def onLoad(self):
        self.framemanager = ALProxy("ALFrameManager")
        self.folderName = None
    
  2. Die von sys.path zu [Projektinhalt] hinzugefügte Python-Bibliothek kann zu Beginn der onStart-Verarbeitung importiert werden.

    def onInput_onStart(self, p):
        import sys, os
        self.folderName = os.path.join(
                    self.framemanager.getBehaviorPath(self.behaviorId), "../lib")
        if self.folderName not in sys.path:
            sys.path.append(self.folderName)
    
  3. Laden Sie die Python-Bibliothek in das Projekt und verarbeiten Sie sie

       from requests_oauthlib import OAuth1Session
       self.logger.info("Tweeten... %s" % p)
       ...
    
  4. Rufen Sie nach Abschluss des Vorgangs die Ausgabe mit dem Rückgabewert des Twitter-API-Aufrufs auf.

       ...
       if req.status_code == 200:
           self.logger.info("OK")
           self.onStopped()
       else:
           self.logger.warn("Failed: %d" % req.status_code)
           self.onFailed(req.status_code)
    
  5. Der Pfad zur Python-Bibliothek des Projekts wurde beim Entladen aus sys.path entfernt

    def onUnload(self):
       import sys
       if self.folderName and self.folderName in sys.path:
           sys.path.remove(self.folderName)
       self.folderName = None
    

Fühle mich wie. Persönlich fühlt sich das Umschreiben des sys.path ein bisschen brutal an ... (Wenn Sie dies für jede Anwendung tun, ist es wahrscheinlich ein Konflikt) Ich hoffe, dass pip in Zukunft gut integriert wird.

Funktionsprüfung

Erstellen Sie die folgende Anwendung, um die erstellte Tweet-Box auszuprobieren.

  1. Platzieren Sie Datenbearbeitung> Textbearbeitung in der Standardboxbibliothek test-box-1.png

  2. Schließen Sie die Boxen wie folgt an test-box-2.png

  3. Setzen Sie den Parameter Tweet-Box auf ** Consumer Key, Consumer Secret, Access Token, Access Token Secret ** von Twitter. test-box-3.png

  4. Geben Sie den Inhalt, den Sie twittern möchten, in das Feld Textbearbeitung ein test-box-4.png

Sie haben jetzt einen Flow erstellt, um eine Nachricht zu twittern. Es funktionierte auf einem realen Pepper oder einem virtuellen Roboter (nur Mac). Kann vom virtuellen Windows-Roboter nicht ausgeführt werden. Es scheint, dass das SSL-Modul nicht gültig ist ...

Sie können Pepper so twittern lassen. Ich dachte, wenn ich ein Foto von der Kamera machen und es twittern könnte, wäre Pepper in der Lage, die Live-Hackason-Arbeit zu erledigen. Ich werde weiter schreiben, wenn ich Material habe.

Recommended Posts

Machen Sie eine Tweet-Box für Pepper
Qt für Python App Desktop App
ROS-Kurs 107 Machen Sie einen Kunden für Rosblidge
Erstellen Sie ein Schachbrettmuster für die Kamerakalibrierung
Lassen Sie uns ein Backend-Plug-In für Errbot erstellen
Machen Sie für VB6.
Erstellen Sie einen Bot für Skype unter EC2 (CentOS)
Machen Sie vorerst ein Histogramm (matplotlib)
Grundlegendes zur Python for Pepper-Entwicklung. -Python Box selbst erstellte Funktions Edition-
Lassen Sie uns mit SWIG ein Modul für Python erstellen
Grundlegendes zur Python for Pepper-Entwicklung. -Einführung in Python Box-
Lass uns ein Squashspiel machen
Machen Sie einen Funktionsdekorateur
Erstellen Sie eine Distanzmatrix
[Zum Spielen] Versuche Yuma zu einem LINE Bot zu machen (Python)
Ich mache ein Passwort!
Machen Sie einen Nyan-Knopf
Mach ein Spiel im Tetris-Stil!
Erstellen Sie einen Base64-Decoder
Erstellen Sie eine IP-Adresszuweisung / Zuweisungsliste für einen bestimmten Bereich
Ich habe eine Schachtel gemacht, um mich auszuruhen, bevor Pepper müde wird
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
Wie erstelle ich ein Python-Paket (geschrieben für Praktikanten)
Machen wir einen Discord Bot.
Erstellen Sie ein Blueqat-Backend ~ Teil 1
[Statistik für Programmierer] Box Whisker
Erstellen Sie eine MQTT Publisher-Box
Erstellen Sie ein Blueqat-Backend ~ Teil 2
[Django] Erstellen Sie ein Pulldown-Menü
Machen Sie einen LINE BOT (Chat)
Pfeffer-Tutorial (5): Verwenden eines Tablets
Erstellen Sie ein Lesezeichen in Python
Machen Sie eine Lotterie mit Python
Machen Sie Responder zu einem Daemon (Dienst)
Überlegungen zum Test der Pepper-Box-Bibliothek
Befehl für FizzBuzz erstellt
Machen Sie ein Feuer mit kdeplot
Erstellen Sie eine MQTT-Abonnentenbox
Erstellen Sie einen Berechnungsbohrdruck
PyPI-Registrierungsverfahren für diejenigen, die ihr PyPI-Debüt geben möchten
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 1 erstellen
Erstellen Sie einen Regenbenachrichtigungs-Bot für Hangouts Chat mit explosiver Geschwindigkeit
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 2 erstellen
Spigot (Papier) Einführung in die Erstellung eines Plug-Ins für 2020 # 01 (Umgebungskonstruktion)
So führen Sie einen Komponententest durch Teil 1 Entwurfsmuster zur Einführung
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 3 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 4 erstellen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen