小程序/App 怎么接猜一猜谜语 API?社交娱乐趣味模块全链路设计
# 小程序/App 怎么接猜一猜谜语 API?社交娱乐趣味模块全链路设计
> 接口/接入点:猜一猜谜语 API(151-2 随机 / 151-4 按类型分页) · 免费 · 适用人群:小程序/App 开发者、社交娱乐产品 · 阅读时间:约 7 分钟
## 核心要点
- 典型链路:后端调 151-2/151-4 取题 → 前端展示谜面 → 用户提交答案 → **后端自建比对逻辑判题**(接口不返回对错,只给 `Answer` 文本)。
- 答案文本带"答:/谜底:"前缀,比对前需归一化(去前缀、去空格标点)。具体做法见 [答案校验](https://www.showapi.com/guides/riddle-answer-check-151)。
- 免费接口设档位限制,前端频繁刷新会触发限流,务必加缓存(见 [频控与缓存](https://www.showapi.com/guides/riddle-rate-limit-151))。
## Why:这跟我有什么关系
社交 App、小程序、社群工具想加"每日一谜""趣味答题"提升日活和停留,自己建题库成本高。用猜一猜谜语 API 调一个请求就有题有答案,你只负责出题与判题的交互。
## What:接口速览
| 项 | 内容 |
|----|------|
| 取题接口 | 151-2 随机(`/151-2`)或 151-4 按类型分页(`/151-4`) |
| 答案来源 | 同一返回里的 `Answer` / `answer` 字段 |
| 判题 | **接口不做**,需你方后端/前端自建 |
| 鉴权 | AppKey 放服务端,前端只拿你后端下发的题目 |
## How:全链路设计
### 步骤 1 — 后端取题(服务端代持 AppKey)
```python
import requests, random
def fetch_riddle(type_id=None):
url = "https://route.showapi.com/151-2"
params = {"appKey": "YOUR_APPKEY"}
data = {"typeId": type_id} if type_id else {}
r = requests.post(url, params=params, data=data, timeout=10).json()
rb = r["showapi_res_body"]
items = rb.get("pagebean", {}).get("contentlist", [])
if not items:
return None
it = random.choice(items) # 随机抽一条,避免每次都第一条
return {
"title": it.get("Title"),
"typeName": it.get("typeName"),
"answer_raw": it.get("Answer"), # 仅服务端持有,不下发给前端
}
```
### 步骤 2 — 前端展示谜面(不下发答案)
```json
{ "title": "问:有一头头朝北的牛…", "typeName": "智力问答" }
```
### 步骤 3 — 用户提交答案,后端判题
```python
def normalize(s):
s = s.replace("答:", "").replace("谜底:", "")
return "".join(ch for ch in s if ch.isalnum() or ch == " ") # 去标点空格
def check(user_input, answer_raw):
return normalize(user_input) == normalize(answer_raw)
```
> 判题归一化细节与边界见 [答案校验](https://www.showapi.com/guides/riddle-answer-check-151)。
### 步骤 4 — UI 草稿(伪代码)
```
展示谜面 → 输入框 + 提交按钮 → 调 /check → 显示"答对/答错" + 揭晓谜底
```
## 返回示例与解析
取题返回结构见 [返回字段全解](https://www.showapi.com/guides/riddle-response-fields-151)。注意 151-2 是 `Title`/`Answer` 大写,151-4 是小写 `title`/`answer`。
## 进阶/边界
- **答案不下发前端**:否则用户能直接看源码作弊。答案只在服务端比对。
- **随机抽题**:151-2 一次返回 20 条,服务端随机抽一条下发,减少调用次数。
- **限流**:免费档位限制频率,前端刷新太快会 429/限流;加服务端缓存与每日题池(见 [频控与缓存](https://www.showapi.com/guides/riddle-rate-limit-151))。
- **难度分级**:接口不返回难度字段,需你按 `typeId` 自行归类(如儿童用 `etmy`、成语用 `cymy`)。
## FAQ
**Q1:接口能直接告诉我用户答得对不对吗?**
不能。接口只返回 `Answer` 文本,对错判定由你自建(去前缀 + 归一化比对)。
**Q2:前端能放 AppKey 吗?**
不建议。AppKey 应只在服务端使用,前端通过你的后端拿题,避免泄露与盗刷。
**Q3:每次刷新都调接口会怎样?**
可能触发免费档位限流。建议服务端建题池 + 缓存,按节奏下发。
**Q4:怎么按难度给不同用户出题?**
接口无难度字段;按 `typeId` 划分(如 `etmy` 儿童、`cymy` 成语、`njmy` 脑筋急转弯),见 [类型清单](https://www.showapi.com/guides/riddle-typelist-151)。
**Q5:151-2 和 151-4 取题有什么区别?**
151-2 随机返回(可传 `typeId` 筛选);151-4 按 `typeId`+`page` 分页查,适合"我要第 N 类第 M 页"的确定取题。
## 相关能力 / 下一步阅读
- [拿到谜底后怎么校验用户答案?API 不代判,需自建比对逻辑](https://www.showapi.com/guides/riddle-answer-check-151)
- [免费额度怎么用不超:猜一猜谜语 API 的调用频控与缓存建议](https://www.showapi.com/guides/riddle-rate-limit-151)
- [营销裂变:用猜一猜谜语 API 做答题抽奖与互动游戏](https://www.showapi.com/guides/riddle-marketing-activity-151)
- **本系列共 13 篇**:查看[猜一猜谜语 API 指南总目录](https://www.showapi.com/guides/riddle-guides-151)