如何调用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
相关产品推荐
相关产品推荐

