健康类 App / 医疗知识库:用常见疾病查询搭建结构化病种库
# 健康类 App / 医疗知识库:用常见疾病查询搭建结构化病种库
> 接口:常见疾病查询(apiCode=546)· 免费 · 请求方式 POST/GET · 返回格式 JSON · 适用人群:健康科普、医疗内容团队 · 阅读时间:约 8 分钟
## 核心要点
- 用 546-1 建**科室骨架**、546-2 拉**疾病列表**、546-3 灌**症状/诊断/治疗/预防**内容,三步即可搭出结构化病种库。
- 明细的 `tagList` 是天然的内容分块(症状/诊断/治疗/预防),直接映射成知识库字段。
- 免费 + 官方自营,适合做科普内容底座;**内容须标注"仅供参考,非诊疗建议"**。
## Why:内容团队最缺的是"结构化病种数据"
健康类 App、公众号、医疗科普站,长期需要"某个病有什么症状、怎么治"的结构化内容。手工整理慢、易错。常见疾病查询把病种拆成「科室 → 疾病 → 标签化详情」三级,且免费,正好作为内容中台的数据源:先批量灌库,再在前端做科普卡片/搜索/问答。
## What:三接入点的内容角色
| 接入点 | 内容角色 | 落库字段 |
|--------|---------|---------|
| 546-1 | 科室骨架 | typeId/typeName、subId/subName |
| 546-2 | 疾病索引 | id、name、summary、typeId/subTypeId |
| 546-3 | 病种详情 | alias、tagList(症状/诊断/治疗/预防)、summary |
## How:批量灌库脚本(示意)
```python
def build_knowledge_base():
# 1) 科室骨架
depts = call("546-1")["list"]
# 2) 遍历科室,分页拉疾病
for dept in depts:
page = 1
while True:
hits = call("546-2", typeId=dept["typeId"], page=str(page))
items = hits.get("contentlist") or []
if not items:
break
for d in items:
detail = call("546-3", id=d["id"]) # 3) 取明细
it = (detail.get("item") or [{}])[0]
tags = {t["name"]: t["content"] for t in it.get("tagList", [])}
save_disease({
"disease_id": d["id"],
"name": d["name"],
"alias": it.get("alias", ""),
"dept": f"{d['typeName']}/{d['subTypeName']}",
"symptom": tags.get("症状", ""),
"diagnosis": tags.get("诊断", ""),
"treatment": tags.get("治疗", ""),
"prevention": tags.get("预防", ""),
})
page += 1
if len(items) < 20:
break
```
> 注意:批量灌库属高频调用,请**合理限速**(如每次请求间隔、失败退避),并充分缓存已拉取数据,避免重复请求。具体频率限制以官方说明为准。
### cURL(单条明细)
```bash
curl -X POST "https://route.showapi.com/546-3?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
--data-urlencode "id=<疾病id>"
```
### Node.js(fetch)
```javascript
const detail = await call("546-3", { id: diseaseId });
const it = (detail.item || [])[0];
const tags = Object.fromEntries((it?.tagList || []).map(t => [t.name, t.content]));
saveDisease({ name: it?.name, symptom: tags["症状"], treatment: tags["治疗"] });
```
## 返回示例与解析
`tagList` 的每个 `{name, content}` 直接映射成知识库的"症状/诊断/治疗/预防"字段;`alias` 可作为同义词用于搜索;`summary` 作列表页摘要。前端渲染成"病种卡片"即可。
## 进阶 / 边界
- **增量更新**:首次全量灌库后,后续可用缓存 `disease_id` 去重,只补新疾病,减少调用。
- **内容合规**:所有科普内容必须标注"仅供参考,不能替代医生诊断/诊疗建议",避免合规风险。
- **标签 name 不固定**:以接口实时返回的 `name` 为准,存储用键值对而非写死四列。
- **频率控制**:批量场景务必限速 + 退避,详见[FAQ](https://www.showapi.com/guides/disease-query-faq-546)。
## FAQ
**Q1:能直接把返回内容当诊疗建议发布吗?**
A:不能。必须标注"仅供参考,非诊疗建议",且不能替代医生诊断。
**Q2:tagList 只有症状/诊断/治疗/预防吗?**
A:文档示例为这四类,实际 `name` 以接口返回为准,存储应通用化。
**Q3:批量拉取会触发限制吗?**
A:免费接口通常有调用频率约束,建议限速、缓存去重、失败指数退避,具体以官方说明为准。
**Q4:病种库怎么和搜索结合?**
A:用 `name`/`alias` 建倒排索引,用户搜病名/别名即可命中,再展示 `tagList` 内容。
## 相关能力 / 下一步阅读
- [常见疾病查询:取得疾病明细并解析症状/诊断/治疗/预防(546-3 的 tagList)](https://www.showapi.com/guides/disease-query-detail-546)
- [免费接口也要缓存:常见疾病查询的静态科室树与明细缓存策略](https://www.showapi.com/guides/disease-query-cache-546)
- [常见疾病查询常见问题与 ret_code 排查:0 为成功、非 0 即失败](https://www.showapi.com/guides/disease-query-faq-546)
- **本系列共 12 篇**:查看[常见疾病查询指南总目录](https://www.showapi.com/guides/disease-query-guides-546)