技术博客
猜一猜谜语 API 返回字段全解:三大接入点的 Title/Answer 与分页差异

猜一猜谜语 API 返回字段全解:三大接入点的 Title/Answer 与分页差异

作者: 万维易源
2026-09-03
猜一猜谜语API返回字段TitleAnswer字段避坑
# 猜一猜谜语 API 返回字段全解:三大接入点的 Title/Answer 与分页差异 > 接口/接入点:猜一猜谜语 API(151-2 / 151-3 / 151-4) · 免费 · 返回 JSON · 适用人群:已接入或准备接入的开发者 · 阅读时间:约 6 分钟 ## 核心要点 - 三大接入点返回结构**彼此不一致**:151-2 用 `Title`/`Answer`(大写),151-4 用 `title`/`answer`(小写),151-3 返回 `typeList[id/name]`(无 contentlist)。 - 统一信封:`showapi_res_code`/`showapi_res_error`/`showapi_res_id` 在 `showapi_res_body` 之外;业务成败看 `showapi_res_body.ret_code`(`0` 成功)。 - 分页字段命名也不统一:151-2 用 `pagebean`,151-4 用 `pb`,151-3 无分页。 ## Why:为什么这篇必读 猜一猜谜语 API 的三个接入点返回字段命名不统一,直接照抄一个接入点的解析代码去解析另一个,会取到 `undefined`。本文把三套结构摆在一起对照,帮你一次写对。 ## What:接口速览 | 接入点 | 地址 | 返回主结构 | 谜面/谜底字段 | 分页字段 | |--------|------|-----------|--------------|---------| | 151-2 随机查询 | `route.showapi.com/151-2` | `pagebean.contentlist`(数组,文档示例 20 条)* | `Title` / `Answer`(大写) | `pagebean`(`allNum`/`allPages`/`currentPage`/`maxResult`) | | 151-3 类型查询 | `route.showapi.com/151-3` | `typeList`(数组,无 contentlist) | 无(仅 `id`/`name` 类型) | 无 | | 151-4 按类型分页 | `route.showapi.com/151-4` | `pb.contentlist`(数组) | `title` / `answer`(小写) | `pb`(`allNum`/`allPage`/`currentPage`/`maxResult`) | \* **文档矛盾提醒**:151-2 的"返回示例"是 `pagebean.contentlist` 数组,但其"返回体字段表"与 OpenAPI schema 描述为单条扁平结构(无 `pagebean`)。解析时请防御性兼容两种形态(见 [字段大小写避坑](https://www.showapi.com/guides/riddle-field-case-151))。 ## How:字段对照与解析 ### 统一信封(三个接入点相同) ```json { "showapi_res_code": 0, // 系统级状态码 "showapi_res_error": "", // 系统级错误信息 "showapi_res_id": "ce13...", // 请求唯一标识 "showapi_res_body": { ... } // 业务数据在此 } ``` 判断顺序:先看 `showapi_res_code`(非 0 看 `showapi_res_error`)→ 再看 `showapi_res_body.ret_code`(`0` 为业务成功)。 ### 151-2 返回结构(节选) ```json "showapi_res_body": { "pagebean": { "allNum": 20, "allPages": 1, "currentPage": 1, "maxResult": 20, "contentlist": [ { "Title": "谜面", "Answer": "谜底", "typeId": "zlmy", "typeName": "智力问答" } ] }, "ret_code": 0 } ``` ### 151-3 返回结构(节选) ```json "showapi_res_body": { "ret_code": 0, "typeList": [ { "id": "gxmy", "name": "搞笑谜语" } ] } ``` ### 151-4 返回结构(节选) ```json "showapi_res_body": { "pb": { "allNum": "24660", "allPage": "1233", "currentPage": "1", "maxResult": "20", "contentlist": [ { "title": "问:…", "answer": "答:茎", "typeId": "zlmy", "typeName": "智力问答" } ] }, "ret_code": 0 } ``` ### 防御性解析(兼容三套命名) ```python def get_items(rb): # 151-2: pagebean.contentlist (大写 Title/Answer) if "pagebean" in rb: return rb["pagebean"].get("contentlist", []), "Title", "Answer" # 151-4: pb.contentlist (小写 title/answer) if "pb" in rb: return rb["pb"].get("contentlist", []), "title", "answer" # 151-3: typeList(结构不同,单独处理) if "typeList" in rb: return rb["typeList"], "id", "name" # 兼容 151-2 扁平单条形态(OpenAPI schema 描述) if "Title" in rb or "title" in rb: return [rb], ("Title" if "Title" in rb else "title"), ("Answer" if "Answer" in rb else "answer") return [], None, None ``` ## 返回示例与解析 完整示例见各接入点文档页: - 151-2:https://www.showapi.com/apiGateway/view/151/2 - 151-3:https://www.showapi.com/apiGateway/view/151/3 - 151-4:https://www.showapi.com/apiGateway/view/151/4 `typeId` / `typeName` 取值含义见 [类型清单](https://www.showapi.com/guides/riddle-typelist-151)。 ## 进阶/边界 - **分页字段差异**:151-2 用 `pagebean`,151-4 用 `pb`;151-4 的 `allNum`/`allPage` 在文档示例中为字符串类型,比较/计算前先转 `int`。 - **`ret_code` 位置**:在 `showapi_res_body` **内部**,不要和顶层 `showapi_res_code` 混淆。 - **151-3 无 contentlist**:它是类型列表接口,返回 `typeList`,不要套用谜面/谜底解析。 - 全部字段差异避坑代码见 [字段大小写避坑](https://www.showapi.com/guides/riddle-field-case-151)。 ## FAQ **Q1:为什么我按 Title 取不到值?** 你很可能在调 151-4,它返回的是小写 `title`/`answer`。151-2 才是大写 `Title`/`Answer`。详见上文对照表。 **Q2:ret_code 和 showapi_res_code 有什么区别?** `showapi_res_code` 是系统级(鉴权/限流/网关)状态码,在 `showapi_res_body` 外;`ret_code` 是业务状态码,在 `showapi_res_body` 内,`0` 表示业务成功。 **Q3:151-2 到底有没有 pagebean?** 文档自身矛盾:返回示例有 `pagebean.contentlist`,字段表与 OpenAPI schema 描述为扁平单条。以实际返回为准,代码做防御性解析(本文已给模板)。 **Q4:分页 total 是数字还是字符串?** 151-4 示例中 `allNum`/`allPage` 为字符串,使用前 `int()` 转换,避免比较出错。 **Q5:151-3 能拿到谜面谜底吗?** 不能。151-3 是类型查询,只返回 `typeList[id/name]`,要拿谜面谜底请调 151-2 或 151-4。 ## 相关能力 / 下一步阅读 - [避坑:三大接入点返回字段大小写不一致,解析代码怎么写才稳](https://www.showapi.com/guides/riddle-field-case-151) - [猜一猜谜语 API 类型清单:26 类谜语 typeId 完整对照表](https://www.showapi.com/guides/riddle-typelist-151) - [猜一猜谜语 API:5 分钟接入,调通你的第一条随机谜语](https://www.showapi.com/guides/riddle-quickstart-151) - **本系列共 13 篇**:查看[猜一猜谜语 API 指南总目录](https://www.showapi.com/guides/riddle-guides-151)