[Python Websocket JSON-RPC] aiohttp websocket-client での bitFlyer Realtime API 受信コード
これはなに?
aiohttpを使ってWebsocket(JSON-RPC)の受信ができるらしいと聞いて『適当に』作ったサンプル。ググっても出てこなかったので作った(半分自分のメモ
どっちの処理が速いかとか、標準のwebsocket-clientと比較してのメリデメとかは知らない
noaさんがサンプル公開されているとのことなので追記
注意事項
・例外処理してない
・aiohttp, asyncio に詳しくないので変な書き方してるかも
・損失出ても知りません
確認環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14 # Mojave
BuildVersion: 18A391
$ pyenv --version
pyenv 1.1.5
$ python --version
Python 3.6.2 :: Anaconda, Inc.
$ pip show aiohttp
Name: aiohttp
Version: 3.0.1
コード
前述の通り適当です。
公式リファレンス見ると msg = await ws.receive() でやってるから、そっち使っても良いかも。
import json
import asyncio
import aiohttp
SYMBOL_BTC_FX = 'FX_BTC_JPY'
URL = "wss://ws.lightstream.bitflyer.com/json-rpc"
BOARD_SS_FX = "lightning_board_snapshot_" + SYMBOL_BTC_FX
BOARD_FX = "lightning_board_" + SYMBOL_BTC_FX
EXEC_FX = "lightning_executions_" + SYMBOL_BTC_FX
TICKER_FX = "lightning_ticker_" + SYMBOL_BTC_FX
RCV_CHS = [BOARD_SS_FX, BOARD_FX] # ここ変えれば受信チャンネル変更できる
async def main():
session = aiohttp.ClientSession()
async with session.ws_connect(URL) as ws:
for ch in RCV_CHS:
output_json = json.dumps(
{'method' : 'subscribe',
'params' : {'channel' : ch}
}
)
await ws.send_str(output_json)
async for msg in ws:
print(msg)
if msg.type in (aiohttp.WSMsgType.CLOSED,
aiohttp.WSMsgType.ERROR):
break
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
実行結果
スナップショットは長いので後略
WSMessage(type=<WSMsgType.TEXT: 1>, data='{"jsonrpc":"2.0","method":"channelMessage","params":{"channel":"lightning_board_FX_BTC_JPY","message":{"mid_price":773675,"bids":[{"price":773559,"size":0.01},{"price":773580,"size":0.2820925}],"asks":[{"price":773937,"size":0},{"price":774016,"size":0.02},{"price":773929,"size":0.41}]}}}', extra='')
WSMessage(type=<WSMsgType.TEXT: 1>, data='{"jsonrpc":"2.0","method":"channelMessage","params":{"channel":"lightning_board_FX_BTC_JPY","message":{"mid_price":773729,"bids":[],"asks":[{"price":773682,"size":0},{"price":773683,"size":0},{"price":773684,"size":0},{"price":773685,"size":0},{"price":773686,"size":0},{"price":773687,"size":0},{"price":773688,"size":0},{"price":773689,"size":0},{"price":773690,"size":0},{"price":773691,"size":0},{"price":773693,"size":0},{"price":773694,"size":0},{"price":773695,"size":0},{"price":773696,"size":0},{"price":773698,"size":0},...
参考サイト
APIドキュメント
おわりに
有料(¥100)にしてるけど、これで内容は全部です。募金してくれる人がいれば、ジュース代としていただけると嬉しい。コードは、インデントくずれが起きたりするようなので、コピペ時には注意してください。
マガジン
コメント用note(未購入者向け)
干し芋
ここから先は
0字
¥ 100
サポート頂けると励みになります BTC,BCH: 39kcicufyycWVf8gcGxgsFn2B8Nd7reNUA LTC: LUFGHgdx1qqashDw4WxDcSYQPzd9w9f3iL MONA: MJXExiB7T7FFXKYf9SLqykrtGYDFn3gnaM