Python
FX
Pepper
PepperDay 23

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に関する処理はPython2系で処理したいと思います. 詳しくは下記の記事を参照してください。

https://www.pepper-atelier-akihabara.jp/archives/2272(PepperとPython3の連携)

それでは, ソースコードを載せます.

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


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周りのコードです.


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を絡めたアプリを作成してみてはいかがでしょうか?