2. 获取以太坊实时行情
任务目标
通过WebSocket连接加密货币交易所,实时接收以太坊(ETH)的最新成交价与24小时交易量,并持续打印更新。本案例以币安(Binance)公开行情接口为例,无需。
环境依赖
需要Python 3.8+,并安装websockets库:
pip install websockets
关键完整代码
以下代码建立WebSocket连接,订阅ETH/USDT的24小时滚动窗口行情(ticker频道),该频道推送的数据包含最新价格c和24小时成交量v:
import asyncio
import json
import websockets
BINANCE_WS_URL = "wss://stream.binance.com:9443/stream"
async def fetch_eth_ticker():
# 订阅单个流的参数格式:<streamName>,此处为 ethusdt@ticker
subscribe_msg = {
"method": "SUBSCRIBE",
"params": ["ethusdt@ticker"],
"id": 1
}
async with websockets.connect(BINANCE_WS_URL) as ws:
await ws.send(json.dumps(subscribe_msg))
print("已订阅 ethusdt@ticker,等待数据...")
while True:
raw = await ws.recv()
data = json.loads(raw)
# 过滤掉订阅确认消息(无 'data' 字段)
if "data" not in data:
continue
ticker = data["data"]
price = float(ticker["c"]) # 最新成交价
volume = float(ticker["v"]) # 24小时成交量(以ETH计)
print(f"ETH/USDT 最新价: {price:.2f} | 24h成交量: {volume:.4f} ETH")
if __name__ == "__main__":
try:
asyncio.run(fetch_eth_ticker())
except KeyboardInterrupt:
print("\n已手动停止")
运行方式
- 将上述代码保存为
eth_ws_ticker.py。 - 在终端执行:
python eth_ws_ticker.py
验证方法
程序启动后,若连接成功,会先打印“已订阅”提示,随后每约1秒输出一行ETH/USDT的最新价格与24小时成交量。判定通过的标准:
- 终端持续打印价格与成交量数据,且价格数值与主流行情网站(如CoinMarketCap或币安官网)的ETH/USDT价格基本一致(允许微小延迟差异)。
- 手动按
Ctrl+C能正常退出程序,无异常堆栈。
常见问题
- 连接被拒绝或超时:检查网络是否能访问外网,币安WebSocket域名可能需代理;若使用公共网络受限,可尝试更换网络环境。
- 无数据输出:确认订阅消息中参数为小写交易对
ethusdt@ticker,且未修改id字段。 - 频繁断线:免费公共接口有连接数限制,若同时运行多个实例可能被断开,关闭其他占用该连接的进程即可。