You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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()

修复说明

  1. 协议版本匹配:创建Client实例时添加version=2,确保与Ambient API使用的v2协议兼容
  2. 参数传递优化:用query参数替代URL拼接,避免特殊字符或格式导致的连接失败
  3. 数据事件监听:根据API文档补充了data事件监听,用于接收实时推送的天气数据
  4. 日志记录扩展:增加了可选的日志写入逻辑,方便后续数据留存与分析

内容的提问来源于stack exchange,提问作者kyrlon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:22:40