14
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pepperに外部モジュール追加してみる。とりあえずrequestsで。

Last updated at Posted at 2016-03-08

こんばんわn0bisukeです。
pepper開発でハマったところとかをメモしていってます。(前回 => PepperのPythonで自作Box作成をしていくメモ)

pythonはrequestモジュールが素晴らしいですね。 http通信するときは積極的に使いたい...ただ、pepperだとpipが使えないので以下の手順でやりましょうって話です。

ちなみに写真は最近うちのチームにジョインしてくれた@ukk0です。記事内容とは関係ありません笑

PepperのHTTP通信にRequestsを使うを参考にしてます。

requestモジュール

httpリクエストをいい感じにしてくれるモジュールです。
urllib2ってあるんですけど、比較にならないくらい簡単です。

  • インストール
$ pip install requests
  • サンプル
app.py
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を編集します。

app.py
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詳しくないのでこれ以上は言及しません。

app.py
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パースするサンプル
14
17
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?