APIを叩いてbitcoinのデータを受け取る
まずはブラウザにアドレスを入れてデータを得る。
データは見れますが、見るかコピーするかのアナログになりますので、やはり連続的に取得するにはプログラムです。
Windows10 powershellでcurlを叩く
2018年4月に配布された Windows 10 の大型アップデート (RS4, 1803) から使えるようになったそうです。
powershellでもコマンドプロンプト(dos窓)でも両方使えますが違いがあります。
【DOS窓でhttps://api.bitflyer.jp/v1/markets】
marketsを叩くと、取引所のペア一覧が帰ってきます。
[{"product_code":"BTC_JPY"},{"product_code":"FX_BTC_JPY"},{"product_code":"ETH_BTC"},{"product_code":"BCH_BTC"},{"product_code":"BTCJPY27DEC2019","alias":"BTCJPY_MAT1WK"},{"product_code":"ETH_JPY"},{"product_code":"BTCJPY27MAR2020","alias":"BTCJPY_MAT3M"},{"product_code":"BTCJPY03JAN2020","alias":"BTCJPY_MAT2WK"}]
【powershell で https://api.bitflyer.jp/v1/markets】
こりゃ良いわ!
ステータス200(OK番号)も表示されるし、細かい情報も表示されてるし、行の長さまで帰ってきてるし。ただ、本体は省略されてますが、どうなんでしょうか?
StatusCode : 200 StatusDescription : OK Content : [{"product_code":"BTC_JPY"},{"product_code":"FX_BTC_JPY"},{"product_code":"ETH_BTC"},{"product_code ":"BCH_BTC"},{"product_code":"BTCJPY27DEC2019","alias":"BTCJPY_MAT1WK"},{"product_code":"ETH_JPY"}, {"... RawContent : HTTP/1.1 200 OK Pragma: no-cache X-RateLimit-Period: 300 X-RateLimit-Remaining: 499 X-RateLimit-Reset: 1576941169 Request-Context: appId=cid-v1:edafd9df-f22e-4349-b71f-1c468550add5 X-Content-Typ... Forms : {} Headers : {[Pragma, no-cache], [X-RateLimit-Period, 300], [X-RateLimit-Remaining, 499], [X-RateLimit-Reset, 1 576941169]...} Images : {} InputFields : {} Links : {} ParsedHtml : mshtml.HTMLDocumentClass RawContentLength : 315
PowershellでBitflyerのprivete APIを叩いてみると
curl https://api.bitflyer.com/v1/me/getpermissions curl : {"status":-500,"error_message":"ACCESS-KEY header is required","data":null} 発生場所 行:1 文字:1 + curl https://api.bitflyer.com/v1/me/getpermissions + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebExce ption + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
コード-500(失敗)access-key が必要ですが空っぽですといってます。
Tikerを送らせてみるか
curl https://api.bitflyer.jp/v1/getticker StatusCode : 200 StatusDescription : OK Content : {"product_code":"BTC_JPY","timestamp":"2019-12-21T15:32:02.087","tick_id":2800431,"best_bid":781439 .0,"best_ask":781832.0,"best_bid_size":0.1,"best_ask_size":0.001,"total_bid_depth":1945.51205548,"t ot... RawContent : HTTP/1.1 200 OK Pragma: no-cache X-RateLimit-Period: 300 X-RateLimit-Remaining: 499 X-RateLimit-Reset: 1576942623 Request-Context: appId=cid-v1:edafd9df-f22e-4349-b71f-1c468550add5 X-Content-Typ... Forms : {} Headers : {[Pragma, no-cache], [X-RateLimit-Period, 300], [X-RateLimit-Remaining, 499], [X-RateLimit-Reset, 1 576942623]...} Images : {} InputFields : {} Links : {} ParsedHtml : mshtml.HTMLDocumentClass RawContentLength : 301
パラメーターで通貨ペアを指定しないとデフォルトのBTC_JPYの情報が返ってくる。
FX_BTC_JPYを指定してみる。
curl https://api.bitflyer.jp/v1/getticker?'product_code'='FX_BTC_JPY' StatusCode : 200 StatusDescription : OK Content : {"product_code":"FX_BTC_JPY","timestamp":"2019-12-21T15:33:00.023","tick_id":64093035,"best_bid":78 9699.0,"best_ask":789735.0,"best_bid_size":0.4518,"best_ask_size":0.02,"total_bid_depth":7008.45756 71... RawContent : HTTP/1.1 200 OK Pragma: no-cache X-RateLimit-Period: 244 X-RateLimit-Remaining: 498 X-RateLimit-Reset: 1576942624 Request-Context: appId=cid-v1:edafd9df-f22e-4349-b71f-1c468550add5 X-Content-Typ... Forms : {} Headers : {[Pragma, no-cache], [X-RateLimit-Period, 244], [X-RateLimit-Remaining, 498], [X-RateLimit-Reset, 1 576942624]...} Images : {} InputFields : {} Links : {} ParsedHtml : mshtml.HTMLDocumentClass RawContentLength : 308
絵面的にはこうです↓
上の青い画面がpowershell、下の黒い画面がコマンドプロンプト。
以上「ノンプログラムでAPIを叩け!」でした。
ここから、「PythonでAPIを叩け!」です
2行のソースでtickerを取得
import requests print(requests.get('https://api.bitflyer.jp/v1/getticker?product_code=FX_BTC_JPY').text)
結果出力 適当に改行してますが、1行で出力されます {"product_code":"FX_BTC_JPY","timestamp":"2019-11-28T03:07:47.373", "tick_id":48758132,"best_bid":835866.0,"best_ask":835921.0,"best_bid_size":0.17, "best_ask_size":0.05,"total_bid_depth":7282.15239273,"total_ask_depth":6286.49114921, "ltp":835866.0,"volume":165037.83266976,"volume_by_product":164994.16153915}
1行ずつ解析(解ってないので解説ではない)
requests.get('https://api.bitflyer.jp/v1/getticker?product_code=FX_BTC_JPY')
requests というライブラリーを利用して、BFのtickerを出力してくれるAPIのアドレスを指定して中身を受け取ってもらう。
Response [200]
帰ってきたのは、GETが成功したという報告の番号200。
中身が見えないので、text形式で返してもらうようにする
print(requests.get('https://api.bitflyer.jp/v1/getticker?product_code=FX_BTC_JPY').text)
最後に、.textをつけるとテキストで返してくれるのでprint出来る
しかし、何の区切りもないので、今後もっと大量のデータを受け取る時に、見やすい方法として、pprintという関数を使う。(クラスのメソッドかもしれないが、中身を調べる知恵と時間がない。)
見づらいので、変更①json形式で受け取って、②整形出力してくれるpprintを使う
import requests import pprint pprint.pprint(requests.get('https://api.bitflyer.jp/v1/getticker?product_code=FX_BTC_JPY').json())
pprintを使うのに、pprint.pprintと2回重ねないとエラーになる。
( from pprint import pprintとすれば2回重ねなくて良いようだ)
{'best_ask': 835681.0, 'best_ask_size': 0.00388161, 'best_bid': 835680.0, 'best_bid_size': 0.01, 'ltp': 835681.0, 'product_code': 'FX_BTC_JPY', 'tick_id': 48940600, 'timestamp': '2019-11-28T03:23:31.993', 'total_ask_depth': 6271.30917723, 'total_bid_depth': 7289.90711293, 'volume': 163964.68897911, 'volume_by_product': 163921.0188485}
pprintは丁寧に改行してくれている。
欲しい値をキーで取り出す。
データの中から、ラストプライス’ltp’を取り出そう。
まず毎回getする必要はないので、一旦変数’tk’に代入する。
そこからキーが’ltp’のデータを取り出す。
tk=(requests.get('https://api.bitflyer.jp/v1/getticker?product_code=FX_BTC_JPY').json()) print(tk['ltp'])
ltpの値が取り出せました。
835681.0
追記中
コメント