技术博客
十万个为什么 API:5 分钟接入,从第一条问答到完整详情

十万个为什么 API:5 分钟接入,从第一条问答到完整详情

作者: 万维易源
2026-09-02
十万个为什么 API快速接入Python示例免费接口科普问答
# 十万个为什么 API:5 分钟接入,从第一条问答到完整详情 > 接口:十万个为什么(apiCode=1706)· 接入点:列表(1706-1) + 详情(1706-2) · 免费 · 请求方式:POST/GET · 返回格式:JSON · 适用人群:新注册用户 / 初级开发者 · 阅读时间:约 6 分钟 ## 核心要点 - 十万个为什么 API 是**免费**科普问答接口,先调「列表」用关键词拿到问题 `id`,再调「详情」用 `id` 取完整内容。 - 仅需一个 AppKey 即可跑通两个接入点,无需任何付费或订阅。 - 本篇给可直接运行的 Python / cURL / Node.js 示例,替换 AppKey 即可出结果。 ## Why:这跟我有什么关系 如果你是家长类 App、儿童教育产品或科普社区的开发者,想快速给产品加上「孩子问我为什么,我答得上来」的能力,这个接口最直接:传一个关键词(比如"地球"),拿到一批相关问题,点开任意一条就能获取完整科普文字。免费、无需商务对接,适合快速验证想法。 ## What:前置条件与接口速览 | 项 | 说明 | |----|------| | 接口 | 十万个为什么(apiCode=1706) | | 接入点 | 列表 `https://route.showapi.com/1706-1`、详情 `https://route.showapi.com/1706-2` | | 鉴权 | URL 查询参数 `appKey`(在 [AppKey 管理](https://www.showapi.com/console#/myApp) 获取) | | 请求方式 | POST / GET,表单 `application/x-www-form-urlencoded` | | 计费 | 免费,注册后默认可调用,有档位限制(细则见[官方档位说明](https://www.showapi.com/free-api)) | | 返回 | JSON,业务数据在 `showapi_res_body` 内 | | 集成能力 | MCP、OpenAPI 3.0(YAML/JSON) | ## How:三步跑通 **步骤 1 — 获取 AppKey** 登录后在 [AppKey 管理](https://www.showapi.com/console#/myApp) 拿到你的 AppKey,替换下方 `YOUR_APPKEY`。 **步骤 2 — 调列表接口,拿到问题 id** 列表接入点必填 `keyword`,返回 `contentlist`(数组,每项含 `id` 与 `title`)。 ```python import requests APP_KEY = "YOUR_APPKEY" resp = requests.post( "https://route.showapi.com/1706-1", data={"keyword": "地球", "page": "1"}, params={"appKey": APP_KEY}, headers={"content-type": "application/x-www-form-urlencoded"}, timeout=10, ) data = resp.json() body = data.get("showapi_res_body", {}) if body.get("ret_code") != "0": raise RuntimeError(f"调用失败:{body.get('remark')}") for item in body.get("contentlist", []): print(item["id"], "->", item["title"]) # 例:5ba48fdbc1b458bb0892f6ff -> 地球名片 ``` **步骤 3 — 用 id 调详情接口,取完整内容** 详情接入点必填 `id`,返回 `title` 与 `content`(整段科普文本)。 ```python resp = requests.post( "https://route.showapi.com/1706-2", data={"id": "5ba48fdbc1b458bb0892f6ff"}, params={"appKey": APP_KEY}, headers={"content-type": "application/x-www-form-urlencoded"}, timeout=10, ) body = resp.json().get("showapi_res_body", {}) print(body.get("title")) print(body.get("content")) ``` **cURL 等价写法** ```bash # 列表 curl -X POST "https://route.showapi.com/1706-1?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" \ -d "keyword=%E5%9C%B0%E7%90%83&page=1" # 详情 curl -X POST "https://route.showapi.com/1706-2?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" \ -d "id=5ba48fdbc1b458bb0892f6ff" ``` **Node.js(fetch)** ```javascript const APP_KEY = "YOUR_APPKEY"; const res = await fetch( `https://route.showapi.com/1706-1?appKey=${APP_KEY}`, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ keyword: "地球", page: "1" }), } ); const data = await res.json(); const body = data.showapi_res_body; if (body.ret_code !== "0") throw new Error(body.remark); body.contentlist.forEach((it) => console.log(it.id, it.title)); ``` ## 返回示例与解析 列表返回(节选): ```json { "showapi_res_code": 0, "showapi_res_body": { "remark": "查询成功!", "allPages": 5, "ret_code": 0, "contentlist": [ {"id": "5ba48fdbc1b458bb0892f6ff", "title": "地球名片"}, {"id": "5ba49c07c1b458bb08930161", "title": "地球同步轨道和地球静止轨道"} ], "currentPage": 1, "allNum": 210, "maxResult": 50 } } ``` - `ret_code`:`"0"` 成功,其他值表示失败(文档未给具体非 0 枚举,失败时看 `remark` 提示)。 - `contentlist`:问题数组,每条含 `id`(详情入参)与 `title`。 - `allNum` / `allPages` / `maxResult`:总数 / 总页数 / 每页上限,用于分页。 ## 进阶 / 边界 - **免费 + 档位限制**:接口免费但设有调用档位,具体数字见[官方档位说明](https://www.showapi.com/free-api),本篇不编造。高频场景建议缓存(见[《免费档位下:用缓存策略节省调用次数》](https://www.showapi.com/guides/why100k-free-tier-cache-1706))。 - **必填项**:列表 `keyword` 必填、详情 `id` 必填,缺省会调用失败(看 `remark`)。 - **无订阅/批量**:本接口只有「列表 + 详情」两个同步接入点,文档未提供订阅推送或批量能力。 ## FAQ **Q1:返回 ret_code 不是 0 怎么办?** 看 `showapi_res_body.remark` 的提示文字,通常是必填参数缺失(如 keyword/id 没传)或 AppKey 无效。 **Q2:AppKey 在哪里拿?** 在 [AppKey 管理](https://www.showapi.com/console#/myApp) 获取,作为 URL 查询参数 `appKey` 传入。 **Q3:列表和详情是两个不同的地址吗?** 是的。列表是 `route.showapi.com/1706-1`,详情是 `route.showapi.com/1706-2`,都带同一个 `appKey`。 **Q4:content 里包含视频 URL 吗?** 文档称"提供文章、视频等多媒体内容",但未给出独立的视频字段;实际多媒体结构以接口返回为准,不要预设字段名。 **Q5:免费接口有次数限制吗?** 有档位限制,具体上限以[官方档位说明](https://www.showapi.com/free-api)为准。 ## 相关能力 / 下一步阅读 - [十万个为什么 API 返回字段全解:ret_code / contentlist / content 一文读懂](https://www.showapi.com/guides/why100k-response-fields-1706) - [十万个为什么 API:列表→详情两接入点串联的全链路设计](https://www.showapi.com/guides/why100k-list-detail-flow-1706) - [十万个为什么 API 免费档位下:用缓存策略节省调用次数](https://www.showapi.com/guides/why100k-free-tier-cache-1706) - **本系列共 11 篇**:查看[十万个为什么 API 指南总目录](https://www.showapi.com/guides/why100k-guides-1706)