使用Python连接Ambient Realtime API时遇连接错误求助
解决Python socketio连接Ambient Realtime API的ConnectionError问题
你遇到的socketio.exceptions.ConnectionError: One or more namespaces failed to connect错误,核心原因是Python socketio客户端默认协议版本与Ambient Realtime API不兼容,加上连接参数传递方式有误。以下是具体修复方案:
关键修复点
- Ambient Realtime API基于Socket.IO v2.x实现,需强制客户端使用对应版本
- 不要将
applicationKey直接拼接在URL中,改用query参数传递,避免URL解析异常 - 确认
AUTH.json中的AMBIENT_APPLICATION_KEY和AMBIENT_API_KEY为有效权限密钥
修复后的代码
import socketio import json from pathlib import Path import inspect CURRENT_FILE_PATH = Path(inspect.getfile(lambda: None)).parent LOG_FILE = CURRENT_FILE_PATH / "data.log" with open(CURRENT_FILE_PATH / "AUTH.json") as fd: auth = json.load(fd) # 指定Socket.IO v2版本,匹配Ambient API协议 sio = socketio.Client(version=2) @sio.event def connect(): print('Connected to the Socket.IO server') @sio.event def disconnect(): print('Disconnected from the Socket.IO server') @sio.event def subscribed(data): print('Subscribed event received:') print(data) # 监听实时天气数据推送事件(API文档规定数据通过'data'事件发送) @sio.event def data(data): print('Received real-time weather data:') print(json.dumps(data, indent=2)) # 可选:将数据写入日志文件 with open(LOG_FILE, 'a') as f: f.write(json.dumps(data) + '\n') # 通过query参数传递连接所需参数 sio.connect( 'https://rt2.ambientweather.net/', query={'api': '1', 'applicationKey': auth["AMBIENT_APPLICATION_KEY"]} ) # 发送订阅指令 api_keys = [auth["AMBIENT_API_KEY"]] sio.emit('command', {'command': 'subscribe', 'apiKeys': api_keys}) sio.wait()
修复说明
- 协议版本匹配:创建Client实例时添加
version=2,确保与Ambient API使用的v2协议兼容 - 参数传递优化:用
query参数替代URL拼接,避免特殊字符或格式导致的连接失败 - 数据事件监听:根据API文档补充了
data事件监听,用于接收实时推送的天气数据 - 日志记录扩展:增加了可选的日志写入逻辑,方便后续数据留存与分析
内容的提问来源于stack exchange,提问作者kyrlon
相关产品推荐
相关产品推荐

