求助:为Binance API谷歌表格JS脚本添加WebSocket避免IP封禁
解决Binance API请求权重过高封禁问题:改用WebSocket实现
原脚本通过REST API轮询bookTicker接口的方式,会因频繁请求触发Binance的权重限制,导致IP封禁(错误码-1003)。改用WebSocket实时推送数据可以彻底避免这个问题,以下是适配谷歌表格的完整实现:
修改后的脚本
function connectBinanceWebSocket() { // Binance WebSocket实时行情端点,订阅XLMUSDT最优买卖盘数据 const wsUrl = "wss://stream.binance.com:9443/ws/xlmusdt@bookTicker"; // 建立WebSocket连接 const ws = new WebSocket(wsUrl); // 连接成功回调 ws.onopen = () => { Logger.log("WebSocket连接已建立,开始接收XLMUSDT行情数据"); }; // 接收实时数据回调 ws.onmessage = (event) => { const data = JSON.parse(event.data); // 提取最高买价(bidPrice)和最低卖价(askPrice) const bidPrice = data.b; const askPrice = data.a; Logger.log(`最高买价: ${bidPrice}, 最低卖价: ${askPrice}`); // 更新谷歌表格单元格 const activeSheet = SpreadsheetApp.getActiveSheet(); activeSheet.getRange("B2").setValue(bidPrice); activeSheet.getRange("C2").setValue(askPrice); }; // 连接关闭回调 ws.onclose = (event) => { Logger.log(`WebSocket连接关闭,代码: ${event.code}, 原因: ${event.reason}`); // 可选:需要自动重连的话,在这里调用connectBinanceWebSocket() }; // 连接错误回调 ws.onerror = (error) => { Logger.log(`WebSocket错误: ${error.message}`); }; }
关键说明
- 端点差异:WebSocket使用
wss://stream.binance.com:9443/ws/xlmusdt@bookTicker,无需主动轮询,服务器会实时推送最新的最优买卖盘数据。 - 字段对应:WebSocket返回的
bookTicker数据中,b对应最高买价、a对应最低卖价,和REST API的字段命名不同,注意区分。 - 冗余优化:移除了原脚本中重复解析JSON的无效代码,一次解析即可完成数据处理。
- 运行注意:谷歌表格脚本中WebSocket需在支持客户端API的环境运行,建议通过自定义菜单触发执行,时间驱动触发器环境可能限制WebSocket连接。
内容的提问来源于stack exchange,提问作者elbingerr
相关产品推荐
相关产品推荐

