bitflyer HTTP public API ticker

BitcoinBot「招き猫」目次に戻る

 

ブラウザのアドレスバーにアドレスを入れてデータを得る

アドレスバーに貼り付けるだけ→https://api.bitflyer.jp/v1/getticker

データは見れますが、これではプログラムで利用できないので、データとして連続的に取得するにはコードを書いて取り込む。

注:api.bitflyer.jp と api.bitflyer.comが混在してますがどちらでも同じです
 (comが新しいので、どちらかというとcomがいいが、ネットの残骸はまだjpだらけ)

プログラムコードでデータを取得

超シンプルに、requesutsモジュールを使ってTickerのAPIを叩く

import requests
print(requests.get('https://api.bitflyer.jp/v1/getticker'))
<Response [200]>

返されたのは、200という「成功しました」のコード

返されたデータの中身を見てみる。

最後に.textを付けると、テキスト形式で返してくれということになるらしい。
(らしいというのは適当だが、requestsというモジュールにサービスで含まれていることなので、モジュールの中を見てみなければわからない。しかも見ても難しくてわからない。)

import requests 
print(requests.get('https://api.bitflyer.jp/v1/getticker').text)
{"product_code":"BTC_JPY","timestamp":"2019-12-28T17:37:39.95","tick_id":7012032,"best_bid":800199.0,"best_ask":800266.0,"best_bid_size":0.20332786,"best_ask_size":2.8076,"total_bid_depth":1912.61316213,"total_ask_depth":1625.32662773,"ltp":800266.0,"volume":70727.30266907,"volume_by_product":2245.69306647}

 

次はWEBのデータのやり取りで常識的に使われるJSON形式で表示してみる。

import requests
import json
print(requests.get('https://api.bitflyer.jp/v1/getticker').json())
{'product_code': 'BTC_JPY', 'timestamp': '2019-12-28T17:37:39.95', 'tick_id': 7012032, 'best_bid': 800199.0, 'best_ask': 800266.0, 'best_bid_size': 0.20332786, 'best_ask_size': 2.8076, 'total_bid_depth': 1912.61316213, 'total_ask_depth': 1625.32662773, 'ltp': 800266.0, 'volume': 70727.29266907, 'volume_by_product': 2245.69306647}

さっきの.TEXTは文字列が”ダブルクォーテーション”で囲まれていたが、こちら.JSONは文字列が’シングルクォーテーション’で囲まれている。

返ってくるデータは同じで、表示のさせ方がモジュールによって違うということだ。

ここで、改行のないデータを見やすく整形してくれるモジュールがあるので使ってみる。

pprintというモジュールで整形して表示する

import requests
import json
import pprint
pprint.pprint(requests.get('https://api.bitflyer.jp/v1/getticker').json()
{'best_ask': 802347.0,
 'best_ask_size': 0.05,
 'best_bid': 802190.0,
 'best_bid_size': 0.17,
 'ltp': 802190.0,
 'product_code': 'BTC_JPY',
 'tick_id': 7026244,
 'timestamp': '2019-12-28T18:05:12.5',
 'total_ask_depth': 1633.92080608,
 'total_bid_depth': 1946.41346145,
 'volume': 71077.46781321,
 'volume_by_product': 2219.83940682}

一対の辞書データごとに改行されていて見やすい。

一行のコードを汎用性のため関数にする

今までは、printの中に文を詰め込んでいたが、他のAPIも叩けるように関数にする。

#import requests
def getdata():
    url="https://api.bitflyer.com"
    path="/v1/ticker"
    return (requests.get(url+path).json()) #url+path=https://api.bitflyer.jp/v1/getticker
print(getdata()) #プリントの中でgetdata()を呼んでデータを貰っている

URLを基本部分と変化する部分に分けて後で連結しているだけだ。

path=の部分を別のAPI用アドレスに変えれば別な関数になり、別な動作をする。

ビットコインの価格を取り出す

 

データの中から’ltp'(last price=最終価格=現在価格)を取る

import requests
def getdata():
    url="https://api.bitflyer.jp"
    path="/v1/ticker"
    return (requests.get(url+path).json())
print(getdata()['ltp'])

getdata()で取り出したデータ群から

{
‘product_code’: ‘BTC_JPY’,
・・・・・CUT
‘best_bid’: 800199.0,
‘best_ask’: 800266.0,
ltp‘: 802190.0,
‘volume’: 70727.29266907,
‘volume_by_product’: 2245.69306647
}
getdata()で返される、階層のない辞書から‘ltp’の値を取り出すには、[キー]と指定する

print(getdata()[‘ltp‘]) #ltpキーでをゲットしてprint

798010.0

型はなにかチェックする関数type()で調べる

print(type(getdata()[‘ltp’])) #802190.0の型は何かtype()で調べる

結果は
<class ‘float’>
float型、大きい数字や少数を扱う数字型ですね。

type()で型を確認しながらコーディングするとエラーが出にくい。

繰り返しビットコインの価格を取り出す

繰り返す命令は while か for です

通常はさっきの関数getdata()をwhileの傘の下に置けばいいだけです

 

import requests
import time #時間を操るモジュール
def getdata():
    url="https://api.bitflyer.jp"
    path="/v1/ticker"
    print(requests.get(url+path).json()['ltp'])

while True:
    getdata()
    time.sleep(1)#timeモジュールの中のsleep関数を呼び、(1)秒休む

結果、 一秒ごとに最新に価格が出力されます。

無限ループになってますので止めるときは ^C (windows)

797930.0
797930.0
797983.0
797983.0
797983.0
797983.0
797983.0
797983.0
797983.0
797983.0
797983.0
797983.0
797983.0
797983.0
797983.0
797983.0
797883.0
797867.0
797867.0
797867.0
797867.0
797867.0
797867.0

この値を「変数」に格納すれば、最低限必要な情報は手にできます。

・最低価格(1番安いものと入れ替える) 

・最高価格(1番高いものと入れ替える)

・現在価格

・買った価格or売った価格

この4つでプログラム売買できます。

近い将来億り人ですわ。(今 ±0円/日の辺り)

 

 

BitcoinBot「招き猫」目次に戻る

amazon 本日のタイムセール Time Sale
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 動画290本28.5時間 \24,000 (毎月月初数日間は 1800円)
楽天モバイル、妻がiphone SE2、息子がiphone11で使ってます。一番安くて通信品質イマイチ
タイトルとURLをコピーしました