按类型与分页查询谜语:151-4 接入点实战("关键词"真相)
# 按类型与分页查询谜语:151-4 接入点实战("关键词"真相)
> 接口/接入点:猜一猜谜语 API · 根据类型和关键词查询谜语(151-4) · 免费 · 适用人群:需要确定取题/翻页的开发者 · 阅读时间:约 5 分钟
## 核心要点
- 151-4 请求参数**只有 `typeId`(类型)+ `page`(页码)**,OpenAPI 与页面参数表均无 `keyWord`/关键词字段。
- **"根据关键词查询"是接入点名与说明文案的表述,当前不可作为请求参数传入**——只能按类型 + 分页取,不能按谜面/谜底关键词搜。
- 返回用 `pb` 包裹(`pagebean` 是 151-2 的命名,`pb` 是 151-4 的),分页字段 `allNum`/`allPage`/`currentPage`/`maxResult` 在文档示例中为**字符串**。
## Why:为什么单写一篇 151-4
很多人看到接入点名"根据类型和**关键词**查询谜语"就想传关键词,结果调不通。本文把真实参数讲清楚,省你半小时试错。
## What:接口速览
| 项 | 内容 |
|----|------|
| 地址 | `https://route.showapi.com/151-4?appKey=YOUR_APPKEY` |
| 请求参数 | `typeId`(String,否)、`page`(String,否,默认 1) |
| 关键词参数 | **无**(文档标题/说明含"关键词",但无对应入参) |
| 返回主结构 | `pb.contentlist`(数组,小写 `title`/`answer`) |
| 分页 | `pb.allNum`/`pb.allPage`/`pb.currentPage`/`pb.maxResult` |
## How:按类型翻页取题
### 调用示例
```bash
curl -X POST "https://route.showapi.com/151-4?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
-d "typeId=ysmy&page=1"
```
### Python 翻页
```python
import requests
def list_by_type(type_id, page=1):
r = requests.post("https://route.showapi.com/151-4",
params={"appKey": "YOUR_APPKEY"},
data={"typeId": type_id, "page": str(page)},
timeout=10).json()
rb = r["showapi_res_body"]
pb = rb.get("pb", {})
total = int(pb.get("allNum", 0)) # 字符串,先转 int
pages = int(pb.get("allPage", 0))
items = pb.get("contentlist", [])
for it in items:
print(it.get("title"), "→", it.get("answer")) # 注意小写
return total, pages
```
## 返回示例与解析
```json
"showapi_res_body": {
"pb": {
"allNum": "24660", "allPage": "1233", "currentPage": "1", "maxResult": "20",
"contentlist": [ { "title": "问:仙人掌绿色的扁片是?", "answer": "答:茎",
"typeId": "zlmy", "typeName": "智力问答" } ]
},
"ret_code": 0
}
```
> 注:`allNum=24660` 是本次 `zlmy` 类查询的该类总记录数,**不是全库总数**;简介"2.5 万+"才是库规模陈述。
## 进阶/边界
- **无关键词检索**:想"搜谜面含某词"目前做不到,只能先按 `typeId` 取全量再本地过滤。
- **字段小写**:151-4 用 `title`/`answer`(小写),与 151-2 的 `Title`/`Answer`(大写)不同,别混。
- **分页字段为字符串**:`allNum`/`allPage` 等先 `int()` 再比较/计算。
- `typeId` 取值见 [类型清单](https://www.showapi.com/guides/riddle-typelist-151)。
## FAQ
**Q1:151-4 能传关键词搜谜面吗?**
不能。请求参数只有 `typeId` 和 `page`,没有关键词字段。接入点名里的"关键词"目前不可作为入参。
**Q2:和 151-2 随机查询有什么区别?**
151-2 随机返回(可传 typeId 筛选),151-4 按 `typeId`+`page` 确定翻页取,适合"我要第 N 类第 M 页"。
**Q3:page 不传默认第几页?**
文档示例默认 1,不传即第一页。
**Q4:allNum 是全部谜语数量吗?**
不是,是本次 `typeId` 对应类的记录数(如 `zlmy` 类 24660 条)。全库规模以简介"2.5 万+"为陈述,非精确值。
**Q5:返回的 title/answer 大小写要注意什么?**
151-4 是小写;若你代码同时处理 151-2,注意它返回大写 `Title`/`Answer`,详见 [字段避坑](https://www.showapi.com/guides/riddle-field-case-151)。
## 相关能力 / 下一步阅读
- [避坑:三大接入点返回字段大小写不一致,解析代码怎么写才稳](https://www.showapi.com/guides/riddle-field-case-151)
- [猜一猜谜语 API 类型清单:26 类谜语 typeId 完整对照表](https://www.showapi.com/guides/riddle-typelist-151)
- [猜一猜谜语 API 返回字段全解:三大接入点的 Title/Answer 与分页差异](https://www.showapi.com/guides/riddle-response-fields-151)
- **本系列共 13 篇**:查看[猜一猜谜语 API 指南总目录](https://www.showapi.com/guides/riddle-guides-151)