AIOHTTP-Client Exercise¶
目的¶
Clientを使った簡単な練習問題に取組む
インターネット経由で取得できるデータを、並行に取得して処理する簡単なPythonを書けるようになる
課題1¶
暗号資産取引所 ftx の APIを利用して、取引データをウェブソケット経由で取得する
1import asyncio
2import aiohttp
3
4import logging
5
6logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s", datefmt="%X")
7
8
9async def main():
10 async with aiohttp.ClientSession() as session:
11 async with session.ws_connect("wss://ftx.com/ws") as ws:
12 # サブスクライブ
13 await ws.send_str(
14 '{"op": "subscribe", "channel": "trades", "market": "BTC-PERP"}'
15 )
16 async for msg in ws:
17 if msg.type == aiohttp.WSMsgType.TEXT:
18 logging.info(msg.data)
19 else:
20 break
21
22
23asyncio.run(main())
サブスクライブ時に文字列を渡していますが、json を渡すように書き換えてください。
websockets を参考にして async for ではなく
ws.recieve()
して、非同期イテレータを使わないどうなるのか実験してください。以下は、暗号資産APIに関する課題なので興味がある方はやってみて下さい。
"BTC-PERP" 以外のマーケットをサブスクライブしてデータを取得して下さい。マーケットリストは FTX Markets を参照してください。
orderbook
チャンネルをサブスクライブしてください。参照: Websocket APIBybit の API を使って 適当なリアルタイムデータを取得して下さい。参照: WebSocket Data – Bybit API Docs
課題2¶
今日のハンズオン内容をベースにした問題
バイナリデータの読み込み のポケモン画像取得を非同期で150匹取得してローカルに保存して下さい
https://connpass.com/about/api/ を使って、キーワードが "aiohttp" のイベントを探し、event_id のみリストで取得して下さい。ただし、connpass api は
.json()
で取得出来ないので、.text()
で取得して下さい。