常见疾病查询:关键字检索疾病(546-2 的 typeId/subTypeId/key/page 用法)
# 常见疾病查询:关键字检索疾病(546-2 的 typeId/subTypeId/key/page 用法)
> 接口:常见疾病查询(apiCode=546)· 免费 · 接入点 546-2 · 返回格式 JSON · 适用人群:开发者 · 阅读时间:约 6 分钟
## 核心要点
- 546-2「关键字查询疾病」四个参数**全部可选**:`typeId`(一级科室)、`subTypeId`(二级科室)、`key`(关键词)、`page`(页码,每页最多 20 条)。
- 空参调用返回**跨全科室的分页疾病列表**;带 `key` 做模糊检索;带 `typeId`/`subTypeId` 限定科室范围。
- 每项返回含 `id`(供 546-3 取明细)、`name`、`summary`、`typeId`/`subTypeId`(推荐科室)。
## Why:检索是导诊的"搜索框"
用户不会按科室编号来找病,他们输入的是"高血压""咳嗽"。546-2 就是把自然语言病名/症状映射到「疾病 + 推荐科室」的桥梁。掌握 `key` 与 `typeId` 的组合,你就能同时支持"搜索框"和"按科室浏览"两种交互。
## What:参数说明
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `typeId` | string | 否 | 一级科目 id(来自 546-1) |
| `subTypeId` | string | 否 | 二级子科目 id(来自 546-1) |
| `key` | string | 否 | 关键词(病名/症状描述) |
| `page` | string | 否 | 第几页,**每页最多 20 条** |
> 返回包裹:`showapi_res_body.contentlist[]`,每项 `{ id, name, summary, typeName, typeId, subTypeId, subTypeName }`。
## How:三种拼参姿势
### ① 模糊搜(只给 key)
```python
hits = call("546-2", key="高血压", page="1")
for d in hits.get("contentlist", []):
print(d["id"], d["name"], d.get("typeName"), d.get("subTypeName"))
```
### ② 限定科室搜(key + typeId)
```python
# 只在"内科(typeId=3)"下搜"高血压",缩小范围
hits = call("546-2", key="高血压", typeId="3", page="1")
```
### ③ 按科室浏览(只给 typeId,无 key)
```python
# 浏览内科全部疾病(分页拉取)
page = 1
while True:
hits = call("546-2", typeId="3", page=str(page))
items = hits.get("contentlist") or []
if not items:
break
for d in items:
print(d["name"])
page += 1
if len(items) < 20: # 不足一页说明到底
break
```
### cURL
```bash
# 模糊搜
curl -X POST "https://route.showapi.com/546-2?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
--data-urlencode "key=高血压" --data-urlencode "page=1"
# 限定内科
curl -X POST "https://route.showapi.com/546-2?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
--data-urlencode "key=高血压" --data-urlencode "typeId=3" --data-urlencode "page=1"
```
### Node.js(fetch)
```javascript
const hits = await call("546-2", { key: "高血压", typeId: "3", page: "1" });
for (const d of (hits.contentlist || [])) {
console.log(d.id, d.name, d.typeName, d.subTypeName);
}
```
## 返回示例与解析
```json
{
"showapi_res_body": {
"ret_code": 0,
"contentlist": [
{
"id": "DISEASE_ID_XXX",
"name": "高血压",
"summary": "以体循环动脉血压增高为主要临床表现...",
"typeName": "内科",
"typeId": "3",
"subTypeId": "0304",
"subTypeName": "心血管内科"
}
]
}
}
```
- `id`:存入数据库,后续调 546-3 取明细用。
- `typeName`/`subTypeName`:可直接作为"推荐挂号科室"展示给用户。
- `summary`:一句话描述,列表页即可展示,无需每次都调明细。
## 进阶 / 边界
- **分页上限 20 条/页**:`page` 递增拉取时,以"返回不足 20 条"作为到底信号(文档未给总数字段)。
- **空参合法**:四个参数全空也返回数据(全量分页),适合"科室树点击 → 浏览该科疾病"。
- **`key` 匹配范围未文档化**:文档只说"通过关键字在指定分类中查询",未声明是精确病名还是模糊描述;生产环境建议对空结果做兜底(见[FAQ](https://www.showapi.com/guides/disease-query-faq-546))。
## FAQ
**Q1:546-2 不传 key 能查吗?**
A:能。四个参数全可选,空参返回全量分页列表,适合按科室浏览。
**Q2:每页最多能返回多少条?**
A:文档明确"每页最多 20 条",用 `page` 翻页。
**Q3:返回里没有总条数,怎么判断翻完?**
A:当某页 `contentlist` 不足 20 条时即可认为已到末页。
**Q4:拿到 id 后怎么看症状/治疗?**
A:用 `id` 调 546-3 取得疾病明细,症状/诊断/治疗/预防在 `tagList` 里(见[明细解析](https://www.showapi.com/guides/disease-query-detail-546))。
## 相关能力 / 下一步阅读
- [常见疾病查询:取得疾病明细并解析症状/诊断/治疗/预防(546-3 的 tagList)](https://www.showapi.com/guides/disease-query-detail-546)
- [常见疾病查询:科目树 → 关键字 → 明细 三步入诊全链路设计](https://www.showapi.com/guides/disease-query-pipeline-546)
- [常见疾病查询:医院科室分类全量清单(含 typeId / subId 映射)](https://www.showapi.com/guides/disease-query-department-list-546)
- **本系列共 12 篇**:查看[常见疾病查询指南总目录](https://www.showapi.com/guides/disease-query-guides-546)