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

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

# 参考
- [bitFlyerの過去チャートを取得するAPI - shobylogy](http://blog.shoby.jp/entry/2017/05/24/093733) 
- [bitFlyerの過去チャートを1時間足で取得する - shobylogy](http://blog.shoby.jp/entry/2017/06/14/005343)
- https://cryptowatch.jp/docs/api

# コード
最初シェルでcurlコマンド並べていて、そのうちunixtime書き換えるのが面倒になってきたのでrubyで日付部分を埋め込むようにした。
(rubyスクリプト内で、直接外部コマンド叩いても良かったけど、再利用しなさそうだったので)

curlで1秒ごとに1時間分ずつ保存するシェルスクリプトを吐く

```ruby: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コマンドを並べたシェルスクリプトが吐かれるので、実行する

```sh: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ぐらいまでしか返ってこない(再送するからあとでとりこめということか？)

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