Pepperが為替価格を伝えてくれるアプリを作ってみた. 

# 1. 導入

近頃, 人型ロボットPepperと様々なAPIとの連携により, 多種多様なアプリが開発されています. 今回は私個人の趣味であるFX取引と, Pepperを紐づけるアプリを作れないかと考えた結果, 作成されたアプリについてご紹介します。

# 2. 概要
本記事の流れとしては,
1. PythonSDKについて(Pepperアプリ開発に必要)
2. FX APIについて(為替情報のリアルタイム取得に必要)
3. ソースコードの公開


## 2.1 PythonSDKの使用

Pepperのアプリを開発する際には, ChoregrapheもしくはPythonSDKが必要になります. クラウドサービスとの連携や, 外部APIを使用する場合には, PythonSDKを用いた方が手軽にアプリが作れることが多いです。
PythonSDKについて詳しく知りたい方は、以下のページを参照してください。

https://qiita.com/kyohara/items/ae0dd0f57413caa90674 (PythonSDKの導入方法)
https://qiita.com/Atelier-Akihabara/items/3289e60985586b8da709 (Python SDKによるsay hello)
http://naoqi.memo.wiki/d/Python%20SDK (PythonSDKリファレンス)


## 2.2 FX APIの取得

FXのAPIを使用するためには, Oandaに登録する必要があります。
(デモ口座でも大丈夫です！)Oandaの登録方法, APIの使用方法については,下記の記事が非常に参考になります. 
http://www.algo-fx-blog.com/python-oanda-api-v1/
ただ, 上記の記事通りに実装しても, 一部動作しない部分ございますのでそちらは, 2.3節(ソースコードを載せるセクション)で記載します. (おそらくライブラリのバージョンが違うためです. )


## 3. ソースコードを書く

2.1節,2.2節の環境構築と登録が終えましたらあとはソースコードを書くだけです! ただここで問題が発生しました. FX_API(Oandapy)はPython2系で動きませんでした(こちらは私の環境だけかもしれないです. ). そこで, 今回はFX関連の処理はPython3で処理を行い, Pepperに関する処理はPython２系で処理したいと思います. 詳しくは下記の記事を参照してください。
https://www.pepper-atelier-akihabara.jp/archives/2272(PepperとPython3の連携) 
それでは, ソースコードを載せます. 

まずは, FXAPI周りのソースコードです. 

```python:FX_trade.py
import oandapy
import time
import json
import time
import subprocess

def main():
    # OANDA API アクセストークンと口座ID
    accountID = "your ID" 
    accesstoken = "your access token"
    pepperIP = "Pepper IP adress"
    oanda = oandapy.APIv20(environment="practice", access_token= accesstoken)
    #今回はドル円の情報を取得します. 
    instruments = "USD_JPY"
    count = 0
    total_list = []
    #初期値の設定
    before_bids_data = 100.0
    while(True):
        count = count + 1
        price_info =oanda.pricing.get_pricing(account_id = accountID, instruments = instruments)
        price_data = price_info.raw.json()
        current_time = price_data["time"]
        bids_data = price_data["prices"][0]["bids"][0]["price"]
        asks_data = price_data["prices"][0]["asks"][0]["price"]
        bids_diff =  float(bids_data) - before_bids_data 
        subprocess.Popen(['pythons','pepper.py', pepperIP, bids_data, str(bids_diff)])
        print(current_time)
        print("bids価格は{}です.".format(bids_data))
        print("asks価格は{}です.".format(asks_data))
        #5分に一回のペースで呟きます. 
        time.sleep(300)
        before_bids_data = float(bids_data) 

if __name__ == "__main__":
    main()
```

次に, Pepper周りのコードです. 

```python:Pepper.py
# -*- coding: utf-8 -*-
import sys
from naoqi import ALProxy
import time


def main():
	argv = sys.argv
	pepperID = argv[1]
	bids = float(argv[2])
	bids_diff = float(argv[3])
	coments = "ただいまのドル円の買い価格は{:.2f}円です".format(bids)
	print(coments)
	tts = ALProxy("ALTextToSpeech", pepperID, 9559)
	ani_tts = ALProxy("ALAnimatedSpeech", pepperID, 9559)
	tts.say("ただいまのドル円の買い価格は{:.2f}円です".format(bids))
	if bids_diff > 0.1:
		text_Param = "^start(Stand/Gestures/showsky_1) "+"上がってますねー"+ "^wait(Stand/Gestures/showsky_1)"
		ani_tts.post.say(text_Param)
		time.sleep(5)
		stand = ALProxy("ALRobotPosture",pepperID, 9559)
		stand.goToPosture("Stand", 0.8)
	elif bids_diff < -0.1:
		text_Param = "^start(Stand/Gestures/Angry_3) "+"下がってますねー"+ "^wait(Stand/Gestures/Angry_3)"
		ani_tts.post.say(text_Param)
		time.sleep(5)
		stand = ALProxy("ALRobotPosture",pepperID, 9559)
		stand.goToPosture("Stand", 0.8)
	else: 
		text_Param = "^start(Stand/Gestures/YouKnowWhat_4) "+"あまりかわらないですねー"+ "^wait(Stand/Gestures/YouKnowWhat_4)"
		ani_tts.post.say(text_Param)
		time.sleep(5)
		stand = ALProxy("ALRobotPosture",pepperID, 9559)
		stand.goToPosture("Stand", 0.8)

if __name__ == "__main__":
	main()

```
今回はPepperが5分ごとに価格情報を読み上げ, 5分前との価格から10pips以上上がった場合には, 天井を見上げる動作をし, 10pips以上下がった場合には手を下げるジェスチャーをする仕様にしました. 


# 3. まとめ

今回は, PepperとFXAPIを絡めたアプリを作成しました. 現在様々なAPI(例えばお天気APIなど)が公開されています。FXに限らず, APIとPepperを絡めたアプリを作成してみてはいかがでしょうか?