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
追記中
