やったこと
公式のAPIは現在の情報しか返さない。
bitFlyerの過去価格データを貯めてくれるサイトがいくつかある。
カジュアルにcurlで叩いてjsonに落とすスクリプト書いたのでメモする
参考
- bitFlyerの過去チャートを取得するAPI - shobylogy
- bitFlyerの過去チャートを1時間足で取得する - shobylogy
- https://cryptowatch.jp/docs/api
コード
最初シェルでcurlコマンド並べていて、そのうちunixtime書き換えるのが面倒になってきたのでrubyで日付部分を埋め込むようにした。
(rubyスクリプト内で、直接外部コマンド叩いても良かったけど、再利用しなさそうだったので)
curlで1秒ごとに1時間分ずつ保存するシェルスクリプトを吐く
get.rb
coding: utf-8
unixtime = [
[1511190000,1511193599],
[1511193600,1511197199],
[1511197200,1511200799],
[1511200800,1511204399],
[1511204400,1511207999],
[1511208000,1511211599],
[1511211600,1511215199],
[1511215200,1511218799],
[1511218800,1511222399],
[1511222400,1511225999],
[1511226000,1511229599],
[1511229600,1511233199],
[1511233200,1511236799],
[1511236800,1511240399],
[1511240400,1511243999],
[1511244000,1511247599],
[1511247600,1511251199],
[1511251200,1511254799],
[1511254800,1511258399],
[1511258400,1511261999],
[1511262000,1511265599],
[1511265600,1511269199],
[1511269200,1511272799],
[1511272800,1511276399]]
i = 0
puts '#!/bin/bash'
unixtime.each do | t |
puts "curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=#{t[0]}&before=#{t[1]}' > %02d.json" % [i]
puts 'sleep 1'
i = i + 1
end
$ ruby get.rb > get.sh
curlコマンドを並べたシェルスクリプトが吐かれるので、実行する
get.sh
#!/bin/bash
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511190000&before=1511193599' > 00.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511193600&before=1511197199' > 01.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511197200&before=1511200799' > 02.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511200800&before=1511204399' > 03.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511204400&before=1511207999' > 04.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511208000&before=1511211599' > 05.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511211600&before=1511215199' > 06.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511215200&before=1511218799' > 07.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511218800&before=1511222399' > 08.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511222400&before=1511225999' > 09.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511226000&before=1511229599' > 10.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511229600&before=1511233199' > 11.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511233200&before=1511236799' > 12.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511236800&before=1511240399' > 13.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511240400&before=1511243999' > 14.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511244000&before=1511247599' > 15.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511247600&before=1511251199' > 16.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511251200&before=1511254799' > 17.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511254800&before=1511258399' > 18.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511258400&before=1511261999' > 19.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511262000&before=1511265599' > 20.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511265600&before=1511269199' > 21.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511269200&before=1511272799' > 22.json
sleep 1
curl 'https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=60&after=1511272800&before=1511276399' > 23.json
sleep 1
シェルを実行して、jsonを保存する
$ bash get.sh
jqで適当にcsvに落とす
$ cat *.json | jq -r '.result."60"[] | @csv' > 20171221.csv
わかったこと
- 認証無しで叩けてお手軽
- periods=60とか指定すると、1分足まで取得できる。
- 残念ながらbid,askの値を貯めていてくれるサイトは今のところなさそう。
- 0時付近のレスポンスがちょっと不思議
- 0 ~ 1時を指定すると、23:30から返ってくる
- 23~24時を指定すると、23:45ぐらいまでしか返ってこない(再送するからあとでとりこめということか?)
たまたまなのか仕様なのかよくわからない。