# 数据接口 & 数据源一览 ## 架构概览 ``` 前端 (fetch) → 后端 FastAPI (路由层) → 数据源服务层 → 第三方 API ``` - 前端统一走后端代理,前端不直接调第三方 - 每个接口有主源 + 备选降级,降级对前端透明 - 后端服务层有 SQLite 缓存(6-24h)和内存缓存(60s) --- ## 1. 股票搜索 `/api/stock/search` | 项目 | 内容 | |------|------| | 前端调用 | `fetchStockSearch(keyword)` → `src/lib/stock-api.ts` | | 路由 | `GET /api/stock/search?keyword=` → `routes/stock.py:12` | | 用途 | 模糊搜索股票(名称/代码/拼音) | **数据源:** | 优先级 | 源 | 方式 | 可靠性 | |--------|----|------|--------| | 主选 | 腾讯智能搜索 `smartbox.gtimg.cn` | HTTPS JSONP | ⭐⭐⭐⭐⭐ 稳定,覆盖全 | | 降级 | 腾讯行情接口 `qt.gtimg.cn` | HTTPS 文本 | ⭐⭐⭐⭐ 仅当 keyword=6位代码且搜索无结果时 | --- ## 2. 实时行情 `/api/stock/quote` | 项目 | 内容 | |------|------| | 前端调用 | `fetchStockQuote(code)` → `src/lib/stock-api.ts:137` | | 路由 | `GET /api/stock/quote?code=` → `routes/stock.py:38` | | 用途 | 获取当前实时价格、开盘价、昨收、最高最低、成交量额、盘口 | | 前端使用 | 股票详情页基本信息区(价格、涨跌幅、内外盘) | **数据源:** | 优先级 | 源 | 方式 | 可靠性 | |--------|----|------|--------| | 主选 | 腾讯行情 `qt.gtimg.cn` | HTTPS GBK文本 | ⭐⭐⭐⭐⭐ A股全量覆盖,无IP限流 | | 降级 | 无 | — | 无响应则返回 404 | **字段映射:** 名称、当前价、昨收、今开、最高、最低、成交量(手)、成交额(万)、外盘、内盘、涨跌额、涨跌幅 --- ## 3. 历史 K 线 / 每日行情明细 `/api/stock/history` | 项目 | 内容 | |------|------| | 前端调用 | `fetchStockHistory(code, days)` → `src/lib/stock-api.ts:182` | | 路由 | `GET /api/stock/history?code=&days=` → `routes/stock.py:49` | | 用途 | 日K前复权 OHLCV、涨跌幅、成交额 | | 前端使用 | K线图 + 每日行情明细表(涨跌幅列) | **数据源:** | 优先级 | 源 | API | 可靠性 | |--------|----|-----|--------| | **主选** | **东方财富 push2his** | `kline/get` (curl_cffi chrome120) | ⚠️ IP 限流严重,常被拒 | | **备选①** | **腾讯** | `web.ifzq.gtimg.cn` HTTPS | ⭐⭐⭐⭐⭐ 稳定可靠 | | **备选②** | **新浪** | `money.finance.sina.com.cn` HTTPS | ⭐⭐⭐ 偶有超时 | **当前实际工作源:** 腾讯(备选①) **增强字段(东方财富源独有,走腾讯时无):** - `turnover` — 成交额(元) - `amplitude` — 振幅(%) - `changePercent` — 涨跌幅(%)(腾讯已通过连续收盘价计算补齐) - `turnoverRate` — 换手率(%) > 东方财富 push2his kline/get 与 fund-flow 同域名但路径不同,kline/get 有额外反爬。 > 即使使用 curl_cffi + chrome120 指纹也无法绕过,暂不修复。 --- ## 4. 资金流向 `/api/stock/fund-flow` | 项目 | 内容 | |------|------| | 前端调用 | `fetchStockFundFlow(code, name, days)` → `src/lib/stock-api.ts:248` | | 路由 | `GET /api/stock/fund-flow?code=&name=&days=` → `routes/stock.py:147` | | 用途 | 日度主力净流入、超大单/大单/中单/小单明细、占比、累计值 | | 前端使用 | 每日行情明细表(主力净流入列 + 成交额列),资金流向图表 | **数据源:** | 优先级 | 源 | API | 可靠性 | |--------|----|-----|--------| | **主选** | **东方财富 push2his** | `fflow/daykline/get` (httpx) | ⭐⭐⭐⭐⭐ 稳定,无 IP 限流 | | **备选** | **MX 妙想 API** | `mkapi2.dfcfs.com` (HTTP POST + apikey) | ⚠️ 有每日配额,多 key 轮询+缓存 | **字段映射(东方财富):** ``` f51=日期, f52=主力净流入, f53=小单, f54=中单, f55=大单, f56=超大单 f57-f61=各占比%, f62=收盘价, f63=涨跌幅 ``` > MX API 当前保留为备选。配置 `MX_APIKEY` 或 `MX_APIKEY_{1-9}` 环境变量启用。 > MX 数据只有主力净流入 + 成交额,无大/中/小单拆分(拆分的比例是估算的)。 --- ## 5. 公司概况 `/api/stock/profile` | 项目 | 内容 | |------|------| | 前端调用 | `fetchCompanyProfile(code)` → `src/lib/stock-api.ts:337` | | 路由 | `GET /api/stock/profile?code=` → `routes/stock.py:80` | | 用途 | 公司全名、行业、高管、联系方式、注册信息、发行信息 | | 前端使用 | 股票详情页「公司概况」tab | **数据源:** | 优先级 | 源 | API | 可靠性 | |--------|----|-----|--------| | 主选 | 东方财富 F10 | `emweb.securities.eastmoney.com` HTTPS | ⭐⭐⭐⭐ 稳定,24h 缓存 | | 降级 | 无 | — | — | --- ## 6. 财务指标 `/api/stock/financial` | 项目 | 内容 | |------|------| | 前端调用 | `fetchFinancialData(code, years)` → `src/lib/stock-api.ts:415` | | 路由 | `GET /api/stock/financial?code=&years=` → `routes/stock.py:91` | | 用途 | 每股指标、盈利能力、成长能力、偿债能力、营运能力 | | 前端使用 | 股票详情页「财务分析」tab(表格+图表) | **数据源:** | 优先级 | 源 | API | 可靠性 | |--------|----|-----|--------| | 主选 | 东方财富数据中心 | `datacenter.eastmoney.com` HTTPS | ⭐⭐⭐⭐⭐ 稳定,6h 缓存 | | 降级 | 无 | — | — | --- ## 7. 主营构成 `/api/stock/business-segments` | 项目 | 内容 | |------|------| | 前端调用 | `fetchBusinessSegments(code, byType, years)` → `src/lib/stock-api.ts:382` | | 路由 | `GET /api/stock/business-segments?code=&by_type=&years=` → `routes/stock.py:119` | | 用途 | 收入构成(按产品/行业/地区)、成本构成、利润占比、毛利率 | | 前端使用 | 股票详情页「经营分析」tab(饼图) | **数据源:** | 优先级 | 源 | API | 可靠性 | |--------|----|-----|--------| | 主选 | 东方财富数据中心 | `datacenter.eastmoney.com` HTTPS | ⭐⭐⭐⭐⭐ 稳定,6h 缓存 | | 降级 | 无 | — | — | --- ## 8. 板块资金流向 `/api/sectors` | 项目 | 内容 | |------|------| | 前端调用 | `fetchSectors(type)` → `src/lib/stock-api.ts:461` | | 路由 | `GET /api/sectors?type=` → `routes/sectors.py:9` | | 用途 | 行业/概念板块列表,按主力净流入排序 | | 前端使用 | `/sectors` 板块资金流向页面 | **数据源:** | 优先级 | 源 | API | 可靠性 | |--------|----|-----|--------| | **主选** | **东方财富 push2** | `push2.eastmoney.com` (curl_cffi chrome120) | ⭐⭐⭐ 有 IP 限流,60s 内存缓存 + session 重建 | | **备选** | **AkShare** | `ak.stock_fund_flow_industry/concept` | ⭐⭐ 慢(同步调用),列名需适配 | **字段映射(东方财富 push2):** ``` f62=主力净流入, f184=主力净流入占比 f66/f69=超大单净流入/占比, f72/f75=大单净流入/占比 f78/f81=中单净流入/占比, f84/f87=小单净流入/占比 f70=成交额 ``` > push2.eastmoney.com 有较激进的 IP 限流。通过 curl_cffi 模拟浏览器 TLS 指纹 + 持久化 session + 60s 缓存 + 自动 UT 刷新 + session 重建来缓解。 --- ## 9. 估值数据(外部) > 股票详情页「估值分析」tab 的数据从外部服务加载(landing-page),不由后端代理。 --- ## 数据源总结 | 第三方源 | 域名 | 使用场景 | 限流情况 | 是否需要反爬 | |----------|------|---------|---------|------------| | **腾讯财经** | `qt.gtimg.cn`, `web.ifzq.gtimg.cn`, `smartbox.gtimg.cn` | 搜索、行情、K线 | 基本无限流 | ❌ | | **新浪财经** | `money.finance.sina.com.cn` | K线降级 | 宽松 | ❌ | | **东方财富 push2his** | `push2his.eastmoney.com` | 资金流向、K线 | **部分路径限流**(kline/get 被禁,fflow/daykline/get 正常) | ✅ 需 curl_cffi | | **东方财富 push2** | `push2.eastmoney.com` | 板块数据 | **IP 限流严重** | ✅ 需 curl_cffi | | **东方财富数据中心** | `datacenter.eastmoney.com` | 财务数据、主营构成 | 宽松 | ❌ | | **东方财富 F10** | `emweb.securities.eastmoney.com` | 公司概况 | 宽松 | ❌ | | **MX 妙想** | `mkapi2.dfcfs.com` | 资金流向备选 | 每日配额(113错误码) | ❌ | | **AkShare** | 同花顺/东方财富 | 板块降级 | 慢但无限制 | ❌ |