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


こんばんわ[n0bisuke](http://twitter.com/n0bisuke)です。 
pepper開発でハマったところとかをメモしていってます。(前回 => [PepperのPythonで自作Box作成をしていくメモ](http://qiita.com/n0bisuke/items/12b839611473eae82f76))

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

ちなみに写真は最近うちのチームにジョインしてくれた@ukk0です。記事内容とは関係ありません笑
![](https://i.gyazo.com/64f1124a6332f1a14f54ba61099a42eb.png)

[PepperのHTTP通信にRequestsを使う](http://qiita.com/bugcloud/items/6631b2a534446393e214)を参考にしてます。

## requestモジュール

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

* インストール

```bash
$ 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

* 実行

```bash
$ python app.py
pepperのpythonでHTTP GETしてJSONパースするサンプル
```

2行でかけちゃいます。簡単ですね。

## pepperで使う

pepperではpipは使えなく、ディレクトリごとぶちこむのが一般的らしいですorz

[githubのページ](https://github.com/kennethreitz/requests)からzipでダウンロードしてきて中身の`requestsフォルダ`をchoregraphe側にぶちこみます。

![](https://i.gyazo.com/b542cd0a000bdbf8a3ff2b43d050bd6f.png)

↓

`libフォルダ`を作成してその中に`requestsフォルダ`を入れましょう。
![](https://i.gyazo.com/890238d6b7b61c078a3eddaacae25e52.png)


あとは[前回記事](http://qiita.com/n0bisuke/items/12b839611473eae82f76)のように`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パースするサンプル
```