FinDataHub 数据使用文档

金融数据平台 API 参考手册 — 涵盖快讯推送、行情查询、MCP 工具和数据库表结构

v2.0 · 2026-08-09 · 4 活跃数据源

系统概览

Web 前端 MCP Client Python SDK 外部 API 调用方 kuaixun-service 快讯推送 · 端口 8100 ws:// /api/v1 /api/v2 findatahub-client 行情查询 · 端口 8000 REST / MCP / SDK news_flash 快讯 + 统一整合表 fin_data_clean 清洗后统一 A 股行情 tushare_data TuShare 原始采集 (79表) akshare_data AKShare 原始采集 (31表) fetch → clean
端口 8100
kuaixun-service
多源财经快讯推送服务。4 活跃数据源 (财联社/华尔街见闻/新浪/格隆汇),每分钟轮询,WebSocket 实时推送,四层去重。
端口 8000
findatahub-client
A 股行情数据查询服务。REST API + Python SDK + MCP Server 三种接入方式,直连清洗后数据库。
推荐路径:快讯推送用 /api/v2/news/live(单表,已去重),行情查询用 Python SDK Client.daily() 或 MCP get_daily_data。

快讯数据 API

Base URL: http://127.0.0.1:8100

V2 统一接口(推荐)

从 news_unified 单表读取已去重数据,性能优于 V1 的 12 分表 UNION。

方法路径参数说明
GET /api/v2/news/live limit(1-200,50) offset(≥0) source start end tag importance 分页实时快讯
GET /api/v2/news/search q(必填) limit(1-50,20) 全文搜索
GET /api/v2/news/stats — 统计概览
GET /api/v2/news/heat — 重要性分布
GET /api/v2/news/tags limit(1-100,50) 热门标签
GET /api/v2/news/summary date(YYYY-MM-DD) 当日 AI 摘要

V2 响应字段 (news_unified)

id
BIGINT
统一记录 ID
title
VARCHAR(512)
快讯标题
content
TEXT
正文内容
summary
VARCHAR(256)
AI 摘要
source_list
JSON
多源信息 {"sources":[{"source","source_news_id","url"}]}
source_count
INT
来源数量(≥2 即被多源交叉验证)
tags
JSON
AI 标签数组,跨源合并去重
importance
INT(0-5)
AI 重要性评分
published_at
DATETIME
发布时间
first_seen_at
DATETIME
首次采集时间
content_hash
CHAR(32)
MD5 精确指纹
simhash
BIGINT
64-bit SimHash 指纹

V1 兼容接口(无需鉴权)

方法路径参数说明
GET/api/v1/news/livelimit offset source start end tag importance分页快讯 (UNION 分表)
GET/api/v1/news/searchq limit全文搜索 (60 req/min)
GET/api/v1/news/stats—统计概览
GET/api/v1/news/tagslimit热门标签
GET/api/v1/news/heat—热度分布
POST/api/v1/news/favoriteBody: {"source_code","news_id"}切换收藏
GET/api/v1/news/favoriteslimit offset收藏列表

WebSocket 实时推送

连接: ws://127.0.0.1:8100/ws/live?key={API_KEY}

方向消息说明
服务端 → 客户端{"type":"new_news","inserted":N,"pushed":N}有新快讯入库
服务端 → 客户端{"type":"status","connections":N}当前连接数
客户端 → 服务端"ping"心跳 → 响应 "pong"
鉴权:WebSocket 通过 URL query ?key= 参数鉴权,与 HTTP X-API-Key 共用同一密钥。前端通过 import.meta.env.VITE_WS_KEY 注入。

行情数据 API

Base URL: http://127.0.0.1:8000

REST API

方法路径参数说明
GET/api/v1/daily/{ts_code}start_date(必填) end_date fields(csv) with_returns limit(1-50000)单股票日线 OHLCV
POST/api/v1/daily/batchBody: {"ts_codes":[...],"start_date","end_date","fields":null}批量日线
GET/api/v1/tables—列出所有数据表
GET/api/v1/tables/{name}/schema—表结构
GET/api/v1/tables/{name}/meta—表元数据
GET/api/v1/quality/{table_name}—数据质量分
GET/api/v1/stats—数据库统计
GET/api/v1/health—健康检查
GET/api/v1/health/dashboardsource(tushare/akshare/sina)数据源健康仪表盘
GET/api/v1/health/historyhours(默认168)7天健康趋势

MCP 工具 (Stdio)

协议: MCP 2024-11-05 · 鉴权: MCP_TOKEN 环境变量 (可选)

工具名必填参数可选参数说明
get_daily_datats_codestart_date end_date with_returns data_source limitA 股日线 OHLCV
get_weekly_datats_codestart_date end_dateA 股周线
get_monthly_datats_codestart_date end_dateA 股月线
get_financial_indicatorts_codestart_date end_date limit财务指标 (ROE/ROA/EPS)
search_stockkeywordlimit按名称/代码搜索股票
get_data_quality—table_name show_issues数据质量查询
get_stats——数据库统计概览

Python SDK

# pip install findatahub-client  (或本地 pip install -e .)
from findatahub import Client

client = Client(database="fin_data_clean")

# A 股日线行情
df = client.daily("000001.SZ", start_date="20260101")
print(df.columns)  # ['ts_code','trade_date','open','high','low','close','pre_close','vol','amount','pct_chg']

# 批量查询
df = client.daily_batch(
    ["000001.SZ", "600519.SH"],
    start_date="20260101", end_date="20260801"
)

# 周线/月线
df_w = client.weekly("000001.SZ", start_date="20250101")
df_m = client.monthly("000001.SZ")

# 财务指标
df = client.fina_indicator("000001.SZ", limit=10)

# 搜索股票
df = client.search_stock("平安")

# 数据质量
score = client.quality_score("stock_daily")
stats = client.stats()  # 各表行数 + 质量分

# 导出
path = client.export("stock_daily", fmt="csv")  # → ~/Downloads/findatahub_stock_daily.csv

数据库表结构

快讯系统 (news_flash)

news_unified — 统一快讯整合表 (Silver 层)

所有活跃源的快讯经四层去重后写入此表。V2 API 直接从此表读取。

字段类型约束说明
idBIGINTPK AI主键
content_hashCHAR(32)UNIQUEMD5(title+前200字) — L1 精确去重
simhashBIGINT UNSIGNEDINDEX64-bit SimHash — L2 近似去重
titleVARCHAR(512)NOT NULL快讯标题
contentTEXT正文
summaryVARCHAR(256)AI 摘要
source_listJSONNOT NULL多源信息数组
source_countINT来源数
tagsJSONAI 标签 (跨源合并)
importanceINTAI 评分 0-5
published_atDATETIME发布时间
first_seen_atDATETIME首次采集时间
last_seen_atDATETIME最近采集时间

快讯分表 (Bronze 层)

每个数据源一张分表,结构相同。活跃源: news_cls, news_wallstreetcn, news_sina, news_gelonghui, news_10jqka, news_hotlist

字段类型说明
idBIGINT PK AI主键
source_news_idVARCHAR(50) UNIQUE来源新闻 ID — L4 去重键
titleVARCHAR(500)标题
contentTEXT正文
tagsJSONAI 标签
importanceINT DEFAULT 0AI 评分
urlVARCHAR(500)原文链接
published_atBIGINT发布时间 (ms 时间戳)

行情系统 (fin_data_clean)

stock_daily — A 股日线 (统一清洗 Schema)

TuShare + AKShare 双源合并清洗后的标准日线数据。

字段类型说明
ts_codeVARCHAR(16) PK股票代码 (TuShare 格式,如 000001.SZ)
trade_dateVARCHAR(10) PK交易日 YYYYMMDD
openDOUBLE开盘价
highDOUBLE最高价
lowDOUBLE最低价
closeDOUBLE收盘价
pre_closeDOUBLE昨收价
volDOUBLE成交量 (手)
amountDOUBLE成交额 (元)
pct_chgDOUBLE涨跌幅 (%)
data_sourceVARCHAR(16)来源: tushare / akshare / merged
is_validatedTINYINT(1)是否通过双源交叉验证
raw dbs:tushare_data (79 表) 和 akshare_data (31 表) 存原始采集数据,含 A 股日/周/月线、财务指标、资金流、指数、板块行情、宏观指标、基金、期货等。完整清单见 tables_registry.json。

使用示例

Curl — 获取最新快讯

# 最新 20 条 (V2)
curl -s "http://127.0.0.1:8100/api/v2/news/live?limit=20" | python3 -m json.tool

# 筛选高重要性快讯
curl -s "http://127.0.0.1:8100/api/v2/news/live?limit=20&importance=4"

# 按来源筛选
curl -s "http://127.0.0.1:8100/api/v2/news/live?limit=20&source=cls"

# 关键词搜索
curl -s "http://127.0.0.1:8100/api/v2/news/search?q=降准&limit=10"

# 统计概览
curl -s "http://127.0.0.1:8100/api/v2/news/stats"

Curl — 查询行情数据

# 平安银行 2026 年日线
curl -s "http://127.0.0.1:8000/api/v1/daily/000001.SZ?start_date=20260101" | python3 -m json.tool

# 批量查询
curl -s -X POST "http://127.0.0.1:8000/api/v1/daily/batch" \
  -H "Content-Type: application/json" \
  -d '{"ts_codes":["000001.SZ","600519.SH"],"start_date":"20260701","end_date":"20260801"}'

# 数据质量
curl -s "http://127.0.0.1:8000/api/v1/quality/stock_daily"

# 健康检查
curl -s "http://127.0.0.1:8000/api/v1/health"

Python — 快讯 + 行情联动

import httpx
import pandas as pd

# 1. 获取高重要性快讯
resp = httpx.get("http://127.0.0.1:8100/api/v2/news/live",
                  params={"importance": 4, "limit": 50})
news = resp.json()["data"]
print(f"高重要性快讯: {len(news)} 条")

# 2. 从快讯中提取股票代码
import re
codes = set()
for n in news:
    found = re.findall(r'\b(\d{6}\.(?:SZ|SH))\b', n["title"])
    codes.update(found)

# 3. 批量查询这些股票的行情
if codes:
    resp2 = httpx.post("http://127.0.0.1:8000/api/v1/daily/batch",
                       json={"ts_codes": list(codes),
                             "start_date": "20260801"})
    df = pd.DataFrame(resp2.json()["data"])
    print(f"行情数据: {len(df)} 行")
    print(df[["ts_code", "close", "pct_chg"]].head())

JavaScript (前端) — WebSocket 实时推送

// 连接 WebSocket
const wsKey = import.meta.env.VITE_WS_KEY || '';
const ws = new WebSocket(`ws://127.0.0.1:8100/ws/live?key=${encodeURIComponent(wsKey)}`);

ws.onmessage = (e) => {
  const { type, inserted, pushed } = JSON.parse(e.data);
  if (type === 'new_news') {
    console.log(`新快讯: ${inserted} 条入库, ${pushed} 条推送`);
    // 拉取最新数据
    fetch('/api/v2/news/live?limit=10').then(r => r.json()).then(render);
  }
};

// 心跳保持
setInterval(() => ws.send('ping'), 30000);

数据管道流程

Fetch 4 活跃源 60s 轮询 Dedup L1 exact → L2 simhash → L3 jaccard Unify 同源合并 → news_unified AI Score 重要度 0-5 + 标签 Push WebSocket 广播 前端
行情管道:TuShare / AKShare 双源采集 → Cleaner 清洗 → QualityGate 四级校验 → CrossValidator 交叉验证 → fin_data_clean.stock_daily upsert。

鉴权体系

接口层鉴权方式适用场景
公开 API (v1/v2)无需鉴权前端页面、公开查询
内部 APIX-API-Key Header采集器管线、内部服务间调用
外部 APIX-API-Key + .api_keys.json 验证第三方客户端接入
WebSocketURL query ?key=浏览器实时推送
MCP ServerMCP_TOKEN 环境变量 (可选)AI Agent 工具调用
采集器控制仅本地 (127.0.0.1) + X-API-Key/api/v1/collector/*
API_KEY 持久化:首次启动自动生成并保存至 ~/Library/Application Support/findatahub/.api_key (chmod 600),重启后复用。可通过 API_KEY 环境变量覆盖。