歇后语查询没有分类参数?本地标签化与分主题展示的 workaround
# 歇后语查询没有分类参数?本地标签化与分主题展示的 workaround
- **接口/接入点**:歇后语查询 · 1635-1
- **是否免费**:是
- **请求方式**:POST / GET
- **返回格式**:JSON
- **适用人群**:已接入用户、前端/后端开发者
- **阅读时间**:约 7 分钟
## 核心要点
- **已核实**:接口描述提到节气/季节/动物/人物/谐音等分类,但请求参数**只有 `num`**,无 `category` 入参(OpenAPI YAML `parameters: []` 仅 `num`)。
- 不要编造分类参数;正确做法:拉全量 → 本地按规则打标签 → 分主题缓存展示。
- 这是把"文档缺口"转成可落地的工程实践,既诚实又实用。
## Why:为什么这是个坑
页面介绍写着"可查询节气、季节、动物、昆虫、人物、谐音等各类经典歇后语",很容易让人以为能传 `category=动物`。但 YAML 明确只有一个 `num` 参数。**硬传 `category` 会被忽略或报错**,需求方想要"动物周专题"就做不出来。本文给一条真实的 workaround。
## What:事实核对
| 来源 | 内容 |
|------|------|
| 文档页描述 | 提到节气/季节/动物/昆虫/人物/谐音等分类 |
| OpenAPI YAML | `parameters: []`,仅 `num`(随机返回几条) |
| 结论 | **无分类筛选入参**,不能按主题直接请求 |
## How:本地标签化方案
### 步骤 1 — 拉全量建库
```python
import requests, sqlite3
def build_tagged_bank():
conn = sqlite3.connect("bank.db")
conn.execute("""CREATE TABLE IF NOT EXISTS xh(
question TEXT UNIQUE, answer TEXT, tags TEXT)""")
seen = set()
for _ in range(8): # 语料有限,多拉几轮累积
r = requests.post("https://route.showapi.com/1635-1",
params={"appKey": "YOUR_APPKEY"},
data={"num": "10"}, timeout=15)
body = r.json()["showapi_res_body"]
if body.get("ret_code") != "0":
break
for it in body["contentlist"]:
if it["question"] in seen: continue
seen.add(it["question"])
tags = rule_tag(it["question"], it["answer"])
conn.execute("INSERT OR IGNORE INTO xh VALUES(?,?,?)",
(it["question"], it["answer"], ",".join(tags)))
conn.commit(); conn.close()
def rule_tag(q, a):
# 简单关键词规则,按需扩展;不依赖接口分类参数
rules = {
"动物": ["猫","狗","牛","马","鸡","鱼","鸟","虎","龙","鼠"],
"人物": ["刘备","阿斗","诸葛亮","张飞","关公","孔明"],
"谐音": ["音","谐"],
}
tags = []
for tag, kws in rules.items():
if any(k in q or k in a for k in kws):
tags.append(tag)
return tags or ["未分类"]
```
### 步骤 2 — 按主题抽取展示
```sql
SELECT question, answer FROM xh WHERE tags LIKE '%动物%' ORDER BY RANDOM() LIMIT 5;
```
## 返回示例与解析
返回的仍是标准结构(`contentlist` 数组),分类标签是**你本地算出来的**,不是接口返回的字段。
## 进阶 / 边界
- **规则可扩展**:关键词表可人工维护,也能用简单模型判主题,但分类能力完全在你这边。
- **语料有限**:`allNum` 示例 19,标签库规模有限;接口定期更新时可重跑建库补充。
- **诚实优先**:对外文档/产品说明不要写"支持按分类查询",避免误导。
## FAQ
**Q:接口到底有没有 category 参数?**
A:没有。已与官方 OpenAPI YAML 核实,请求参数仅 `num`;页面描述里的分类是语料题材,不是可请求参数。
**Q:传 category 会怎样?**
A:接口不认,要么被忽略要么按默认返回,不要依赖它做主题筛选。
**Q:本地标签准吗?**
A:取决于你的规则,简单关键词匹配覆盖有限;可作为轻量方案,精确分类需人工校对。
**Q:能按"节气"分类吗?**
A:同样只能本地做:拉全量后按节气关键词/人工标注归类,接口不支持直接请求。
**Q:语料太少标签没意义?**
A:语料有限(`allNum` 示例 19),标签库规模小;可累积 + 定期重跑,适合轻量主题展示。
## 相关能力 / 下一步阅读
- [歇后语查询 num 参数详解:随机条数、maxResult 与返回上限](https://www.showapi.com/guides/xiehouyu-num-param-1635)
- [K12 国学教育产品如何批量集成歇后语查询做文化栏目](https://www.showapi.com/guides/xiehouyu-k12-plan-1635)
- **本系列共 13 篇**:查看[歇后语查询指南总目录](https://www.showapi.com/guides/xiehouyu-guides-1635)