LoginSignup
10
8

More than 5 years have passed since last update.

bitflyerの過去の1分足データを1日分取得する

Last updated at Posted at 2017-11-22

やったこと

公式のAPIは現在の情報しか返さない。
bitFlyerの過去価格データを貯めてくれるサイトがいくつかある。
カジュアルにcurlで叩いてjsonに落とすスクリプト書いたのでメモする

参考

コード

最初シェルで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ぐらいまでしか返ってこない(再送するからあとでとりこめということか?)

たまたまなのか仕様なのかよくわからない。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8