$npx -y skills add FTShare-Lab/FTShare-skills --skill etf-list-paginatedETF 分页列表,支持分页、排序、筛选(market.ft.tech)。用户问 ETF 列表、全市场 ETF、按涨跌幅排序的 ETF、筛选某类 ETF 时使用。
| 1 | # ETF 分页列表 - 分页、排序、筛选 |
| 2 | |
| 3 | ## 1. 接口描述 |
| 4 | |
| 5 | | 项目 | 说明 | |
| 6 | |------|------| |
| 7 | | 接口名称 | ETF 分页列表 | |
| 8 | | 外部接口 | `GET /api/v1/market/data/daec/etfs` | |
| 9 | | 请求方式 | GET | |
| 10 | | 适用场景 | 分页获取 A 股 ETF 列表,支持按字段排序、按条件筛选、按需返回字段(masks);不传分页参数时返回全部(先筛选、排序后再截断) | |
| 11 | |
| 12 | ## 2. 请求参数 |
| 13 | |
| 14 | 说明:所有参数均为可选项。不传 `order_by` 且不传 `ob` 时默认按 `change_rate desc` 排序;不传分页时返回满足条件的全部 ETF。 |
| 15 | |
| 16 | | 参数名 | 类型 | 是否必填 | 描述 | 取值示例 | 备注 | |
| 17 | |--------|------|----------|------|----------|------| |
| 18 | | order_by | string | 否 | 排序方式,格式为「字段 方向」,多字段用逗号分隔 | change_rate desc、name asc | 方向:asc/a 升序,desc/d 降序;字段为 Etf 字段名 | |
| 19 | | ob | string | 否 | 与 order_by 同义 | 同 order_by | 与 order_by 二选一,同时传以 order_by 为准 | |
| 20 | | filter | string | 否 | 过滤条件表达式 | change_rate != null、name ~ "沪深" | 见下方 filter 取值说明 | |
| 21 | | masks | string | 否 | 字段掩码,逗号分隔,仅返回这些字段 | name,symkey,latest,change_rate | 不传则返回全部字段 | |
| 22 | | page_size | int | 否 | 每页条数 | 20 | 不传则不分页 | |
| 23 | | page_no | int | 否 | 页码,从 1 开始 | 1 | 不传且传了 page_size 时默认为 1 | |
| 24 | | filter_index | boolean | 否 | 是否需要指数过滤 | true、false | 默认 false | |
| 25 | |
| 26 | **filter 取值说明**:表达式语法为 `字段 操作符 值`。比较操作符:`=`、`!=`、`>`、`>=`、`<`、`<=`;`~` 子串包含;`:` 包含。逻辑组合:`AND`、`OR`、`NOT`,可用 `()` 分组。值可为 `null`、`true`、`false`、数字、双引号字符串。复杂表达式可 Base64 编码后以 `_B64:` 开头传入。示例:`change_rate != null`、`change_rate >= 0 AND change_rate <= 0.1`、`name ~ "科技"`。 |
| 27 | |
| 28 | ## 3. 响应说明 |
| 29 | |
| 30 | 返回分页后的 ETF 列表及总数。列表中每项为单只 ETF 对象(结构同单只 ETF 详情);不传 `masks` 时每只返回全部字段。 |
| 31 | |
| 32 | ```json |
| 33 | { |
| 34 | "total_size": 800, |
| 35 | "etfs": [ |
| 36 | { "name": "上证50ETF", "symkey": "510050.XSHG", "latest": 2.85, "change_rate": 0.0018 }, |
| 37 | { "name": "创业板ETF", "symkey": "159915.XSHE", "latest": 1.92, "change_rate": -0.0052 } |
| 38 | ] |
| 39 | } |
| 40 | ``` |
| 41 | |
| 42 | | 字段名 | 类型 | 说明 | |
| 43 | |--------|------|------| |
| 44 | | total_size | int | 满足筛选条件的 ETF 总数(分页前) | |
| 45 | | etfs | array | 当前页的 ETF 列表;单条字段同「单只 ETF 详情」(name、symkey、latest、change_rate、volume、turnover 等) | |
| 46 | |
| 47 | ## 4. 用法 |
| 48 | |
| 49 | 通过主目录 `run.py` 调用(参数均可选): |
| 50 | |
| 51 | ```bash |
| 52 | python <RUN_PY> etf-list-paginated |
| 53 | python <RUN_PY> etf-list-paginated --order_by "change_rate desc" --page_size 20 --page_no 1 |
| 54 | python <RUN_PY> etf-list-paginated --order_by "name asc" --masks name,symkey,latest,change_rate --page_size 50 |
| 55 | python <RUN_PY> etf-list-paginated --filter "change_rate >= 0.01 AND change_rate <= 0.05" |
| 56 | ``` |
| 57 | |
| 58 | `<RUN_PY>` 为主 SKILL.md 同级的 `run.py` 绝对路径。脚本输出 JSON,请求头已内置 `X-Client-Name: ft-claw`。 |
| 59 | |
| 60 | ## 5. 请求示例 |
| 61 | |
| 62 | ``` |
| 63 | GET /api/v1/market/data/daec/etfs?order_by=change_rate%20desc&page_size=20&page=1 |
| 64 | ``` |
| 65 | |
| 66 | ## 6. 注意事项 |
| 67 | |
| 68 | - 涨跌幅等比率字段可能为小数形式,展示时按需乘以 100 转为百分比 |
| 69 | - 不传 `page_size`/`page_no` 时返回全部满足条件的 ETF,数据量大时注意响应体积 |