03-数据获取接口与映射
本文档记录本项目数据获取层使用的接口、对应本地表、参数说明与备用接口。当前主数据源为 akshare(聚合抓取工具,本身不是数据源,聚合了东方财富、新浪、同花顺、雪球、理杏仁等上游),但数据获取层设计为可扩展,未来可接入 Tushare、Wind API、手工 CSV 导入等其他来源。
设计原则
数据获取层不绑定单一数据源,遵循以下原则:
- 接口抽象:fetcher 层对上只暴露
fetch_xxx标准函数,内部可切换 akshare / Tushare / 其他来源 - 主备接口:关键数据准备主备两个接口,主接口失败自动切备
- 本地库为可信源:所有分析基于本地 SQLite,不直接依赖外部接口实时调用
- 来源标注:每条数据可通过
source字段追溯获取渠道(宏观表已含 source 字段,其他表通过 fetcher 日志记录)
认知前提:akshare 的局限
akshare 是当前主数据源,但需认知其局限:
- 接口稳定性依赖上游:akshare 调用的上游网站接口可能变更或限流,akshare 版本更新可能跟不上
- 接口命名无强规范:不同接口的参数风格、返回字段、数据格式差异较大
- 接口可能随时失效:需要为关键数据准备备用接口
- 版本锁定必要:
requirements.txt锁定 akshare 版本,避免接口签名变化导致脚本失效
基于以上认知,所有外部接口调用集中在 fetcher_*.py 层,业务层不直接调用任何外部库。接口失效时只需修改 fetcher 层,不影响查询接口。
接口分类与映射总览
指数数据接口
dim_index 填充
index_daily 填充
index_valuation 填充
注意:理杏仁接口免费版可能有调用频率限制,高频更新需加 sleep。PE/PB 分位数由本地计算,不依赖 akshare。
基金数据接口
dim_fund 填充
fund_daily 填充(ETF)
fund_daily 填充(场外基金)
fund_holdings 填充
注意:持仓数据每季度披露,年度和半年度披露全部,季度披露前十大。date 参数传年份,返回该年所有季报数据。
股票数据接口
dim_stock 填充
stock_daily 填充
PE/PB 补充:
stock_financial 填充
行业数据接口
dim_industry 填充
industry_daily 填充
宏观数据接口
宏观指标分散在多个 macro_china_* 接口,按指标单独调用:
注意:宏观接口的返回字段名和格式不统一,fetcher 层需做字段标准化,统一写入 macro_indicator 表的 indicator_code/value 结构。
资金流向接口
接口版本锁定
requirements.txt 中锁定 akshare 版本:
升级 akshare 前必须跑一遍 update_all.py 的 dry-run 模式,验证接口签名未变化。接口失效时的应对见 04-数据更新与调度策略。
接口调用频率控制
akshare 调用上游网站接口,高频请求会触发限流。fetcher 层内置频率控制:
频率控制在 fetcher_*.py 的 fetch_with_retry 工具函数中统一实现,见 02-数据脚本。