AIOHTTP-Client Exercise

目的

  • Clientを使った簡単な練習問題に取組む

  • インターネット経由で取得できるデータを、並行に取得して処理する簡単なPythonを書けるようになる

課題1

 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())
  1. サブスクライブ時に文字列を渡していますが、json を渡すように書き換えてください。

  2. websockets を参考にして async for ではなく ws.recieve() して、非同期イテレータを使わないどうなるのか実験してください。

  3. 以下は、暗号資産APIに関する課題なので興味がある方はやってみて下さい。

    1. "BTC-PERP" 以外のマーケットをサブスクライブしてデータを取得して下さい。マーケットリストは FTX Markets を参照してください。

    2. orderbook チャンネルをサブスクライブしてください。参照: Websocket API

    3. Bybit の API を使って 適当なリアルタイムデータを取得して下さい。参照: WebSocket Data – Bybit API Docs

課題2

  • 今日のハンズオン内容をベースにした問題

  1. バイナリデータの読み込み のポケモン画像取得を非同期で150匹取得してローカルに保存して下さい

  2. https://connpass.com/about/api/ を使って、キーワードが "aiohttp" のイベントを探し、event_id のみリストで取得して下さい。ただし、connpass api は .json() で取得出来ないので、 .text() で取得して下さい。