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