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.
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.
Quant aux spécifications de la boîte Tweet,
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.
Commencez par créer une forme de boîte sur Choregraphe.
Cliquez avec le bouton droit de la souris sur le diagramme et sélectionnez ** [Créer une nouvelle boîte] - [Python ...] **
Entrez ** Tweet dans le nom **
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] **
Ensuite, une liste de types apparaîtra. ** Sélectionnez [Chaîne de caractères] ** et cliquez sur le bouton [OK].
É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] **
Lorsque vous appuyez sur le bouton [OK], vous pouvez voir que la clé consommateur a été ajoutée à la liste des variables.
Ajoutez Consumer Secret, Access Token, Access Token Secret de la même manière que 5.
Cliquez sur le bouton [OK] pour créer une ** zone Tweet ** dans le diagramme de flux.
Maintenant, l'extérieur de la boîte est prêt.
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.
Cette fois, sélectionnez ** [Télécharger ZIP] ** et téléchargez les fichiers dans le référentiel avec ZIP.
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
Cliquez sur le bouton ** Ajouter [+] dans le panneau [Contenu du projet] et sélectionnez [Importer le dossier ...] **
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] **.
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.
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.
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 ...
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
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)
Chargez la bibliothèque Python dans le projet et traitez-la
from requests_oauthlib import OAuth1Session
self.logger.info("Tweet... %s" % p)
...
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)
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.
Pour essayer la boîte Tweet créée, créez l'application suivante.
Placez Data Edit> Text Edit dans la bibliothèque de boîtes standard
Connectez les boîtes comme suit
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.
Entrez le contenu que vous souhaitez tweeter dans la zone d'édition de texte
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