一、业务背景
黄金回收、珠宝门店系统开发中,融通金报价是很常用的数据来源。本文使用 Python WebSocket 实现长连接监听,包含心跳保活、断线自动重连、行情字段解析,可直接部署服务端 7×24 小时运行。
说明:订阅报文格式
{"Key":"品种编码"},客户端每 10 秒发送 ping 心跳维持链路。 主要品种编码:RJGOLD 融通金黄金,RJAG 融通金白银,RJPT 铂金,RJPd 钯金。
二、Python 依赖安装
1pip install websocket-client 2
三、完整代码实现
1import websocket 2import json 3import threading 4import time 5 6# WebSocket真实地址,仅代码内配置 7WS_URL = "ws://39.107.99.235/ws" 8SYMBOL = "RJGOLD" 9 10def heartbeat_daemon(ws_conn): 11 while True: 12 try: 13 ping_payload = json.dumps({"ping": int(time.time())}) 14 ws_conn.send(ping_payload) 15 except Exception: 16 pass 17 time.sleep(10) 18 19def on_open(ws): 20 print("长连接已建立,订阅融通金黄金行情") 21 sub_msg = json.dumps({"Key": SYMBOL}) 22 ws.send(sub_msg) 23 threading.Thread(target=heartbeat_daemon, args=(ws,), daemon=True).start() 24 25def on_message(ws, message): 26 try: 27 obj = json.loads(message) 28 if "body" not in obj: 29 return 30 body = obj["body"] 31 print("-" * 60) 32 print(f"融通金黄金 售卖价:{body['Price']} 回购价:{body['BuyPrice']}") 33 print(f"最高:{body['High']} 最低:{body['Low']} 更新时间:{body['Time']}") 34 print("-" * 60) 35 except Exception as e: 36 print("解析异常", str(e)) 37 38def on_close(ws, code, msg): 39 print(f"连接断开 code={code}, 3s后重连") 40 time.sleep(3) 41 start_ws() 42 43def start_ws(): 44 app = websocket.WebSocketApp( 45 WS_URL, 46 on_open=on_open, 47 on_message=on_message, 48 on_close=on_close 49 ) 50 app.run_forever() 51 52if __name__ == "__main__": 53 start_ws() 54
四、HTTP 获取实时行情示例代码
不需要长连接的场景,可以用 HTTP 轮询方式获取报价。
1import requests 2 3url = "http://39.107.99.235:1008/getQuote.php?code=RJGOLD" 4headers = {"Accept‑Encoding": "gzip"} 5 6resp = requests.get(url, headers=headers, timeout=8) 7print(resp.text) 8
五、K 线获取示例代码
1import requests 2 3url = "http://39.107.99.235:1008/redis.php?code=RJGOLD&time=5m&rows=200" 4resp = requests.get(url, timeout=8) 5print(resp.text) 6
六、字段简要说明
| 字段 | 说明 |
|---|---|
| StockCode | 品种编码 |
| Price | 售卖报价 |
| BuyPrice | 门店回购价 |
| High | 日内最高 |
| Low | 日内最低 |
| Time | 行情更新时间 |
七、生产环境注意点
- WebSocket 空闲状态必须每 10 秒发送心跳包,否则服务端会主动关闭连接;
- HTTP 调用注意频率,不要高频循环请求,避免触发限流;
- 线上部署建议增加日志输出,把行情落库,方便后续查询;
- 切换其他品种,只需要修改编码,业务逻辑不用改动。
八、总结
这套代码解决融通金行情监听的心跳、重连、解析问题,适合黄金门店系统、金价大屏等业务场景,更换品种编码即可适配白银、铂金等其他品类。
《Python WebSocket 实现融通金实时行情监听》 是转载文章,点击查看原文。
