1. 導入
近頃, 人型ロボットPepperと様々なAPIとの連携により, 多種多様なアプリが開発されています. 今回は私個人の趣味であるFX取引と, Pepperを紐づけるアプリを作れないかと考えた結果, 作成されたアプリについてご紹介します。
2. 概要
本記事の流れとしては,
- PythonSDKについて(Pepperアプリ開発に必要)
- FX APIについて(為替情報のリアルタイム取得に必要)
- ソースコードの公開
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周りのソースコードです.
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周りのコードです.
# -*- 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を絡めたアプリを作成してみてはいかがでしょうか?