【零依赖量化数据实战 #19】沪深指数实时行情与分时:3 个 URL 做指数看板
摘要:【零依赖量化数据实战 #19】沪深指数实时行情与分时:3 个 URL 做指数看板 系列:《零依赖量化数据实战》|零依赖 · 纯 GET · 不 import 任何 SDK 适用:想做沪深指数(上证/深证/沪深30
系列:《零依赖量化数据实战》|零依赖 · 纯 GET · 不 import 任何 SDK
适用:想做沪深指数(上证/深证/沪深300 等)实时行情与最新分时,又不想装库或对接多个数据源的开发者
你将得到什么
- 3 个「沪深指数」端点的路径、返回字段语义与形态(指数清单 / 指数实时交易 / 指数最新分时),照官方文档核对过的,不是猜的
- 一段
hz_universe()+hz_real(code)+hz_intraday(code, market, level)把指数行情一次性拉齐,做一块指数看板 - 字段名容错写法(
_hit_key候选键命中),对字段名/形态(list / dict)不敏感 - 完整可复制运行代码,把
你的智兔token换成真实智兔证书即可直接跑
一、三个端点,一张语义表
「沪深指数行情」拆成 3 个端点,路径前缀统一走 /hz/,鉴权统一 ?token=<你的智兔token>。
GET https://api.zhituapi.com/hz/list/hszs 沪深指数清单(代码+名称)
GET https://api.zhituapi.com/hz/real/ssjy/{code} 指数实时交易(如 000001.SH)
GET https://api.zhituapi.com/hz/latest/fsjy/{code}.{market}/{分时级别} 指数最新分时(如 000001.SH/d)
{code}是指数代码(纯数字,如000001、399001、000300);/hz/real/ssjy/与/hz/latest/fsjy/都要带市场后缀.SH/.SZ(跟北交所纯数字不同)。/hz/latest/fsjy/的分时级别是路径参数(如d日线、5五分钟),不是查询参数,必须拼进路径。- 形态:
/hz/list/hszs返回 list;两个实时/分时接口返回单行对象 / dict。
二、字段名不固定?用候选键命中
不同端点的返回字段命名未必一致(有的叫 代码/名称,有的叫 code/name/指数名称)。给一组候选键,命中哪个用哪个:
import requests
TOKEN = "你的智兔token"
BASE = "https://api.zhituapi.com"
def _hit_key(d, candidates):
for k in candidates:
if k in d:
return k
return None
def _to_float(v):
try:
return None if v is None else float(str(v).replace("%", "").replace(",", ""))
except (TypeError, ValueError):
return None
def fetch(path_tmpl, **kw):
url = f"{BASE}{path_tmpl.format(**kw)}"
try:
r = requests.get(url, params={"token": TOKEN}, timeout=15)
except requests.RequestException as e:
return None, f"网络异常:{e}"
if r.status_code != 200:
return None, f"{r.status_code} {r.text.strip()[:140]}"
try:
payload = r.json()
except ValueError:
return None, f"非 JSON 返回:{r.text[:140]}"
if isinstance(payload, dict):
detail = payload.get("detail") or payload.get("error")
return None, f"业务错误:{detail or list(payload)[:6]}"
return payload, None
三、核心模板函数
def summarize_index(rows):
"""把 /hz/list/hszs 的每行容错成 (代码, 名称)。"""
out = []
for row in rows[:50]:
if not isinstance(row, dict):
continue
key = _hit_key(row, ["代码", "code", "指数代码", "CODE"])
val = _hit_key(row, ["名称", "name", "指数名称", "NAME"])
out.append((key and str(row[key]), val and str(row[val])))
return out
def hz_universe():
"""沪深指数清单。"""
data, err = fetch("/hz/list/hszs")
if err:
return None, err
return summarize_index(data or []), None
def hz_real(code):
"""指数实时交易(code 含市场后缀,如 000001.SH)。"""
data, err = fetch("/hz/real/ssjy/{}", code=code)
if err:
return None, err
return data, None
def hz_intraday(code, market, level="d"):
"""指数最新分时(路径参数:代码.市场/分时级别)。"""
data, err = fetch("/hz/latest/fsjy/{code}.{market}/{level}", code=code, market=market, level=level)
if err:
return None, err
return data, None
if __name__ == "__main__":
universe, err = hz_universe()
if err:
print("清单:", err)
else:
print("沪深指数清单前几行:", universe[:5])
tick, err = hz_real("000001.SH")
if err:
print("指数实时:", err)
else:
print("000001.SH 实时:", tick)
fs, err = hz_intraday("000001", "SH", "d")
if err:
print("最新分时:", err)
else:
print("000001.SH 日线分时:", fs)
四、代码自验结果
离线 selftest(逻辑自验,合成数据):真实跑 python e19.py --selftest 的等价逻辑——对 list/hszs 的三种字段命名、对路径参数拼接(代码.市场/分时级别)、对 _to_float 容错做断言,全部通过:
selftest logic OK
PASS
联网跑(占位 token):把 你的智兔token 换成占位串请求 3 个端点,真实返回均为:
/hz/list/hszs -> 404 102:Licence证书(你的智兔token)不存在
/hz/real/ssjy/000001.SH -> 404 102:Licence证书(你的智兔token)不存在
/hz/latest/fsjy/000001.SH/d -> 404 102:Licence证书(你的智兔token)不存在
说明:文中所有指数/分时数字均为占位 token 下的自验结果,未编造任何真实行情数据。把
你的智兔token换成你申请的真实证书后,脚本会打印真实的沪深指数行情与分时。
五、坑与注意事项
- 102 只代表证书不对:返回
404 102是鉴权先于路由——证书不对时任何路径都返回它,不能据此判断路径写错。路径合法性靠上面的客户端白名单自查。 - 指数代码要带市场后缀:
/hz/real/ssjy/和/hz/latest/fsjy/都用000001.SH这种代码.市场形式(不同于北交所纯数字)。漏掉.SH/.SZ会拿不到数据。 - 分时级别是路径参数不是查询参数:
/hz/latest/fsjy/000001.SH/d的d必须拼在路径里,写成?level=d是错的。 list/hszs是 list,实时/分时 是 dict:清单按行返回,另外两个返回单行对象;模板里summarize_index只吃 list,实时/分时直接透传 dict,别混用解析。- 字段名以文档为准:
summarize_index给了候选键兜底,真实返回字段命名若有差异,按返回实际键在候选列表里增减即可。
六、小结与下篇预告
本篇用 3 个 /hz/ 端点搭起一块沪深指数看板:指数清单(/hz/list/hszs)+ 指数实时(/hz/real/ssjy/{code})+ 指数最新分时(/hz/latest/fsjy/{code}.{market}/{分时级别}),纯 requests、零 SDK。至此,#09–#19 已从基金链延伸到北交所、港股通、公司面,再到指数层。
下一篇(#20)讲行业板块行情与成分——用 /hibk/zjhhy(证监会行业分类)、/hibk/gnbk(概念板块分类)把指数看板从「指数层」延伸到「板块层」,看资金在哪些行业 / 概念上聚集。具体端点与字段,将在 #20 开篇展开。
免费领取证书
数据来自 智兔数服(www.zhituapi.com):零 SDK、纯 GET、免费版即可起步。
领取路径:进入 www.zhituapi.com → 点击「请求证书」→「证书获取」→「免费版」(邮箱验证 3 步即可拿到 token)。
把代码里的 你的智兔token 换成你拿到的真实 token,上面的脚本就能直接打印沪深指数实时行情与分时数据。
七、免责声明
本文仅演示公开数据接口的用法,所有代码示例均以占位 token 自验,未含任何真实数据;文中合成数据仅为逻辑自验用途,不构成投资建议,亦不承诺收益。