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

如何调用Binance API获取BTCUSDT数据并追加写入Google Spreadsheet

Binance WS数据同步到Google Spreadsheet 修复方案

原代码核心问题

  • 固定写入A5单元格,没有使用追加行的方法
  • cs[]语法不合法,没有将字典格式的K线数据转为行可用的列表结构
  • 未过滤重复推送:Binance的1分钟K线接口每秒都会推送一次未闭合的当前周期K线,没有判断逻辑会导致大量重复数据写入

调整后的完整代码

import websocket, json, time
import gspread
from oauth2client.client import GoogleCredentials
from google.colab import auth

# 配置Binance WS参数
cc = 'btcusdt'
interval = '1m'
socket = f'wss://stream.binance.com:9443/ws/{cc}@kline_{interval}'  

# Google 授权
auth.authenticate_user()
gc = gspread.authorize(GoogleCredentials.get_application_default())

# 打开对应工作表,替换mykeyid为你自己的表格ID
wb = gc.open_by_key('mykeyid')
wrksheet = wb.worksheet('btcusdt')

# 可选:首次运行先写入表头,之后可以注释掉
header = ["开盘时间", "开盘价", "最高价", "最低价", "收盘价", "成交量", "收盘时间", "成交额", "成交笔数", "主动买入成交量", "主动买入成交额", "预留字段"]
wrksheet.append_row(header)

def on_message(ws, message):
    json_message = json.loads(message)
    cs = json_message['k']
    # 只写入已经闭合的完整1分钟K线,不需要过滤的话可以删掉这个if判断
    if cs['x']:
        # 按顺序提取K线字典的值,对应表头顺序
        row_data = [
            cs['t'], cs['o'], cs['h'], cs['l'], cs['c'], cs['v'],
            cs['T'], cs['q'], cs['n'], cs['V'], cs['Q'], cs['B']
        ]
        # 自动追加到表格最后一行
        wrksheet.append_row(row_data)
        # 加小延迟避免触发gspread限流,不需要可以删除
        time.sleep(0.1)

def on_error(ws, error):
    print("运行错误:", error)

ws = websocket.WebSocketApp(socket, on_message=on_message, on_error=on_error)
ws.run_forever()

关键修改说明

  • 用append_row方法替代固定单元格的update,实现自动在表格末尾新增行写入
  • 把K线字典的value按顺序整理为列表,适配表格行的写入要求
  • 新增K线闭合判断if cs['x'],避免写入大量重复的未完成K线数据
  • 新增错误回调和限流延迟,提升运行稳定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 02:42:02