Skip to content

Instantly share code, notes, and snippets.

@gusutabopb
Created February 13, 2019 08:03
Show Gist options
  • Save gusutabopb/361134dd1b1a1ec1ca6eb4033e529b96 to your computer and use it in GitHub Desktop.
Save gusutabopb/361134dd1b1a1ec1ca6eb4033e529b96 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import aiohttp"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# 先物は系は省略\n",
"all_channels = [\n",
" 'lightning_board_BCH_BTC',\n",
" 'lightning_board_BTC_EUR',\n",
" 'lightning_board_BTC_JPY',\n",
" 'lightning_board_BTC_USD',\n",
" 'lightning_board_ETH_BTC',\n",
" 'lightning_board_FX_BTC_JPY',\n",
" 'lightning_board_snapshot_BCH_BTC',\n",
" 'lightning_board_snapshot_BTC_EUR',\n",
" 'lightning_board_snapshot_BTC_JPY',\n",
" 'lightning_board_snapshot_BTC_USD',\n",
" 'lightning_board_snapshot_ETH_BTC',\n",
" 'lightning_board_snapshot_FX_BTC_JPY',\n",
" 'lightning_executions_BCH_BTC',\n",
" 'lightning_executions_BTC_EUR',\n",
" 'lightning_executions_BTC_JPY',\n",
" 'lightning_executions_BTC_USD',\n",
" 'lightning_executions_ETH_BTC',\n",
" 'lightning_executions_FX_BTC_JPY',\n",
" 'lightning_ticker_BCH_BTC',\n",
" 'lightning_ticker_BTC_EUR',\n",
" 'lightning_ticker_BTC_JPY',\n",
" 'lightning_ticker_BTC_USD',\n",
" 'lightning_ticker_ETH_BTC',\n",
" 'lightning_ticker_FX_BTC_JPY',\n",
"]\n",
"ch_codes = {ch: i+1 for i, ch in enumerate(all_channels)}"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"seen = set()\n",
"stop = False"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"async def connect(channels=None):\n",
" channels = channels or all_channels\n",
" url = 'wss://ws.lightstream.bitflyer.com/json-rpc'\n",
" async with aiohttp.ClientSession() as client:\n",
" async with client.ws_connect(url) as ws:\n",
" for ch in channels:\n",
" print(ch)\n",
" await ws.send_json({\n",
" \"method\": \"subscribe\",\n",
" \"params\": {\"channel\": ch}\n",
" })\n",
" async for msg in ws:\n",
" seen.add(msg.json()['params']['channel'])\n",
" if stop:\n",
" break\n",
" print('closed connection')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"async def show():\n",
" for _ in range(10):\n",
" await asyncio.sleep(3)\n",
" codes = sorted([ch_codes[ch] for ch in seen])\n",
" print(f'{len(codes)} ({max(codes) if codes else None}) | {codes}')\n",
" print('-'*50)\n",
" global stop\n",
" stop = True"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"普通にやろうとすると、チャンネル20番までしか繋がらない"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"lightning_board_BCH_BTC\n",
"lightning_board_BTC_EUR\n",
"lightning_board_BTC_JPY\n",
"lightning_board_BTC_USD\n",
"lightning_board_ETH_BTC\n",
"lightning_board_FX_BTC_JPY\n",
"lightning_board_snapshot_BCH_BTC\n",
"lightning_board_snapshot_BTC_EUR\n",
"lightning_board_snapshot_BTC_JPY\n",
"lightning_board_snapshot_BTC_USD\n",
"lightning_board_snapshot_ETH_BTC\n",
"lightning_board_snapshot_FX_BTC_JPY\n",
"lightning_executions_BCH_BTC\n",
"lightning_executions_BTC_EUR\n",
"lightning_executions_BTC_JPY\n",
"lightning_executions_BTC_USD\n",
"lightning_executions_ETH_BTC\n",
"lightning_executions_FX_BTC_JPY\n",
"lightning_ticker_BCH_BTC\n",
"lightning_ticker_BTC_EUR\n",
"lightning_ticker_BTC_JPY\n",
"lightning_ticker_BTC_USD\n",
"lightning_ticker_ETH_BTC\n",
"lightning_ticker_FX_BTC_JPY\n",
"11 (20) | [2, 3, 5, 6, 7, 8, 9, 10, 11, 18, 20]\n",
"--------------------------------------------------\n",
"12 (20) | [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 18, 20]\n",
"--------------------------------------------------\n",
"12 (20) | [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 18, 20]\n",
"--------------------------------------------------\n",
"12 (20) | [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 18, 20]\n",
"--------------------------------------------------\n",
"12 (20) | [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 18, 20]\n",
"--------------------------------------------------\n",
"13 (20) | [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 18, 20]\n",
"--------------------------------------------------\n",
"13 (20) | [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 18, 20]\n",
"--------------------------------------------------\n",
"15 (20) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 18, 19, 20]\n",
"--------------------------------------------------\n",
"15 (20) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 18, 19, 20]\n",
"--------------------------------------------------\n",
"15 (20) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 18, 19, 20]\n",
"--------------------------------------------------\n",
"closed connection\n"
]
}
],
"source": [
"seen.clear()\n",
"stop = False\n",
"_ = await asyncio.gather(\n",
" connect(all_channels),\n",
" show()\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ところが、接続を複数に分けると無事データ取得可能。。。"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"lightning_board_BCH_BTC\n",
"lightning_board_BTC_EUR\n",
"lightning_board_BTC_JPY\n",
"lightning_board_BTC_USD\n",
"lightning_board_ETH_BTC\n",
"lightning_board_FX_BTC_JPY\n",
"lightning_board_snapshot_BCH_BTC\n",
"lightning_board_snapshot_BTC_EUR\n",
"lightning_board_snapshot_BTC_JPY\n",
"lightning_board_snapshot_BTC_USD\n",
"lightning_ticker_BTC_JPY\n",
"lightning_ticker_BTC_USD\n",
"lightning_ticker_ETH_BTC\n",
"lightning_ticker_FX_BTC_JPY\n",
"lightning_board_snapshot_ETH_BTC\n",
"lightning_board_snapshot_FX_BTC_JPY\n",
"lightning_executions_BCH_BTC\n",
"lightning_executions_BTC_EUR\n",
"lightning_executions_BTC_JPY\n",
"lightning_executions_BTC_USD\n",
"lightning_executions_ETH_BTC\n",
"lightning_executions_FX_BTC_JPY\n",
"lightning_ticker_BCH_BTC\n",
"lightning_ticker_BTC_EUR\n",
"15 (24) | [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 18, 20, 21, 23, 24]\n",
"--------------------------------------------------\n",
"20 (24) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 20, 21, 22, 23, 24]\n",
"--------------------------------------------------\n",
"20 (24) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 20, 21, 22, 23, 24]\n",
"--------------------------------------------------\n",
"20 (24) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 20, 21, 22, 23, 24]\n",
"--------------------------------------------------\n",
"20 (24) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 20, 21, 22, 23, 24]\n",
"--------------------------------------------------\n",
"20 (24) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 20, 21, 22, 23, 24]\n",
"--------------------------------------------------\n",
"20 (24) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 20, 21, 22, 23, 24]\n",
"--------------------------------------------------\n",
"20 (24) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 20, 21, 22, 23, 24]\n",
"--------------------------------------------------\n",
"20 (24) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 20, 21, 22, 23, 24]\n",
"--------------------------------------------------\n",
"20 (24) | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 18, 19, 20, 21, 22, 23, 24]\n",
"--------------------------------------------------\n",
"closed connection\n",
"closed connection\n",
"closed connection\n"
]
}
],
"source": [
"seen.clear()\n",
"stop = False\n",
"_ = await asyncio.gather(\n",
" connect(all_channels[:10]),\n",
" connect(all_channels[10:20]),\n",
" connect(all_channels[20:]),\n",
" show()\n",
")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment