導入我們需要的websocket的模組BinanceSocketManager,和需要時間延遲避免資料更新過快的模組time,以及asyncio模組,除了可使用asyncio.get_event_loop取得事件迴圈,透過run_until_complete執行指定的協程,這會阻斷直到指定的(主)協程完成(也就是執行完該協程函式定義的流程),想嘗試使用更多webSocket用法的可以參考這篇。
像這樣創建管理器,傳遞一個AsyncClient。
import asyncio
import time
from binance import AsyncClient, BinanceSocketManager
async def main():
client = await AsyncClient.create()
bm = BinanceSocketManager(client, user_timeout=60)
ts = bm.trade_socket('BTCUSDT')
async with ts as tscm:
while True:
time.sleep(1)
res = await tscm.recv()
print('BTCUSDT當前價格:'+res["p"])
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
為webSocket連接設置自定義超時
bm = BinanceSocketManager(client, user_timeout=60)
由於res = await tscm.recv()
會回傳很多其他有關BTCUSDT的各種數值,這邊我就只拿出他的價格來做示範,也就是res["p"]
,這邊可以看到有用到time.sleep(1)
來讓他每秒為間隔來顯示當時價格。