[PYTHON] Créer une boîte à Tweet pour Pepper

Faire des mouvements et faire des conversations avec Pepper peut être très intéressant, mais cela me donne toujours envie de me connecter aux réseaux sociaux.

Si vous écrivez Python dans Python Box, vous pouvez faire différentes choses, mais même si vous regardez la documentation officielle, il n'y a aucun moyen d'importer une bibliothèque externe. ・ ・ ・ Si vous pensez COMMENT IMPORTER DES FICHIERS PYTHON DANS VOS APPLICATIONS PEPPER? Il y en avait, alors je vais l'essayer.

Créer une zone Tweet Twitter

Tout d'abord, voyons ce dont vous avez besoin. Pour lire Accéder à l'API Twitter avec Python, il semble que les éléments suivants soient nécessaires pour accéder à Twitter.

De plus, je me demande si ce qui suit est requis en tant que bibliothèque importée du script.

Sur cette base, nous envisagerons de réaliser la boîte Twitter Tweet suivante.

tweet-design.png

Quant aux spécifications de la boîte Tweet,

  1. Input onStart est un type de chaîne de caractères et reçoit le message de contenu que vous souhaitez tweeter
  2. Lorsque l'entrée est entrée dans onStart, le traitement du tweet est effectué.
  3. En cas de succès, onStopped est émis. Aucune valeur (type "van")
  4. En cas d'échec, onFailed est affiché. Le code d'état (valeur numérique) est passé
  5. La clé du consommateur, le secret du consommateur, le jeton d'accès, le secret du jeton d'accès requis pour accéder à l'API Twitter sont donnés par des paramètres
  6. L'accès à l'API Twitter est écrit en Python et la bibliothèque OAuth importée est enregistrée en tant que fichier de projet.

Se sentir comme ça. En tant que procédure,

1.Faire une boîte Python sur Choregraphe 2. Préparez la bibliothèque à importer à partir du script Python 3. Ecrire un script Python

Je vais essayer dans l'ordre de.

Essayer de faire

Créer une boîte

Commencez par créer une forme de boîte sur Choregraphe.

  1. Cliquez avec le bouton droit de la souris sur le diagramme et sélectionnez ** [Créer une nouvelle boîte] - [Python ...] ** new-python-box.png

  2. Entrez ** Tweet dans le nom ** add-new-box.png

  3. Modifiez le type d'entrée onStart en une chaîne. Entrez ** Cliquez sur le bouton Paramètres sur Démarrer [A] **, puis cliquez sur la liste déroulante ** Type [B] ** edit-onstart-type-1.png

Ensuite, une liste de types apparaîtra. ** Sélectionnez [Chaîne de caractères] ** et cliquez sur le bouton [OK]. edit-onstart-type-2.png

  1. Ensuite, ajoutez onFailed à la sortie. Cliquez sur le bouton ** Ajouter [+] dans la sortie ** add-onfailed-1.png

Étant donné que la boîte de dialogue de configuration apparaît de la même manière que l'entrée, entrez ** onEchec dans le nom [A] ** et remplacez le Type par ** [nombre] [B] ** add-onfailed-2.png

  1. Ajoutez des paramètres. Cliquez sur le bouton ** Ajouter [+] pour la variable [A] **, entrez ** Clé consommateur dans le nom [B] **, remplacez le Type par ** [Chaîne de caractères] [C] **, puis cliquez sur [ Cliquez sur le bouton OK add-param-1.png

Lorsque vous appuyez sur le bouton [OK], vous pouvez voir que la clé consommateur a été ajoutée à la liste des variables. add-param-2.png

  1. Ajoutez Consumer Secret, Access Token, Access Token Secret de la même manière que 5. add-param-3.png

  2. Cliquez sur le bouton [OK] pour créer une ** zone Tweet ** dans le diagramme de flux. new-tweet-box.png

Maintenant, l'extérieur de la boîte est prêt.

Préparation de la bibliothèque

Dans la zone Tweet, nous importerons les bibliothèques suivantes pour l'authentification OAuth.

En regardant les requirements.txt de cette bibliothèque, j'ai trouvé que les bibliothèques suivantes sont également nécessaires, donc celles-ci aussi Je vais l'inclure.

J'ai pensé que je devrais utiliser correctement l'outil de gestion des packages, mais tout d'abord, j'ai envie d'utiliser les trois bibliothèques ci-dessus, et j'essaierai d'incorporer les fichiers de bibliothèque dans le projet en suivant les étapes ci-dessous.

  1. requests-oauthlib, requests, [oauthlib](https: // github. Récupérez les fichiers de 3 référentiels (com / idan / oauthlib) git-download-zip.png

Cette fois, sélectionnez ** [Télécharger ZIP] ** et téléchargez les fichiers dans le référentiel avec ZIP.

  1. Créez un dossier lib dans un dossier approprié, extrayez les trois fichiers ZIP téléchargés et rassemblez-les dans la configuration suivante.

    • lib
      • requests_oauthlib
        • __init__.py
        • ...
      • oauthlib
        • __init__.py
        • ...
      • requests
        • __init__.py
        • ...
  2. Cliquez sur le bouton ** Ajouter [+] dans le panneau [Contenu du projet] et sélectionnez [Importer le dossier ...] ** import-folder.png

  3. La boîte de dialogue [Sélectionner le dossier à importer] s'ouvre. Sélectionnez le dossier lib créé en 2. et cliquez sur le bouton ** [Sélectionner le dossier] **. import-folder-dialog.png

  4. Le répertoire lib sera ajouté à la liste des fichiers, développez donc l'arborescence des répertoires et assurez-vous que les fichiers sont importés. imported-lib.png

Vous devriez maintenant pouvoir importer la bibliothèque Python en tant que fichier de projet (devrait). Ensuite, en tant que script Python pour la boîte Tweet, écrivez du code qui utilise ces bibliothèques pour tweeter.

Ecrire des scripts Python

Double-cliquez sur la zone Tweet pour ouvrir l'éditeur de script et collez le script suivant.

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):
            #Recharge du module
            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("Tweet... %s" % p)

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

        #Corps du Tweet
        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

Le point du code est ...

  1. Premièrement, obtenez une référence à ALFrameManager (utilisé pour la résolution de chemin des fichiers dans le projet) à onLoad et initialisez les variables.

    def onLoad(self):
        self.framemanager = ALProxy("ALFrameManager")
        self.folderName = None
    
  2. La bibliothèque Python ajoutée à [Contenu du projet] par sys.path peut être importée au début du traitement onStart.

    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. Chargez la bibliothèque Python dans le projet et traitez-la

       from requests_oauthlib import OAuth1Session
       self.logger.info("Tweet... %s" % p)
       ...
    
  4. Une fois le processus terminé, appelez la sortie par la valeur de retour de l'appel API Twitter.

       ...
       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. Suppression du chemin lié à la bibliothèque Python du projet de sys.path lors du déchargement

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

Se sentir comme. Personnellement, réécrire le sys.path ressent un peu de force brute ... (Si vous faites cela pour chaque application, il y aura probablement un conflit) J'espère que pip sera bien intégré à l'avenir.

Contrôle de fonctionnement

Pour essayer la boîte Tweet créée, créez l'application suivante.

  1. Placez Data Edit> Text Edit dans la bibliothèque de boîtes standard test-box-1.png

  2. Connectez les boîtes comme suit test-box-2.png

  3. Définissez le paramètre de la zone Tweet sur ** Clé du consommateur, Secret du consommateur, Jeton d'accès, Secret du jeton d'accès ** obtenu de Twitter. test-box-3.png

  4. Entrez le contenu que vous souhaitez tweeter dans la zone d'édition de texte test-box-4.png

Vous avez maintenant créé un flux pour tweeter n'importe quel message. Cela a fonctionné sur un vrai Pepper ou un robot virtuel (Mac uniquement). Ne peut pas être exécuté par le robot virtuel Windows. Il semble que le module ssl n'est pas valide ...

Vous pouvez laisser Pepper tweeter comme ça. Je pensais que si je pouvais prendre une photo de la caméra et la tweeter, Pepper serait capable de gérer le travail de hackason en direct. Je continuerai à écrire si j'ai du matériel.

Recommended Posts

Créer une boîte à Tweet pour Pepper
Qt pour l'application de bureau de l'application Python
Cours ROS 107 Créer un client pour rosblidge
Créez un modèle d'échiquier pour l'étalonnage de la caméra
Faisons un plug-in backend pour Errbot
Faites pour VB6.
Créer un bot pour Skype sur EC2 (CentOS)
Faire un histogramme pour le moment (matplotlib)
Comprendre le développement de Python pour Pepper. -Édition de fonction auto-fabriquée par Python box-
Faisons un module pour Python en utilisant SWIG
Comprendre le développement de Python pour Pepper. -Introduction à Python Box-
Faisons un jeu de squash
Faire un décorateur de fonction
Faire une matrice de distance
[Pour jouer] Essayez de faire de Yuma un robot LINE (Python)
Je vais créer un mot de passe!
Créer un bouton Nyan
Créez un jeu à la Tetris!
Créer un décodeur Base64
Faire une liste d'allocation / allocation d'adresses IP pour une certaine zone
J'ai fait une boîte pour me reposer avant que Pepper ne se fatigue
Expérimentez pour créer un PDF indépendant pour Kindle avec Python
Comment créer un package Python (écrit pour un stagiaire)
Faisons un robot Discord.
Créer un backend Blueqat ~ Partie 1
[Statistiques pour les programmeurs] Box whiskers
Créer une boîte de publication MQTT
Créer un backend Blueqat ~ Partie 2
[Django] Créer un menu déroulant
Créer un LINE BOT (chat)
Tutoriel Pepper (5): Utilisation d'une tablette
Créer un bookmarklet en Python
Faites une loterie avec Python
Faire de Responder un démon (service)
Prise en compte du test de la bibliothèque Pepper Box
Fait une commande pour FizzBuzz
Faire un feu avec kdeplot
Créer une boîte d'abonné MQTT
Faire une impression de forage de calcul
Procédure d'inscription PyPI pour ceux qui veulent faire leurs débuts PyPI
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 1
Créez un robot de notification de pluie pour Hangouts Chat à une vitesse explosive
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 2
Spigot (Paper) Introduction à la création d'un plug-in pour 2020 # 01 (Construction de l'environnement)
Comment faire un test unitaire Part.1 Modèle de conception pour l'introduction
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 3
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 4
J'ai essayé de faire une étrange citation pour Jojo avec LSTM