こんにちは、はやたす(@hayatasuuu )です。
第5回目の本記事では、ビットコインの全取引履歴を取得したいと思います。
前回の記事 : #4 Python×ビットコイン自動売買 | Coincheck APIを使って最新価格を取得しよう!
今回使うAPIもCoincheckの口座を持っている必要はありません。
このまま今回の内容に進みましょう。
※もしビットコインの売買までおこなうなら、口座開設が必要になります。(第7回目以降)本人確認が遅れているようなので、早めに口座解説しておくと、滞りなく学習を進められますよ!
公式ページ : 仮想通貨取引所・販売所の口座開設|Coincheck(コインチェック)
Coincheck APIを使って全取引履歴を取得しよう!
今回は前に書いた以下のコードを編集してプログラムを作成します。
import requests
BASE_URL = 'https://coincheck.com'
url = BASE_URL + '/api/ticker'
r = requests.get(url)
r = r.json()
print('最新価格:', r['last'])
STEP① : URLの変更
各APIで取得できるデータは基本的に1種類です。
前回ビットコインの最新価格を取得したときは、/api/ticker
にアクセスしました。
では「取引履歴」を取得するにはどうすれば良いのかというと、/api/trades
にアクセスする必要があります。
というわけで、以前作成したコードを以下のように書き換えましょう。
import requests
BASE_URL = 'https://coincheck.com'
url = BASE_URL + '/api/trades' # 変更点
r = requests.get(url)
r = r.json()
print('最新価格:', r['last'])
STEP② : 出力部分の変更とプログラムの実行
取引履歴のリクエスト結果はlast
というKeyを持っていない可能性があります。
そこでprint()
での出力は、変数r
に変更しておきましょう。
import requests
BASE_URL = 'https://coincheck.com'
url = BASE_URL + '/api/trades'
r = requests.get(url)
r = r.json()
print(r)
これでプログラムを実行してみます。ターミナルでpython main.py
を入力してエンターキーをおしましょう。
そうすると以下のような画面になると思います。
出力部分だけ取り出したのが以下です。
{'success': False, 'error': 'invalid pair'}
どうやらエラーになってしまったようです。
「ああ、エラーになってしまったよ…」と凹む前に、まずはエラー文を読んでみましょう。
出力を読み解くと「”pair”が無効だ」と言われています。
ということは、URLを変更しただけでは取引履歴は取得できなくて、”pair”を指定する必要があるんですね。
仮想通貨で”pair”と聞けば想像できるかもしれませんが、これは通貨ペアのことを言っています。たとえば”BTC/JPY”や”XRP/JPY”のことですね。
STEP③ : 通貨ペアの指定
というわけで、通貨ペアを指定してAPIにアクセスしましょう。
「どのように通貨ペアを指定すれば良いのか」ですが、それは公式ドキュメントを確認すると”PARAMETERS”の位置だと分かります。
Pythonでパラメータを指定してURLにアクセスするには、requests.get()
で引数として辞書を渡してあげます。
つまり書くべきコードは以下になります。
# 元のコード
# r = requests.get(url)
# 新しいコード
r = requests.get(url, params={'pair': 'btc_jpy'})
コードを少し見やすくしたいので、引数で渡す辞書は別で定義しておきましょう。
from pprint import pprint
import requests
BASE_URL = 'https://coincheck.com'
url = BASE_URL + '/api/trades'
params = {
'pair': 'btc_jpy'
}
r = requests.get(url, params=params)
r = r.json()
print(r)
辞書を別で定義したほうが、分かりやすいですね。
STEP④ : ファイル実行
というわけで、プログラムの作成が完了したので、main.py
を実行していきましょう。
プログラムの実行が完了すると、以下のような出力になるはずです。
非常に見辛いですね…(^_^;)
こんなときは、やはりpprint()
を使ってキレイに出力してあげます。
出力結果が長くなっているので、以下では中略した状態を載せておきます。
{'data': [{'amount': '0.01',
'created_at': '2021-02-09T23:50:24.000Z',
'id': 170416578,
'order_type': 'buy',
'pair': 'btc_jpy',
'rate': 4875003},
{'amount': '0.0285',
'created_at': '2021-02-09T23:50:23.000Z',
'id': 170416577,
'order_type': 'sell',
'pair': 'btc_jpy',
'rate': 4875003}],
'pagination': {'ending_before': None,
'limit': 10,
'order': 'desc',
'starting_after': None},
'success': True}
だいぶ見やすい形になりましたね。この出力の骨子は以下のようになっています。
{'data': [],
'pagination': {'Key': 'Value'},
'success': True}
ここまでシンプルにすると、3つのKeyを持つ辞書であることが分かります。
この辞書で見るべきはdata
の中身です。この中に全取引履歴が格納されています。
[{'amount': '0.01',
'created_at': '2021-02-09T23:50:24.000Z',
'id': 170416578,
'order_type': 'buy',
'pair': 'btc_jpy',
'rate': 4875003},
{'amount': '0.0285',
'created_at': '2021-02-09T23:50:23.000Z',
'id': 170416577,
'order_type': 'sell',
'pair': 'btc_jpy',
'rate': 4875003}]
created_at
を見ると分かりますが、最新のデータが0番目に格納されています。次に新しいものが1番目に入っていますね。
取得結果の解釈方法ですが、たとえば0番目の取引なら「ビットコインが4,875,003円のとき、0.01BTC購入した」という意味になります。
つまり日本円にして、48750.03円(=4,875,003円 × 0.01BTC)です。約48,750円分のビットコインを買った人がいるんですね。
まとめ : Coincheck APIを使って全取引履歴を取得しよう!
というわけで、ビットコインの全取引履歴を取得できるようになりました。
以前に使用したAPIだと、直近の1つ取引データを取得できませんでした。でも今回の記事で紹介したAPIであれば、複数の取引履歴を取得できます。
またrequests.get()
の新しい使い方も分かったので、少しレベルアップできたはずです。
次の記事ではビットコインの板情報を取得したいと思います。次回の内容まで学習すると「APIの操作に慣れる」という基礎学習の範囲は十分だと思います。
もし難しく感じる部分があったら、ぜひ復習しながら取り組んでいきましょう。