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
この記事が気に入ったらサポートをしてみませんか?