技术博客
歇后语查询没有分类参数?本地标签化与分主题展示的 workaround

歇后语查询没有分类参数?本地标签化与分主题展示的 workaround

作者: 万维易源
2026-08-31
歇后语查询分类参数本地标签最佳实践
# 歇后语查询没有分类参数?本地标签化与分主题展示的 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)