Python WebSocket 实现融通金实时行情监听

一、业务背景

黄金回收、珠宝门店系统开发中,融通金报价是很常用的数据来源。本文使用 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 行情更新时间

七、生产环境注意点

  1. WebSocket 空闲状态必须每 10 秒发送心跳包,否则服务端会主动关闭连接;
  2. HTTP 调用注意频率,不要高频循环请求,避免触发限流;
  3. 线上部署建议增加日志输出,把行情落库,方便后续查询;
  4. 切换其他品种,只需要修改编码,业务逻辑不用改动。

八、总结

这套代码解决融通金行情监听的心跳、重连、解析问题,适合黄金门店系统、金价大屏等业务场景,更换品种编码即可适配白银、铂金等其他品类。

相关推荐
咩咩啃树皮2 小时前
JavaScript 中 this 指向为什么总在变?
开发语言·前端·javascript
程序员清风2 小时前
算法题中的边界条件、测试与调试
开发语言·算法·kotlin
砚底藏山河2 小时前
python量化实操:冷热分层存储
java·开发语言·python·金融
十五年专注C++开发2 小时前
pybind11:一个跨C++和Python平台的编程库
开发语言·c++·python·pybind11
CodeYp20192 小时前
第11讲:stack 和 queue
开发语言·c++·queue·stack
炘爚3 小时前
数据结构算法总结
数据结构·python·算法
信誓旦旦的程序猿3 小时前
【Python量化实战宝典 #18】MACD 金叉死叉手册:DIF、DEA、柱体全拆解(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
Patrick在香港3 小时前
一个加 1 的动作,把最大值变成了最小值
python·numpy·数据类型·整数溢出·数据精度
咩咩啃树皮3 小时前
JavaScript 异步流程为什么容易失控?从回调到可维护设计
开发语言·javascript·ecmascript
沫璃染墨3 小时前
《Qt从零入门系列(十五):Qt线程安全与锁机制详解——从QMutex到RAII与读写锁实战》
开发语言·c++·qt·安全·交互·线程·qt6.3