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. 切换其他品种,只需要修改编码,业务逻辑不用改动。

八、总结

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

相关推荐
weixin_3077791332 分钟前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
一水鉴天4 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel4 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
海绵宝宝转agent4 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭4 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT4 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
Wang's Blog5 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_962071575 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境6 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
\光辉岁月/6 小时前
5.java-数组
java·开发语言