こんばんわn0bisukeです。
pepper開発でハマったところとかをメモしていってます。(前回 => PepperのPythonで自作Box作成をしていくメモ)
pythonはrequestモジュールが素晴らしいですね。 http通信するときは積極的に使いたい...ただ、pepperだとpipが使えないので以下の手順でやりましょうって話です。
ちなみに写真は最近うちのチームにジョインしてくれた@ukk0です。記事内容とは関係ありません笑
PepperのHTTP通信にRequestsを使うを参考にしてます。
requestモジュール
httpリクエストをいい感じにしてくれるモジュールです。
urllib2
ってあるんですけど、比較にならないくらい簡単です。
- インストール
$ pip install requests
- サンプル
import requests
r = requests.get('http://qiita.com/n0bisuke/items/d07b5485f4e767bc6e20.json')
print r.json()["title"]
Qiitaの投稿の情報を取得します。
http://qiita.com/n0bisuke/items/d07b5485f4e767bc6e20.json
- 実行
$ python app.py
pepperのpythonでHTTP GETしてJSONパースするサンプル
2行でかけちゃいます。簡単ですね。
pepperで使う
pepperではpipは使えなく、ディレクトリごとぶちこむのが一般的らしいですorz
githubのページからzipでダウンロードしてきて中身のrequestsフォルダ
をchoregraphe側にぶちこみます。
↓
libフォルダ
を作成してその中にrequestsフォルダ
を入れましょう。
あとは前回記事のようにPython Script
を編集します。
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):
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)
def onInput_onStop(self):
self.onUnload()
self.onStopped()
self.framemanager.getBehaviorPath(self.behaviorId), "../lib"
などはさっき作ったlibフォルダ
へのパス指定をしている感じです。
python詳しくないのでこれ以上は言及しません。
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):
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)
import requests
r = requests.get('http://qiita.com/n0bisuke/items/d07b5485f4e767bc6e20.json') #←追記
title = r.json()["title"].encode("utf-8") #←追記
self.logger.info(title) #←追記
def onInput_onStop(self):
self.onUnload()
self.onStopped()
これでやっとimport requests
できます。
あとは最初に書いたpythonコードと同じ感じですね。
実行してコレグラフのダイアログに以下のようにパースされた文字列が表示されれば成功です。
pepperのpythonでHTTP GETしてJSONパースするサンプル