鳩がITをくらったような顔

ITでうんとこしょどっこいしょ

ZaifのAPIを使って現在価格を取り出してみよう

先日、仮想通貨が全面的に大下落しました。
その時にオンライン取引所のサーバが込み合い注文が通らない、あるいはページ自体閲覧できないできない状態となりました。買いのタイミングであれば損失はありませんが、売りのタイミングでこうなってしまうと大損害です。

そこで、今回はZaifAPIを使って現在価格などを取得してみようと思います。
最終的には取引もできたらと思いますが、現在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

おわりに

このように、通貨の現在価格であればAPIキーも必要なく取得できます。
色々な通貨を指定して試してみてください。

あと、Nekoniumはじめました。もしよかったら投げ銭をお願いします。
f:id:ninebird:20180123205505p:plain