日々ブログ

当サイトは、アフィリエイトプログラムにより商品をご紹介しています

【プログラミングのお話】GMO FXで為替価格を取得する(python)

最近知ったのですが、GMOがFXの価格取得APIを公開していたので早速使ってみました。

OWANDA JAPANがAPIでは先行

余談になりますが、今まではOWANDA 証券というアメリカのFX会社がAPIを公開してたんですが、月間で10万円くらい取引していないと使えなかったりと制限があったんですよね。 なので、口座開設してから使えるようになるまで数ヶ月かかったりと正直使い勝手が悪い。 GMOは公開してすぐに使えるので、かなり便利です。

早速価格を取得してみる

公式ドキュメントにかかれている通りですが、requestsのモジュールでURLにGETリクエストを送信するだけです。

import requests
import json

endPoint = 'https://forex-api.coin.z.com/public'
path     = '/v1/ticker'

response = requests.get(endPoint + path)
print(json.dumps(response.json(), indent=2))

実行すると、取引できる通貨の価格がjson形式で返ってきます。
これ以上無いというくらい扱いやすいAPIですね。
python だけでなく、javascriptHaskellまで取得方法が公開されているので、お好きな言語で自由に注文アプリが作れそうです。

ドルについて保存してみる

これだけだと物足りないので、1分ごとに保存してみます。
取得した保存結果は日かつ1時間ごとにフォルダ分けします。
記事を書いときながらなんですが、サーバーは共有物なのでむやみに負荷をかけるようなAPIの使い方はせず、マナーよくご使用ください。

時刻ごとに保存フォルダを作成するので、フォルダ名は下のような感じ。

import datetime

# 現在時刻を取得
target_time=datetime.datetime.now()

# 現在時刻から保存フォルダ名を作成            target_folder="./static/currency/"+target_time.strftime("%Y")+"/"+target_time.strftime("%m")+"/"+target_time.strftime("%d")+"/"+target_time.strftime("%H")

target_path=str(target_time.strftime('%Y%m%d%H%M%S'))+'.json'

上のフォルダがない場合は作成したいので、osモジュールでフォルダ作成

if not os.path.exists(target_folder):
                os.makedirs(target_folder)

あとは、60秒ごとに紹介したAPIを実行する処理と組み合わせるだけです。
完成形はこんな感じです。

import requests
import json

import time
import datetime
import os

if __name__=="__main__":
    endPoint = 'https://forex-api.coin.z.com/public'
    path     = '/v1/ticker'
    while(True):
        try:
            target_time=datetime.datetime.now()
            target_folder="./static/currency/"+target_time.strftime("%Y")+"/"+target_time.strftime("%m")+"/"+target_time.strftime("%d")+"/"+target_time.strftime("%H")
            if not os.path.exists(target_folder):
                os.makedirs(target_folder)
            target_path=str(target_time.strftime('%Y%m%d%H%M%S'))+'.json'
            response = requests.get(endPoint + path)
            with open(target_folder+"/"+target_path, 'w') as f:
                json.dump(response.json(),f, indent=2)
        except Exception as e:
            print(e)
    
        time.sleep(60)

基本的には標準モジュールしか使用していないので、上のコードをコピーして使えば問題ないかと。
Linux とかだとdaemon 化すれば何かエラーが起きても放っておけるようになります。