前言
在金融量化、行情展示、数据监控等场景中,稳定获取实时行情数据是核心需求。本文基于 Python 完整实现融通金行情数据对接,包含 WebSocket 实时数据推送、HTTP 实时行情、K 线数据、产品分类、订阅代码查询等全套接口,并提供可直接运行的代码示例,适合开发者快速接入与二次开发。
本文仅做技术实现分享,无任何推广意图,所有接口信息来自公开对接文档。
一、对接说明(必读)
- 接口分为两大类:WebSocket 实时推送 、HTTP 拉取接口,功能一致,实现其一即可。
- 所有接口支持 gzip 压缩,请求时带上
Accept-Encoding:gzip可提升速度。 - 接口有频率限制,对接时需注意限流逻辑,避免被封禁。
二、环境准备
安装依赖:
python
pip install requests websockets python-dotenv
三、接口总览
- WebSocket 实时数据推送(自动推送)
- HTTP 获取实时行情(主动拉取)
- 获取 K 线数据
- 查询产品分类
- 查询产品订阅代码
四、Python 实现:WebSocket 实时行情推送
python
import asyncio
import websockets
import json
import time
def get_timestamp():
return int(time.time())
async def rongtongjin_ws():
ws_url = "ws://39.107.99.235/ws"
while True:
try:
async with websockets.connect(ws_url) as websocket:
print("WebSocket 连接成功")
# 订阅产品(多个用英文逗号分隔)
subscribe = {"Key": "btcusdt,ethusdt"}
await websocket.send(json.dumps(subscribe))
while True:
# 心跳:每10秒发一次 ping
await asyncio.sleep(10)
ping_msg = {"ping": get_timestamp()}
await websocket.send(json.dumps(ping_msg))
# 接收推送数据
try:
response = await websocket.recv()
data = json.loads(response)
print("实时行情:", json.dumps(data, ensure_ascii=False, indent=2))
except:
continue
except Exception as e:
print("断开重连...", e)
await asyncio.sleep(3)
if __name__ == "__main__":
asyncio.run(rongtongjin_ws())
功能说明
- 自动断线重连
- 10 秒心跳保活
- 支持多产品同时订阅
- 实时接收最新价、买卖盘、成交量、涨跌额等数据
五、Python 实现:HTTP 实时行情接口
python
import requests
headers = {
"Accept-Encoding": "gzip"
}
def get_realtime_quote(code="btcusdt"):
url = f"http://39.107.99.235:1008/getQuote.php?code={code}"
try:
resp = requests.get(url, headers=headers, timeout=5)
if resp.status_code == 200:
return resp.json()
except Exception as e:
print("请求失败:", e)
return None
if __name__ == "__main__":
data = get_realtime_quote("btcusdt")
print(data)
限流规则
- 单个产品每秒最多 3 次
- 多产品按数量叠加:N 个产品 → 每秒最多 3*N 次
六、Python 实现:获取 K 线数据
python
def get_kline(code="fx_sgbpusd", time_frame="1m", rows=40):
url = f"http://39.107.99.235:1008/redis.php?code={code}&time={time_frame}&rows={rows}"
try:
resp = requests.get(url, headers={"Accept-Encoding": "gzip"}, timeout=5)
return resp.json()
except Exception as e:
print("K线请求失败:", e)
return None
if __name__ == "__main__":
kdata = get_kline(code="fx_sgbpusd", time_frame="1m", rows=20)
print(kdata)
支持周期
1m、5m、15m、30m、1h、1d、1M- 各周期数据条数有限制,代码中已做兼容。
七、Python 实现:产品分类 + 订阅代码
1. 获取产品分类
python
def get_category():
url = "http://39.107.99.235:1008/getCategory.php"
resp = requests.get(url, headers={"Accept-Encoding": "gzip"})
return resp.json()
2. 获取产品订阅代码
python
def get_symbol_list(category=7, page=1, pageSize=20):
url = f"http://39.107.99.235:1008/getSymbolList.php?category={category}&page={page}&pageSize={pageSize}"
resp = requests.get(url, headers={"Accept-Encoding": "gzip"})
return resp.json()
八、返回字段说明(常用)
StockCode:产品代码Price:最新价Open:开盘价High:最高价Low:最低价LastClose:昨收价BP1/BV1:买一价 / 买一量SP1/SV1:卖一价 / 卖一量Diff:涨跌额DiffRate:涨跌幅TotalVol:成交量Depth:买卖盘深度BS:逐笔成交
九、注意事项(避坑指南)
- WebSocket 必须实现断线重连 与心跳。
- HTTP 接口严格遵守限流规则,防止被限制访问。
- 头部带上
Accept-Encoding:gzip提升速度、节省流量。 - 多产品订阅用逗号分隔,不要重复订阅。
- K 线与实时行情分开获取,WebSocket 不推送 K 线。
十、总结
本文通过 Python 完整实现了融通金行情数据的对接,覆盖:
- WebSocket 实时推送
- HTTP 实时行情
- K 线数据
- 产品分类
- 产品订阅代码
代码结构清晰、可直接运行,适合量化系统、行情看板、数据监控等场景快速集成。