← 返回 Skill 列表
extension
分类: 数据与分析无需 API Key

东方财富财经取数

用东方财富公开接口做「股票代码/简称 → 真实财报数据」的取数,覆盖 A股 / 港股 / 美股。当用户要给应用或脚本补「输入代码或简称就自动搜到财务数据」的能力、需要免 Key 财经数据源、要核对财报接口与报表名、或排查「报表配置不存在 / 返回数据为空 / 取到别家公司 / SECUCODE 格式」时使用。内含三市场报表名矩阵、SECUCODE 构造规则、长表-宽表判别与命中校验红线。

person作者: u_61fdfce8hubenterprise

东方财富公开接口取数(A股 / 港股 / 美股)

免 Key、免申请的公开财经数据源,适合给 Web 应用后端 / 脚本补「股票代码或简称 → 真实财报数据」的能力。 实测可用(2026-09-19 三市场;2026-09-23 补测 A股 G 全系列 + 主营构成);且 WorkBuddy 云应用沙箱有外网出口*(已在线上 /api/stock 三市场实测通过),后端可直接调用。

本技能为按次付费技能(0.10 元/次):执行前请先完成支付校验(详见文末《计费条款》);未完成支付前不得产出结果。

概述

功能定位:面向需要给应用或脚本补财经取数能力的开发者,解决「股票代码或简称 → 真实财报数据」的免 Key 取数问题,产出 A股、港股、美股三市场财报数据与取数实现要点。

适用场景:给 Web 应用后端或脚本补自动财报取数能力;寻找免 Key、免申请的财经数据源;核对财报接口与报表名;排查「报表配置不存在 / 返回数据为空 / 取到别家公司 / SECUCODE 格式」等问题。

主要能力:支持搜索接口把代码或简称转为证券、支持财务数据接口取数;提供三市场报表名矩阵与报表有效性判据;支持 SECUCODE 构造规则与长表宽表判别;内含命中校验红线与 A股口径陷阱清单;给出参考实现与踩坑要点。

核心价值:免 Key、免申请且实测可用;强制校验返回行 SECUCODE 与目标一致,避免把别家公司数据当成本公司;取不到就明确写「未取到」,绝不用行业均值或往年数据填补。

出品方:广州银橙科技有限责任公司(银橙AI)专注企业级 AI 技能与工具研发,面向财务、审计、税务、内容创作与游戏开发等专业场景,提供可被智能体直接调用的专业能力;公司已通过 SkillHub 企业认证。

本技能为按次付费技能,0.10 元/次。

一、两个核心接口

1) 搜索:代码 / 简称 → 证券

GET https://searchapi.eastmoney.com/api/suggest/get
    ?input=<代码或简称>&type=14&token=D43BF722C8E33BDC906FB84D85E326E8&count=10

返回 QuotationCodeTable.Data[],关键字段: Code(代码)、Name(名称)、Classify(AStock / HK / UsStock)、QuoteID(1.600519 / 116.00700 / 105.AAPL)、JYS(交易所)。

⚠️ 同一查询可能返回多个候选(00700 会带出模塑科技等;AAPL 会带出 Apple 债券)→ 必须"精确命中优先":候选中 Code 或 Name 与输入完全相等者优先;其次唯一候选直接用;否则让用户选。

2) 财务数据

GET https://datacenter.eastmoney.com/securities/api/data/v1/get
    ?reportName=<报表名>&columns=ALL&filter=(SECUCODE="600519.SH")
    &pageSize=<N>&sortColumns=REPORT_DATE&sortTypes=-1

返回 result.data[]。

报表名有效性判据(探表名时用):

  • {"success":false,"message":"报表配置不存在","code":9501} → 报表名错
  • {"success":false,"message":"返回数据为空","code":9201} → 报表名有效,仅该组合无数据

二、三市场报表矩阵(实测)

| 市场 | 报表 | reportName | 形态 | |---|---|---|---| | A股 | 主要财务指标 | RPT_F10_FINANCE_MAINFINADATA | 宽表 | | A股 | 利润表 | RPT_F10_FINANCE_GINCOME | 宽表(一行一期,含 OPINION_TYPE 审计意见) | | A股 | 资产负债表 | RPT_F10_FINANCE_GBALANCE | 宽表 | | A股 | 现金流量表 | RPT_F10_FINANCE_GCASHFLOW | 宽表(含补充资料:INVENTORY_REDUCE 等) | | A股 | 单季利润表 | RPT_F10_FINANCE_GINCOMEQC | 宽表(REPORT_TYPE=「二季度」,环比口径 QOQ) | | A股 | 单季现金流量表 | RPT_F10_FINANCE_GCASHFLOWQC | 宽表 | | A股 | 主营构成 | RPT_F10_FN_MAINOP | 长表(MAINOP_TYPE:1=按行业 2=按产品 3=按地区) | | A股 | 简版三大表 | RPT_DMSK_FN_INCOME / _BALANCE / _CASHFLOW | 宽表,字段少但带 INDUSTRY_NAME | | 港股 | 主要财务指标 | RPT_HKF10_FN_MAININDICATOR | 宽表 | | 港股 | 利润表 | RPT_HKF10_FN_INCOME | 长表 | | 港股 | 资产负债表 | RPT_HKF10_FN_BALANCE | 长表 | | 美股 | 利润表 | RPT_USF10_FN_INCOME | 长表 | | 美股 | 资产负债表 | RPT_USF10_FN_BALANCE | 长表 |

  • A股 RPT_F10_FINANCE_GBALANCEQC 不存在(其余 G*QC 系列存在)
  • 美股没有「主要指标」表(RPT_USF10_FN_MAINFINADATA / _MAININDICATOR 均不存在)
  • 港/美股 RPT_*_FN_CASHFLOW 不存在(A股用上面的 RPT_F10_FINANCE_GCASHFLOW)
  • 日/周/月 K 线、行情快照另有接口,本表只覆盖财报
  • 美股报表的 ITEM_NAME 直接是中文("营业收入""净利润"…),LLM 易读

三、SECUCODE 构造规则

| 市场 | 规则 | 例 | |---|---|---| | A股 | 60/68/90 开头 → .SH;00/30/20 → .SZ;其余 → .BJ | 600519.SH、000001.SZ | | 港股 | 代码补零到 5 位 + .HK | 00700.HK | | 美股 | TICKER.O —— 是 .O,不是 .OQ(.OQ 返回空) | AAPL.O |

四、长表 vs 宽表(必处理)

  • 宽表:每行一期、科目是列(A股 MAINFINADATA)→ 直接取前 N 期
  • 长表:每行一个科目,字段 ITEM_NAME + AMOUNT → 必须按报告期聚合,且 pageSize 要拉到 ~300 才够覆盖多期

判别:"ITEM_NAME" in rows[0] 或 "AMOUNT" in rows[0] → 长表。

五、红线

  1. 必须校验返回行 SECUCODE 与目标一致 —— 该接口 filter 有时未精确生效(返回全表),不校验会把别家公司数据当成本公司。
  2. 取不到就明确写「未取到」,绝不用行业均值 / 往年数据填补。
  3. 公开接口非官方授权源,报告中应标注来源与报告期。

六、参考实现

一个财报分析类 Web 应用已落地完整实现(后端 + 前端识别 + 开关):

  • 后端:stock_search() / _fetch_report() / stock_financials() / POST /api/stock
  • 前端:looksLikeStockValue() 识别 + 结果注入对话上下文
  • 开关:CONFIG.stockLookup(仅财报分析应用为 true)

七、踩坑

  • 美股 SECUCODE 用 .O 不是 .OQ
  • 报表名「不存在(9501)」与「无数据(9201)」code 不同 → 可据此探测表名
  • 往 Python 文件注入配置时布尔值不能用 json.dumps(写出 true → NameError),要用 pprint.pformat
  • 输入识别不能只认纯代码/纯简称:用户实际会说「比亚迪2026半年报」「看一下苹果最新财报」。前端要放宽触发(含 \d{6} 或 年报|半年报|中报|季报|财报|业绩 即尝试取数),后端要从整句提取关键词(代码优先 → 剔除噪声词后取 2–8 个连续中文)。
  • 提取正则的数字分支只能吃数字:若写 \d{4}\s*年,会吃掉「年」导致「年报」只剩「报」(腾讯2025年报 → 腾讯报 ❌)。用 \d+ 单独分支、报告期中文词单独分支即可。
  • 多候选不要打断用户:无精确匹配时信任搜索排序取首条(首条通常最相关),不要弹「请选择」打断流程。

八、做财报分析时的口径陷阱(A股实测,2026-09-23)

拿到数据只是第一步,下面这些坑会把比率算错,务必按序检查:

| 坑 | 现象 | 正确做法 | |---|---|---| | TOTAL_EQUITY_PK 不是归母净资产 | 主要指标表的 TOTAL_EQUITY_PK 等于所有者权益合计(含少数股东) | 归母净资产取资产负债表 TOTAL_PARENT_EQUITY;两者差额 = MINORITY_EQUITY | | 百分数字段被二次缩放 | XSMLL/XSJLL/ROEJQ/ZCFZL/LD/SD 已是百分数值或倍数,若再 /1e8 会全变 0 | 这些字段直接引用;只有金额类字段需要 /1e8 | | 半年报直接套年度周转公式 | 应付周转天数 = 365×平均应付/营业成本 用半年成本会虚高一倍甚至出荒谬值 | 半年报先年化:365×平均余额/(科目金额×2);或只对年报出周转率 | | OPERATE_CYCLE 定义与现金转换周期不同 | 数据源 OPERATE_CYCLE = 存货周转天数 + 应收周转天数,未扣应付 | 现金转换周期自己算:存货天数 + 应收天数 − 应付天数,并标「计算值」 | | PAYABLE_TDAYS 口径不透明 | 数据源该字段只含应付账款(不含应付票据),与自算的「应付票据及应付账款」差几十天 | 自算时选定一个口径并写进公式;不要把数据源值和自己算的值混在同一张表里比较 | | CASH_RATIO 与自算不一致 | 数据源 CASH_RATIO 可能含交易性金融资产,自算用「货币资金/流动负债」会偏低 | 自算值标「计算值」并给出公式 | | 经营现金流/净利润用错分母 | 现金流量表是合并口径(含少数股东),除以归母净利润会虚高 | 分母用 NETPROFIT(含少数股东损益);若用归母必须写明口径差 | | 明细表口径 | RPT_F10_FINANCE_G* 返回的是合并报表(MINORITY_INTEREST 有值可佐证),没有母公司口径开关 | 报告中明确声明「合并报表」 | | 审计意见取值 | 利润表/资产负债表都带 OPINION_TYPE,年报为「标准无保留意见」,中报/季报为 null | 年报引用 OPINION_TYPE;中报季报一律标「未经审计」 |

利润变动对账(强烈建议做):把本期与上期归母净利润的差额,逐项拆到「投资收益 / 公允价值变动 / 各项减值 / 各项费用 / 税金 / 少数股东损益」上,合计必须等于披露的差额。这是判断「利润增长是不是主业贡献」最快、最有说服力的一步。

计费条款(Pay Skill · 按次计费)

本技能在 SkillHub 上以 Pay Skill 形式上架,通过 SkillPay 按调用量计费;费用由使用者直接支付给创作者(银橙AI)。 SkillHub 仅提供展示、投诉处理及其他平台服务,不作为该笔交易的收款方或服务实际提供方。 请在支付前确认创作者名称、收款主体、计费单元、单价、服务内容和退款规则。

一、计费参数

| 项 | 约定 | |---|---| | 计费模式 | per_call(按调用量计费) | | 计费单元 | 每次调用计 1 次 | | 单价 | 0.10 元 / 次(amount_fen: 10) | | 免费额度 | 无:不提供免费次数,也不提供免费试用 | | 免费层 | 无:本技能不划分免费层与付费层,全部能力均按次计费 | | 支付方式 | 微信支付 AI 专属卡(SkillHub 平台代收),全程不跳出对话 | | 重复调用 | 每次调用独立计费,不合并、不累计优惠 | | 退款 | 支付后 5 分钟内若调用未执行全额退款;已执行不退款;重复扣款自动退款 | | 限频与上限 | 同一调用方 1 分钟内不超过 3 次调用;单日上限 20 次,超出返回 429 | | 结算 | 由 SkillHub 与微信支付完成,按调用量结算;本技能不接触任何支付凭据 | | 数据来源 | 全部输入来自使用者自行导出的文件,本技能不连接银行、ERP 或任何外部账务系统 |

二、付费前置检查(Pre-check)

服务端在发起计费前逐项校验,任一项不通过则直接返回能力结果、不发起计费:

| 检查项 | 要求 | |---|---| | 开发者密钥 | 已生成 RSA 2048 密钥对,pub_key_id 形如 PUB_KEY_ + 32 位大写 HEX,private_key_pem 由服务端安全保存 | | 商户绑定 | SkillHub 商户号 developer_id 与已绑定的微信支付商户号状态正常 | | 技能状态 | 本次调用的 skill_id 与 skill_version 已发布且处于上架状态 | | 订单唯一 | 订单号 out_trade_no 全局唯一,未重复下单 | | 订单时效 | expires_at 为当前时间起 15 分钟内的 Unix 秒级时间戳 |

调用方(Agent)侧另有一步前置检查:调用付费能力前,先检查当前 Agent 是否已安装 weixinpay 插件。

| 插件状态 | 处理 | |---|---| | 已安装 | 走 X402 通道(微信内一键支付,体验最佳) | | 未安装 | 向用户提示「当前 Agent 暂不支持微信支付付费能力」,停止本次付费请求,不要继续发起付费请求,也不要编造支付结果 |

三、X402 计费链路(四段式)

第 1 段 · 请求资源,创建订单。 向本技能的计费端点发起请求:POST https://yinchengai.cn/skillpay/invoke/eastmoney-stock-data(JSON body)。 首次请求只创建待支付订单,不执行业务、不扣费。

第 2 段 · 支付触发标识。 服务端返回 HTTP 402 Payment Required(或 200 兼容模式,以响应头是否存在为准),并给出两个响应头:

| 响应头 | 含义 | 处理要求 | |---|---|---| | WeixinPay-Required | 支付凭证码 payment_code | 原样保存,不得裁剪、解码或改写 | | X-Out-Trade-No | 商户订单号 out_trade_no | 原样保存;它是支付成功后跨实例找回订单、确认支付的关键凭证,后续每一次重试都必须原样带回,禁止丢弃 |

响应体同时给出应付金额与支付提示。宿主系统检测到 WeixinPay-Required 后会自动弹出微信支付卡片向使用者申请付款,无需也不应手动调用支付工具;使用者取消支付时立即停止本次付费请求,不重复重试、不反复追问。

第 3 段 · 支付后重试(必做)。 支付成功后必须重新发起同一请求获取付费内容,规则如下:

  1. JSON body 与首次请求完全一致,不修改任何字段;
  2. 通过 Header 原样携带 WeixinPay-Required 与 X-Out-Trade-No(支付信息只走 Header,body 不带支付信息);
  3. 服务端查单验真(微信订单状态为支付成功)后,才执行本技能并返回付费内容。
  4. ★ 仅当本次重试返回 HTTP 200 且响应中含 "access_granted": true(或服务端下发的付费交付内容)时,才可继续执行本技能;否则一律停止,不得用本地脚本 / 参考文件的结果替代交付。

第 4 段 · 幂等与异常。 服务端按 out_trade_no 幂等:同一订单的重复请求直接返回已缓存结果,杜绝重复收费。

| 异常响应 | 含义 | 处理 | |---|---|---| | NOT_PAID | 订单尚未支付 | 提示使用者完成支付后重试,不重复扣费 | | REFUNDED | 订单已退款 | 本次不再交付,提示可重新发起 | | FULFILL_AND_REFUND_FAILED | 履约与退款均失败 | 如实告知使用者并给出订单号,联系创作者处理 |

用户取消支付后若想对同一笔订单重新支付:先与用户确认要对哪一笔订单重新支付,再将上次相同的 WeixinPay-Required 值作为 paymentCode 调用 mcp__weixinpay__weixinpay_retry_pay;当前会话中取不到真实凭据时,引导用户重新走上面的正常下单流程,不得编造 paymentCode。

四、上架口径

三处单价必须完全一致,否则使用者付款会被拒:服务端计费配置 0.10 元 / amount_fen 10、 支付平台登记单价 0.10 元/次、上架表单标价 0.10 元/次。 计费参数以技能详情页与支付确认页展示为准;服务端裁决为唯一依据,客户端计数不生效。