技术博客
童话故事集 API:故事分类接入点(1700-1)怎么用?含 10 类对照

童话故事集 API:故事分类接入点(1700-1)怎么用?含 10 类对照

作者: 万维易源
2026-09-02
故事分类classifyId分类菜单
# 童话故事集 API:故事分类接入点(1700-1)怎么用?含 10 类对照 > 元信息:童话故事集 API(apiCode=1700)· 接入点 1700-1 · 免费服务 · 返回 JSON · 适用人群:需构建分类导航的开发者 · 阅读时间约 5 分钟 ## 核心要点 - 1700-1 无业务请求参数,调用即返回全部分类清单(真实结构为 `storylist[]`)。 - 每个分类含 `classify`(名称)与 `classifyId`(编号),后者是 1700-2 列表查询的必填参数。 - 分类清单变化频率低,建议缓存,不要每次渲染都实时拉取。 ## Why:为什么先讲分类 任何"故事书架"类产品,第一步都是先把类别摆出来:安徒生童话、格林童话、成语故事……1700-1 就是干这个的。你拿到分类后,把它作为导航菜单,用户点某个分类,你再带着 `classifyId` 去 1700-2 拉该分类下的故事列表。所以 1700-1 是整个链路的入口。 ## What:接口速览 | 项目 | 说明 | |------|------| | 接口地址 | `https://route.showapi.com/1700-1?appKey=YOUR_APPKEY` | | 请求参数 | 无业务参数(仅可选 Header `content-type`) | | 返回数组 | `showapi_res_body.storylist[]` | | 计费 | 免费 | ## How:取分类并构建菜单 ```python import requests APPKEY = "YOUR_APPKEY" url = f"https://route.showapi.com/1700-1?appKey={APPKEY}" r = requests.post(url, headers={"content-type": "application/x-www-form-urlencoded"}, timeout=10) body = r.json()["showapi_res_body"] if body.get("ret_code") != "0": raise SystemExit(body.get("remark")) # 构建分类菜单:名称 -> classifyId menu = {item["classify"]: item["classifyId"] for item in body["storylist"]} print(menu) # 例:{'儿童小故事':'1','安徒生童话':'2', ...} ``` ```bash curl -X POST "https://route.showapi.com/1700-1?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" ``` ```javascript const r = await fetch(`https://route.showapi.com/1700-1?appKey=YOUR_APPKEY`, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, }); const body = (await r.json()).showapi_res_body; const menu = {}; for (const it of body.storylist) menu[it.classify] = it.classifyId; ``` ## 分类对照(以真实返回为准) 文档说明分类涵盖以下类别,实际请以接口返回的 `storylist` 为准(下列为常见分类示例): | classifyId | classify | |------|------| | 1 | 儿童小故事 | | 2 | 安徒生童话 | | 3 | 格林童话 | | 4 | 一千零一夜 | | 5 | 经典童话 | | 6 | 成语故事 | | 7 | 寓言故事 | | 8 | 民间故事 | | 9 | 童话故事 | | 10 | 王尔德童话 | > 说明:上表为分类含义示例,具体编号与名称以接口实时返回为准,代码里不要写死,直接消费 `storylist`。 ## 返回示例与解析 ```json { "showapi_res_body": { "ret_code": "0", "remark": "查询成功!", "storylist": [ { "classify": "儿童小故事", "classifyId": "1" }, { "classify": "安徒生童话", "classifyId": "2" } ] } } ``` ## 进阶 / 边界 - **真实结构为 `storylist[]`**:文档字段表写的是扁平 `classify/classifyId`,但真实返回是数组,以数组为准(详见[返回字段全解](https://www.showapi.com/guides/child-story-fields-1700))。 - **不要写死分类**:分类数量和编号可能调整,菜单应动态渲染接口返回,避免硬编码 1~10。 - **缓存策略**:分类很少变动,建议服务端缓存数小时(见[缓存与分页策略](https://www.showapi.com/guides/child-story-cache-1700))。 ## FAQ **Q: 1700-1 需要传什么参数?** A: 不需要业务参数,直接调用即可。仅可选 Header `content-type`。 **Q: 为什么我代码里用 classify 取不到值?** A: 真实返回数组叫 `storylist`,每个元素是 `{classify, classifyId}`,请用 `body.storylist` 遍历,不要按文档字段表的扁平字段处理。 **Q: 分类编号会变吗?** A: 接口以实时返回为准,建议动态消费,不要在前端写死编号与名称的映射。 **Q: 拿到 classifyId 之后做什么?** A: 把它作为 1700-2 故事列表的 `classifyId` 必填参数,去拉该分类下的故事列表。 ## 相关能力 / 下一步阅读 - [童话故事集 API:故事列表搜索与分页实战](https://www.showapi.com/guides/child-story-list-guide-1700) - [童话故事集 API 返回字段全解](https://www.showapi.com/guides/child-story-fields-1700) - [童话故事集 API:5 分钟接入](https://www.showapi.com/guides/child-story-quickstart-1700) - **本系列共 12 篇**:查看[童话故事集 API 指南总目录](https://www.showapi.com/guides/child-story-guides-1700)