bitFlyer Lightning Realtime API を受信し、とにかく保存する (1)

何事もまずはデータがないと始まらない。できるだけ情報の省かれていない生データのダンプにできれば触ってみたい。公開してる方をすぐには発見できなかったので、自分でしばらく保存してみる。

これを参考にさせてもらって書いた。本当は板情報も保存したいが、まずは lightning_ticker_BTC_JPY だけ。とりあえず一晩実行してみる。

import websocket
import colorlog
import json
import logging
import sys

logger = logging.getLogger(__name__)


def main():
   handler = colorlog.StreamHandler()
   handler.setFormatter(colorlog.ColoredFormatter(
       '%(log_color)s[%(levelname)s:%(name)s] %(message)s'))
   logging.basicConfig(level=logging.INFO, handlers=[handler])

   url = 'wss://ws.lightstream.bitflyer.com/json-rpc'
   channel = 'lightning_ticker_BTC_JPY'

   def on_open(ws):
       logger.info('open')
       ws.send(json.dumps(
               {
                   'method': 'subscribe',
                   'params': {'channel': channel}
               }
       ))

   def on_message(ws, message):
       body = json.loads(message)['params']['message']
       print(body)

   def on_close(ws):
       logger.info('closed')

   def on_error(ws, error):
       logger.exception(error)
       if isinstance(error, KeyboardInterrupt):
           sys.exit(1)

   # ネットワークが切れたりするとon_error, on_closeあたりが呼ばれて帰ってきちゃうので、ループで囲う
   # websocketが食べちゃうからExceptionは外まで出てこないっぽいんだけど、一応こっちでもキャッチするコード入れとく
   while True:
       try:
           websocket.enableTrace(True)
           ws = websocket.WebSocketApp(
               url,
               on_open=on_open,
               on_message=on_message,
               on_error=on_error,
               on_close=on_close,
           )
           ws.run_forever()
       except Exception as e:
           logger.exception(e)


if __name__ == '__main__':
   main()
python main.py >> ~/btc/lightning_ticker_BTC_JPY.txt


この記事が気に入ったらサポートをしてみませんか?