ストックドッグ

KatoTakahiro。金融系の会社で働くSEが株やPython、その他諸々について書いています。サービスも運営してます→http://fmbrain.work

bitFlyerのAPIをPythonで使ってみた

bitFlyerのAPIを使ってみた

すごく丁寧なドキュメントなので、本当にわかりやすいです。

こちらがAPIの公式ドキュメント。

https://lightning.bitflyer.jp/docs?lang=ja&_ga=2.266574860.321189620.1504178349-1321023365.1503200033


bitFlyerのAPIが使えるpythonライブラリもあるのですが、勉強もかねて一度は自分でやってみようという感じです。

簡単なAPIの使い方説明

基本的には、curlでリクエストを送ったら、レスポンスに情報が入っています。

マーケット情報が欲しければ...

$ curl https://api.bitflyer.jp/v1/getmarkets

[{"product_code":"BTC_JPY"},{"product_code":"FX_BTC_JPY"},{"product_code":"ETH_BTC"},{"product_code":"BCH_BTC"},{"product_code":"BTCJPY01SEP2017","alias":"BTCJPY_MAT1WK"},{"product_code":"BTCJPY08SEP2017","alias":"BTCJPY_MAT2WK"}]

けっこうたくさんの種類の仮想コイン扱ってるんですね〜

ちなみに、返り値はjson形式なので、jsonファイルに保存したい場合はリダイレクトしてあげる感じ。

curl https://api.bitflyer.jp/v1/getmarkets > getmarkets.json


エンドポイントURLがhttps://api.bitflyer.jp/v1/これなので、こいつのお尻に欲しい情報の種類をくっつけます。

マーケット情報が欲しいなぁって思ったら、getmarkets

板情報が欲しいなぁって思ったら、getboard

みたいな感じです。

https://api.bitflyer.jp/v1/

#マーケット情報
https://api.bitflyer.jp/v1/getmarkets

#板情報
https://api.bitflyer.jp/v1/getboard

と、こんな感じですが、毎回、curlするのも面倒なので、Pythonで書いてしまいましょう。

Pythonプログラム

汚いプログラムですみません笑

初心者でも読みやすいようなプログラムにしています。

チャームポイントはエンドポイントURLの場所です(なんで関数の外にいるんですかね)


リストじゃなくて辞書型のほうがいいやろ、とかは自分でも思うのでまた今後直します...

import urllib.request
import json


#エンドポイントURL
endpoint = "https://api.bitflyer.jp/v1/"


#APIを呼んでくる関数
def call_api(what, which):

	print("----------" + what + "----------")

	#GETパラメータで付与したい情報を辞書形式で持つ
	data = {}
	data["product_code"] = which
	# data["count"] = 
	# data["before"] =
	# data["after"] =  

	#URLとして送れる形に変換(エンコード)
	url_values = urllib.parse.urlencode(data)

	#リクエストを送っている
	req = urllib.request.Request(endpoint + what + "?" + url_values)
	with urllib.request.urlopen(req) as res:

		#レスポンスを読める形にする
		response = res.read().decode("utf-8")


	#jsonファイルを保存します
	saveFile(what, response)

	return response


def saveFile(what, response):
	f = open(what + ".json", "w")
	f.write(response)
	f.close()


#APIで呼べる情報をリスト形式に
api_list = ["getmarkets", "getboard", "getticker", "getexecutions", "gethealth",
			"getchats"]

#GETパラメータに付与する情報をリスト形式に
product_code = ["BTC_JPY", "ETH_BTC"]


response = call_api(api_list[1], product_code[0])
print(response)

プログラムとしては、APIで受け取った情報をjsonファイルに保存しています。

何かに使うときは保存したファイルを読み込む形がいいと思います。

まとめ

bitFlyerのAPIは、この中からさらに種類が2つに別れます。

HTTP Public APIとHTTP Private APIの2つです。

これらの2つの違いは取得してくる情報です。


HTTP Private APIはアカウントがないと取得できない情報をもってきます。

資産残高や他にも注文を出したりとかです。


今回使ったのは、HTTP Public APIです。

次は、HTTP Private APIの方を使ってみようと思います。


と、こんな感じでした。

以上終わり!