故事分享平台如何接入童话故事集 API?内容聚合与展示实践
# 故事分享平台如何接入童话故事集 API?内容聚合与展示实践
> 元信息:童话故事集 API(apiCode=1700)· 全接入点 · 免费服务 · 适用人群:内容/社区/教育平台开发者 · 阅读时间约 8 分钟
## 核心要点
- 平台侧聚合模式:服务端代理持有 AppKey,按分类+关键字批量拉取列表与详情,落库后做聚合展示。
- `content` 是纯文本正文,展示需自行处理段落、换行与字体;渲染前必须转义防 XSS。
- 没有批量接入点,建库靠「分类→列表→详情」逐级调用,必须配合缓存与限流。
## Why:把接口变成你平台的内容底座
如果你的产品是一个故事分享社区、亲子内容站或校园阅读平台,童话故事集 API 可以充当"经典内容库":你负责分类导航、搜索、收藏、评论等社区能力,故事正文由接口供给。本篇聚焦平台侧的聚合拉取、存储与展示要点。
## What:平台接入速览
| 能力 | 对应接入点 | 平台侧动作 |
|------|-----------|------------|
| 分类导航 | 1700-1 | 拉全分类,生成栏目树 |
| 内容检索 | 1700-2 | 按分类+关键字拉列表,建索引 |
| 正文供给 | 1700-3 | 按 id 取详情,落库缓存 |
## How:服务端代理 + 聚合落库
```python
import requests, sqlite3
APPKEY = "YOUR_APPKEY"
conn = sqlite3.connect("stories.db")
conn.execute("""CREATE TABLE IF NOT EXISTS story(
id TEXT PRIMARY KEY, title TEXT, classify TEXT, content TEXT, cached_at INTEGER)""")
def pull_and_store():
# 1) 分类
cats = requests.post(f"https://route.showapi.com/1700-1?appKey={APPKEY}",
headers={"content-type": "application/x-www-form-urlencoded"}, timeout=10)
cat_list = cats.json()["showapi_res_body"]["storylist"]
# 2) 每个分类拉列表(keyword 必填,用能命中的词),再逐篇取详情
for c in cat_list:
lst = requests.post(f"https://route.showapi.com/1700-2?appKey={APPKEY}",
data={"classifyId": c["classifyId"], "keyword": "故事", "page": "1"},
headers={"content-type": "application/x-www-form-urlencoded"}, timeout=10)
for it in lst.json()["showapi_res_body"]["contentlist"]:
d = requests.post(f"https://route.showapi.com/1700-3?appKey={APPKEY}",
data={"id": it["id"]},
headers={"content-type": "application/x-www-form-urlencoded"}, timeout=10)
b = d.json()["showapi_res_body"]
conn.execute("INSERT OR REPLACE INTO story VALUES(?,?,?,?,strftime('%s','now'))",
(b["id"], b["title"], b["classify"], b["content"]))
conn.commit()
```
```javascript
// 前端展示:务必转义 content,防止 XSS
function renderContent(content) {
const div = document.createElement("div");
div.textContent = content; // textContent 自动转义
return div.innerHTML.split("\n").join("<br>");
}
```
## 返回示例与解析
- 列表 `contentlist[]`:仅含 `id/title/classifyId`,无正文。
- 详情 `content`:纯文本故事正文,无 HTML、无配图。展示层自行负责排版与配图位。
## 进阶 / 边界
- **XSS 防护**:`content` 直接进 DOM 有注入风险,务必用 `textContent`/模板转义后渲染,禁止 `innerHTML = content`。
- **版权与署名**:平台展示他人内容应保留来源与必要说明,具体合规以平台运营规范与官方条款为准。
- **增量更新**:全量建库后,用定时任务按分类增量补拉(带缓存 TTL),避免每日全量回源触发档次限制(见[缓存与分页策略](https://www.showapi.com/guides/child-story-cache-1700))。
## FAQ
**Q: 能直接在前端调接口展示吗?**
A: 不建议。AppKey 会暴露,且无法做缓存与限流;应由服务端代理持有 AppKey 并落库。
**Q: content 里没有图片,平台怎么配图?**
A: 接口只给文字正文,配图由平台按分类/标题自行准备,接口不提供插图。
**Q: 上线的故事会每天变吗?**
A: 经典故事正文极稳定,正文变化频率低;分类可能微调,建议动态消费 1700-1。
**Q: 社区 UGC 和接口内容怎么区分?**
A: 用来源字段标记(如 `source='showapi'` vs `source='ugc'`),展示与检索时分别处理。
## 相关能力 / 下一步阅读
- [免费接口也别乱调用:内容缓存与分页拉取策略](https://www.showapi.com/guides/child-story-cache-1700)
- [儿童故事小程序全链路设计](https://www.showapi.com/guides/child-story-list-integration-1700)
- [童话故事集 API 免费档位说明](https://www.showapi.com/guides/child-story-free-tier-1700)
- **本系列共 12 篇**:查看[童话故事集 API 指南总目录](https://www.showapi.com/guides/child-story-guides-1700)