ZaifのAPIを使って現在価格を取り出してみよう
先日、仮想通貨が全面的に大下落しました。
その時にオンライン取引所のサーバが込み合い注文が通らない、あるいはページ自体閲覧できないできない状態となりました。買いのタイミングであれば損失はありませんが、売りのタイミングでこうなってしまうと大損害です。
そこで、今回はZaifのAPIを使って現在価格などを取得してみようと思います。
最終的には取引もできたらと思いますが、現在ZaifではAPIキーに関してごちゃごちゃしているようなので未定です。
現在の価格を取り出す
現在価格を取り出すにはAPIキーは必要ありません。特定のURLを叩くだけで取得できます。
サンプルコードを見てみる
Zaifでサンプルコードが公開されているのでまずこちらを見てみましょう。
import requests import json response = requests.get('https://api.zaif.jp/api/1/last_price/btc_jpy') if response.status_code != 200: raise Exception('return status code is {}'.format(response.status_code)) json.loads(response.text)
1,2行目は必要なライブラリのインポートです。インストールしていない場合はpipでインストールしておきます。
import requests import json
3行目が円建てのビットコインの価格を取得している箇所です。GETメソッドで取得しています。
[currecy_pair]の部分に通貨を指定します。ビットコインの場合はbtc_jpyとなります。
response = requests.get('https://api.zaif.jp/api/1/last_price/[currecy_pair]')
4,5行目はレスポンスのHTMLステータスを見て成功以外のステータスの場合例外を発生させています。
6行目はレスポンスのボディ部分を取り出しています。json形式で返ってきます。
{"last_price": 130065.0}
下記のように書くと返ってきたjsonを辞書型でいいかんじに変換してくれます。あとはキーを指定すれば値を取得できます。
import requests import json response = requests.get('https://api.zaif.jp/api/1/last_price/btc_jpy') if response.status_code != 200: raise Exception('return status code is {}'.format(response.status_code)) r = response.json() print(r["last_price"])
130065.0
ビットコイン以外の価格を取り出す
ビットコイン以外の通貨を取り出すには[currecy_pair]にどのように指定すればいいのでしょうか。
取得できる通貨を調べてみます。
import requests import json response = requests.get('https://api.zaif.jp/api/1/currency_pairs/all') r = response.json() for i in range(len(r)): print(r[i]["currency_pair"])
cicc_btc xem_btc bitcrystals_btc mona_btc mosaic.cms_jpy xem_jpy sjcx_btc jpyz_jpy pepecash_btc zaif_jpy mona_jpy bch_jpy fscc_jpy xcp_jpy fscc_btc cicc_jpy pepecash_jpy xcp_btc erc20.cms_jpy ncxc_jpy bch_btc eth_btc btc_jpy eth_jpy zaif_btc bitcrystals_jpy sjcx_jpy ncxc_btc
このように指定することで有効な通貨ペアをすべて取得できます。
response = requests.get('https://api.zaif.jp/api/1/currency_pairs/all')
現在、28ペアの価格が取得できるようなので、試しにXEMの価格を取得してみましょう。
import requests import json response = requests.get('https://api.zaif.jp/api/1/last_price/xem_jpy') if response.status_code != 200: raise Exception('return status code is {}'.format(response.status_code)) print(response.json()["last_price"])
100.02