新增三大股东接口, 补充 SKILLS.md 使用说明书
- 新增 十大流通股东/十大股东明细/股东户数 三个抓取模块并接入 API - 冒烟测试扩展至 30 用例, 全部通过 - 新增 SKILLS.md (给其他 agent 使用的工具说明书) - 补充待优化端点清单与文档对齐规范
This commit is contained in:
@@ -274,3 +274,64 @@ Sec-Fetch-Mode: cors
|
||||
Sec-Fetch-Dest: empty
|
||||
Referer: https://emchoicew.eastmoney.com/
|
||||
Accept-Encoding: gzip, deflate, br
|
||||
|
||||
## 十大流通股东
|
||||
---
|
||||
GET /api/data/v1/get?source=CHOICE&reportName=RPT_F10_EH_FREEHOLDERS&columns=F10_FREEHOLDERS"eColumns=&pageNumber=&pageSize=&sortColumns=END_DATE,HOLD_NUM&client=SW&filter=(SECUCODE=%22603233.SH%22)(END_DATE%3E=%272024-01-01%27)(END_DATE%3C=%272026-12-31%27)&sortTypes=-1,-1 HTTP/1.1
|
||||
Host: datacenter-choice.eastmoney.com
|
||||
Connection: keep-alive
|
||||
sec-ch-ua: "Chromium";v="104"
|
||||
Accept: application/json
|
||||
version:
|
||||
sec-ch-ua-mobile: ?0
|
||||
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36
|
||||
token:
|
||||
sec-ch-ua-platform: "Windows"
|
||||
Origin: https://emchoicew.eastmoney.com
|
||||
Accept-Language: zh-CN,zh;q=0.9
|
||||
Sec-Fetch-Site: same-site
|
||||
Sec-Fetch-Mode: cors
|
||||
Sec-Fetch-Dest: empty
|
||||
Referer: https://emchoicew.eastmoney.com/
|
||||
Accept-Encoding: gzip, deflate, br
|
||||
|
||||
## 十大股东明细
|
||||
---
|
||||
GET /api/data/v1/get?source=CHOICE&reportName=RPT_DMSK_HOLDERS&columns=SECUCODE,SECURITY_CODE,ORG_CODE,SECURITY_TYPE_CODE,END_DATE,RANK,HOLDER_CODE,HOLDER_NAME,HOLD_NUM,HOLD_RATIO,HOLD_NUM_CHANGE,HOLD_RATIO_CHANGE,DIRECTION,SHARES_TYPE,HOLDER_NATURE,REPORT_TYPE,HOLD_CHANGE,NOTICE_DATE,HOLD_RATIO_YOY,REPORT_DATE_NAME,REFERENCE_MARKET_CAP"eColumns=&filter=(SECUCODE=%22603233.SH%22)(END_DATE%3E=%272022-01-01%27)(END_DATE%3C=%272026-12-31%27)&pageNumber=&pageSize=&sortTypes=-1,1&sortColumns=END_DATE,RANK&client=SW HTTP/1.1
|
||||
Host: datacenter-choice.eastmoney.com
|
||||
Connection: keep-alive
|
||||
sec-ch-ua: "Chromium";v="104"
|
||||
Accept: application/json
|
||||
sec-ch-ua-mobile: ?0
|
||||
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36
|
||||
sec-ch-ua-platform: "Windows"
|
||||
Origin: https://emchoicew.eastmoney.com
|
||||
Accept-Language: zh-CN,zh;q=0.9
|
||||
Sec-Fetch-Site: same-site
|
||||
Sec-Fetch-Mode: cors
|
||||
Sec-Fetch-Dest: empty
|
||||
Referer: https://emchoicew.eastmoney.com/
|
||||
Accept-Encoding: gzip, deflate, br
|
||||
|
||||
|
||||
|
||||
## 股东户数
|
||||
---
|
||||
GET /api/data/v1/get?source=CHOICE&reportName=RPT_F10_EH_HOLDERNUM&columns=CHOICEF9_EH_HOLDERNUM"eColumns=&filter=(SECUCODE=%22603233.SH%22)(END_DATE%3E=%272022-01-01%27)(END_DATE%3C=%272026-12-31%27)&pageNumber=&pageSize=&sortColumns=END_DATE&client=SW&sortTypes=-1 HTTP/1.1
|
||||
Host: datacenter-choice.eastmoney.com
|
||||
Connection: keep-alive
|
||||
sec-ch-ua: "Chromium";v="104"
|
||||
Accept: application/json
|
||||
version:
|
||||
sec-ch-ua-mobile: ?0
|
||||
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36
|
||||
token:
|
||||
sec-ch-ua-platform: "Windows"
|
||||
Origin: https://emchoicew.eastmoney.com
|
||||
Accept-Language: zh-CN,zh;q=0.9
|
||||
Sec-Fetch-Site: same-site
|
||||
Sec-Fetch-Mode: cors
|
||||
Sec-Fetch-Dest: empty
|
||||
Referer: https://emchoicew.eastmoney.com/
|
||||
Accept-Encoding: gzip, deflate, br
|
||||
|
||||
|
||||
+36
-1
@@ -253,6 +253,38 @@ curl "http://127.0.0.1:8765/fin/dividend-statics?stocks=603233.SH&years=5"
|
||||
|
||||
---
|
||||
|
||||
## 8. 股东数据(十大流通股东 / 十大股东明细 / 股东户数)
|
||||
|
||||
**公共参数**
|
||||
|
||||
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| `stocks` | string | ✅ | — | 逗号分隔股票代码,如 `603233.SH`。仅需代码,不需要 ORG_CODE |
|
||||
| `years` | int | | `3` | 拉取最近多少年的数据(1~20) |
|
||||
|
||||
**示例**
|
||||
|
||||
```bash
|
||||
# 十大流通股东
|
||||
curl "http://127.0.0.1:8765/fin/free-holders?stocks=603233.SH&years=3"
|
||||
|
||||
# 十大股东明细
|
||||
curl "http://127.0.0.1:8765/fin/holders?stocks=603233.SH&years=3"
|
||||
|
||||
# 股东户数
|
||||
curl "http://127.0.0.1:8765/fin/holder-num?stocks=603233.SH&years=3"
|
||||
```
|
||||
|
||||
**各接口常见列**
|
||||
|
||||
| 接口 | 常见列 |
|
||||
|---|---|
|
||||
| 十大流通股东 | `HOLDER_NAME`(股东名)、`HOLD_NUM`(持股数)、`HOLD_RATIO`、`FREE_HOLDNUM_RATIO`(占流通股比)、`HOLD_CHANGE` 等 |
|
||||
| 十大股东明细 | `RANK`(排名)、`HOLDER_NAME`、`HOLD_NUM`、`HOLD_RATIO`、`DIRECTION`(增减持方向)、`NOTICE_DATE` 等 |
|
||||
| 股东户数 | `HOLDER_TOTAL_NUM`(股东总数)、`HOLDER_TOTAL_NUMCHANGE`(户数增减)、`AVG_TOTAL_SHARES`(户均持股)等 |
|
||||
|
||||
---
|
||||
|
||||
## 接口一览
|
||||
|
||||
| 路径 | 功能 | 数据来源报表 |
|
||||
@@ -271,9 +303,12 @@ curl "http://127.0.0.1:8765/fin/dividend-statics?stocks=603233.SH&years=5"
|
||||
| `/fin/dupont` | 杜邦分析 | `RPT_HSF9_FINA_DUPONT` |
|
||||
| `/fin/dividend-detail` | 分红明细 | `RPT_HSF9_ASSIGNPLAN_DETAIL` |
|
||||
| `/fin/dividend-statics` | 分红统计 | `RPT_HSF9_ASSIGNPLAN_STATICS` |
|
||||
| `/fin/free-holders` | 十大流通股东 | `RPT_F10_EH_FREEHOLDERS` |
|
||||
| `/fin/holders` | 十大股东明细 | `RPT_DMSK_HOLDERS` |
|
||||
| `/fin/holder-num` | 股东户数 | `RPT_F10_EH_HOLDERNUM` |
|
||||
|
||||
## 测试
|
||||
|
||||
```bash
|
||||
uv run pytest tests/ -q # 冒烟测试: 连真实接口验证各模块能取到数据
|
||||
uv run pytest tests/ -q # 冒烟测试: 连真实接口验证各模块能取到数据 (30 用例)
|
||||
```
|
||||
|
||||
+11
-2
@@ -35,7 +35,10 @@ EMWebApi/
|
||||
│ ├── fin_operate.py # 营运能力
|
||||
│ ├── fin_growth.py # 成长能力
|
||||
│ ├── fin_dupont.py # 杜邦分析
|
||||
│ └── fin_dividend.py # 分红明细 + 分红统计
|
||||
│ ├── fin_dividend.py # 分红明细 + 分红统计
|
||||
│ ├── fin_free_holders.py # 十大流通股东
|
||||
│ ├── fin_holders.py # 十大股东明细
|
||||
│ ├── fin_holder_num.py # 股东户数
|
||||
├── tests/
|
||||
│ └── test_interfaces.py # 冒烟测试 (连真实接口)
|
||||
└── docs/
|
||||
@@ -65,6 +68,9 @@ EMWebApi/
|
||||
| 9 | 成长能力 | `CWFX_CZNL` → `RPT_HSF9_FINA_GROWTH` | ✅ 已实现 |
|
||||
| 10 | 杜邦分析 | `RPT_HSF9_FINA_DUPONT` | ✅ 已实现 |
|
||||
| 11 | 分红明细 + 分红统计 | `RPT_HSF9_ASSIGNPLAN_DETAIL` / `_STATICS` | ✅ 已实现 |
|
||||
| 12 | 十大流通股东 | `RPT_F10_EH_FREEHOLDERS` | ✅ 已实现 |
|
||||
| 13 | 十大股东明细 | `RPT_DMSK_HOLDERS` | ✅ 已实现 |
|
||||
| 14 | 股东户数 | `RPT_F10_EH_HOLDERNUM` | ✅ 已实现 |
|
||||
|
||||
**文档外补充**:财务摘要(报告期) 用 `RPT_CUSTOM_ORGF9_FIN_SUMMARY`,需 ORG_CODE(不在 api_docs.md 里)。
|
||||
|
||||
@@ -88,7 +94,10 @@ EMWebApi/
|
||||
| 成长能力 | `utils/fin_growth.py` | `GET /fin/growth` |
|
||||
| 杜邦分析 | `utils/fin_dupont.py` | `GET /fin/dupont` |
|
||||
| 分红明细 + 统计 | `utils/fin_dividend.py` | `GET /fin/dividend-detail` / `dividend-statics` |
|
||||
| 测试 | `tests/test_interfaces.py` | `uv run pytest tests/ -q` (24 用例) |
|
||||
| 十大流通股东 | `utils/fin_free_holders.py` | `GET /fin/free-holders` |
|
||||
| 十大股东明细 | `utils/fin_holders.py` | `GET /fin/holders` |
|
||||
| 股东户数 | `utils/fin_holder_num.py` | `GET /fin/holder-num` |
|
||||
| 测试 | `tests/test_interfaces.py` | `uv run pytest tests/ -q` (30 用例) |
|
||||
|
||||
### 🧹 待清理
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
- 每次更新需要需要检查
|
||||
- 代码和文档的对齐
|
||||
- 代码/文档 和 skills 对齐
|
||||
@@ -0,0 +1,38 @@
|
||||
|
||||
---
|
||||
|
||||
## 你需要补的 EMWebApi 端点清单
|
||||
|
||||
按价值排序,按工作量排序(带推测的 CHOICE 接口 ID):
|
||||
|
||||
### 🔴 高价值(建议优先补)
|
||||
|
||||
| # | 端点名 | 对应路径 | 用途 | 推测 CHOICE 接口 |
|
||||
|---|--------|---------|------|-----------------|
|
||||
| 1 | `/fin/holder` | 股东户数 + 十大股东 | 筹码集中度 + 机构动向 | `RPT_F10_EH_EHD` / `RPT_F10_SHAREHOLDER` |
|
||||
| 2 | `/fin/valuation-history` | 历史 PE/PB 分位 | 当前估值贵不贵 | `RPT_VALUATION_ANALYSIS` |
|
||||
| 3 | `/fin/profit-forecast` | 卖方一致预期 | 未来 EPS 预测 + 评级 | `RPT_PROFIT_FORECAST` 或 `RPT_F10_PROFITNOTE` |
|
||||
| 4 | `/fin/industry-compare` | 行业横向对比 | 在行业里的位置 | `RPT_INDUSTRY_COMP` |
|
||||
|
||||
### 🟡 中价值(看时间补)
|
||||
|
||||
| # | 端点名 | 对应路径 | 用途 | 推测 CHOICE 接口 |
|
||||
|---|--------|---------|------|-----------------|
|
||||
| 5 | `/fin/cashflow-quarterly` | 单季度现金流量表 | 季度经营性现金流 | 在现有 `fin/cashflow` 上加 `reportType` 参数 |
|
||||
| 6 | `/fin/operating-data` | 经营数据(药房专属) | 门店数、同店增长、新开/关闭 | `RPT_F10_OPDATA`(按行业走分表) |
|
||||
| 7 | `/fin/notice` | 重大事项 | 重组/激励/回购/担保 | `RPT_F10_NOTICE` 或事件流 |
|
||||
|
||||
### 🟢 低价值(看心情)
|
||||
|
||||
| # | 端点名 | 对应路径 | 用途 | 推测 CHOICE 接口 |
|
||||
|---|--------|---------|------|-----------------|
|
||||
| 8 | `/fin/management` | 管理层介绍 + 持股 | 老板背景、薪酬 | `RPT_F10_MANAGEMENT` |
|
||||
| 9 | `/fin/top-flow` | 大宗交易 + 高管增减持 | 减持信号 | `RPT_F10_BIGTRADE` / `RPT_F10_HOLDERCHANGE` |
|
||||
|
||||
### 💡 实现提示
|
||||
|
||||
1. **`fin/operating-data` 是药房/银行/地产的行业专属接口**,CHOICE 不会给一个通用端点,可能要按行业分多个子接口(`fin/op-data-pharmacy` / `fin/op-data-bank` ...)
|
||||
2. **`fin/holder` 通常分两张**:股东户数 + 十大股东明细,建议拆成两个端点更清晰
|
||||
3. **接口 ID 不确定的话**:你先写一个能跑通的 demo(比如 `summary`),我这边按你的命名风格对照补其它4. **每个新接口都建议加 `org_code` 参数**(`stocks=603233.SH:10500736`格式),少走自动查询这一步,更稳
|
||||
|
||||
**优先级建议**:今晚先攻 1+2+3(持仓 + 估值历史 + 盈利预测),这三个对大参林的报告补全是**质变级别**的提升。其它周末慢慢来。
|
||||
Reference in New Issue
Block a user