【智兔数服|别再到处找免费股票数据API:官方204个接口32篇讲透 #24】北交所行情去哪扒?9个接口,列表+实时+分时一次取
摘要:【智兔数服|别再到处找免费股票数据API:官方204个接口32篇讲透 #24】北交所行情去哪扒?9个接口,列表+实时+分时一次取 系列:智兔数服|别再到处找免费股票数据API:官方204个接口32篇讲透|连载项目 · 纯 GE
系列:智兔数服|别再到处找免费股票数据API:官方204个接口32篇讲透|连载项目 · 纯 GET 取数 · 仅依赖 requests
适用:做量化 / 选股 / 复盘,但还在手动导 CSV、网页复制、自写爬虫的读者。本篇给北交所行情的 9 个端点的分组地图、北交所列表/实时/分时的代码,全部只依赖 requests,所有示例均为演示数据,不构成投资建议。数据由智兔数服提供。
1. 你将得到什么
读完这一篇,你能拿走四样东西:
- 一张分组地图:9 个端点按用途分组,知道什么数据该敲哪个门;
- 一行取数的代码:主要端点一次返回,不用循环拼装;
- 北交所代码前缀与实时字段差异的坑;
- 三个真实踩坑点,都是第一次用几乎一定会踩的。
代码全部自包含,复制进 .py 直接能跑,不依赖 numpy / pandas。
2. 本篇取数约定
- 全部接口都是 GET + query 参数,token 放在查询串里(
?token=xxx); - 统一基址
https://api.zhituapi.com; - 代码块里的
你的智兔token是占位符,换成你的 token 即可; - 所有接口路径均取自官方已验证文档,跨篇零重复。
- 数据来自 智兔数服(www.zhituapi.com):零 SDK、纯 GET、免费版即可起步。
3. 9 个端点分 3 组
先建立地图。北交所行情一共 9 个端点,按用途分:
| 组 | 端点 | 用途 | 更新频率 |
|---|---|---|---|
| 列表 | /bj/list/all |
北交所列表 | 每日盘后 |
| 列表 | /bj/list/index |
北交所指数 | 每日盘后 |
| 实时 | /bj/stock/real/ssjy |
股票实时 | 实时 |
| 实时 | /bj/stock/real/mmwp |
五档盘口 | 实时 |
| 实时 | /bj/index/real/ssjy |
指数实时 | 实时 |
| 实时 | /bj/stock/real/zbjy |
逐笔交易 | 实时 |
| 历史 | /bj/history |
历史行情 | 每日盘后 |
| 历史 | /bj/pro/latest |
最新分笔 | 实时 |
| 历史 | /bj/pro/history |
历史分笔 | 每日盘后 |
4. 核心模板函数
import requests, time
from urllib.parse import quote
BASE = "https://api.zhituapi.com"
TOKEN = "你的智兔token"
# ---------- 1. 字段容错与类型归一 ----------
def _hit_key(d, *cands, default=None):
"""字段容错:接口偶发大小写/中英文混用时,按顺序取第一个非空值"""
if not isinstance(d, dict):
return default
for c in cands:
if c in d and d[c] not in (None, "", "-", "null"):
return d[c]
low = {str(k).lower(): v for k, v in d.items()}
for c in cands:
v = low.get(str(c).lower())
if v not in (None, "", "-", "null"):
return v
return default
def _to_float(v, default=None):
try:
if v in (None, "", "-", "null", "None"):
return default
return float(v)
except (TypeError, ValueError):
return default
# ---------- 2. 统一请求:重试 + 退避 ----------
def _get(path, params=None, timeout=10, retries=2, backoff=0.6, default=None):
"""返回 JSON;失败重试 retries 次仍失败则返回 {'_error': 原因}"""
q = {"token": TOKEN}
if params:
q.update(params)
last = ""
for i in range(retries + 1):
try:
r = requests.get(BASE + path, params=q, timeout=timeout)
if r.status_code == 200:
try:
return r.json()
except ValueError:
return default
last = "HTTP %s %s" % (r.status_code, (r.text or "").strip()[:80])
except Exception as e:
last = "%s: %s" % (type(e).__name__, e)
if i < retries:
time.sleep(backoff * (i + 1))
return {"_error": last}
def fetch_bj_list_all(): return _get("/bj/list/all", default=[])
def fetch_bj_list_index(): return _get("/bj/list/index", default=[])
def fetch_bj_stock_real_ssjy(): return _get("/bj/stock/real/ssjy", default=[])
def fetch_bj_stock_real_mmwp(): return _get("/bj/stock/real/mmwp", default=[])
def fetch_bj_index_real_ssjy(): return _get("/bj/index/real/ssjy", default=[])
def fetch_bj_stock_real_zbjy(): return _get("/bj/stock/real/zbjy", default=[])
def fetch_bj_history(): return _get("/bj/history", default=[])
def fetch_bj_pro_latest(): return _get("/bj/pro/latest", default=[])
def fetch_bj_pro_history(): return _get("/bj/pro/history", default=[])
# ---------- 3. 校验 ----------
def run_check():
assert _hit_key({"Code": "000001", "Name": "平安银行"}, "code", "dm") == "000001"
assert _to_float("-") is None and _to_float("12.5") == 12.5
enc = "/x/%s" % quote("示例")
assert "示例" not in enc and "%" in enc
print("校验通过")
if __name__ == "__main__":
run_check()
print("-" * 62)
for name, path in [
("北交所列表", "/bj/list/all"),
("北交所指数", "/bj/list/index"),
("股票实时", "/bj/stock/real/ssjy"),
("五档盘口", "/bj/stock/real/mmwp"),
("指数实时", "/bj/index/real/ssjy"),
("逐笔交易", "/bj/stock/real/zbjy"),
("历史行情", "/bj/history"),
("最新分笔", "/bj/pro/latest"),
("历史分笔", "/bj/pro/history")
]:
data = _get(path, default=[])
if isinstance(data, dict) and "_error" in data:
print("%-12s %-40s -> %s" % (name, path, data["_error"][:60]))
else:
print("%-12s %-40s -> %d 条" % (name, path, len(data)))
5. 跑通示例
把上面的代码复制到本地,填入你的 token 即可直接运行:它会请求对应接口、拉取真实数据,并输出各端点的条数(各字段含义见前文各小节)。
6. 坑与注意事项
坑 1:代码前缀不同。
北交所代码以 8/4 开头,和沪深不同,别混解析。
坑 2:实时字段略异。
北交所实时 /bj/stock/real/ssjy 与沪深实时字段略有差异。
坑 3:频率低。
北交所历史 /bj/history 频率低,盘后才有完整数据。
7. 小结与下篇预告
本篇把北交所行情类 9 个端点分成 3 组,给出列表/实时/分时的代码,并用 run_check 验证字段容错。
下一篇:《【智兔数服|别再到处找免费股票数据API:官方204个接口32篇讲透 #25】北交所财务技术指标难搞?12个接口,报表+MACD全拿》:用本篇同组接口,把下一类数据一次取全。
8. 免责声明
本文仅演示北交所行情数据的取数方法,所有代码示例均为演示数据,未含任何真实行情数值,不构成投资建议,亦不承诺收益。
免费领取证书
数据来自 智兔数服(www.zhituapi.com):零 SDK、纯 GET、免费版即可起步。
领取路径:进入 www.zhituapi.com → 点击「请求证书」→「证书获取」→「免费版」(邮箱验证 3 步即可拿到 token)。
把代码里的 你的智兔token 换成你拿到的真实 token,上面的脚本就能直接打印对应数据。