技术博客
免费经典语句 API 标签筛选:tag 参数怎么用才不出空结果?

免费经典语句 API 标签筛选:tag 参数怎么用才不出空结果?

作者: 万维易源
2026-09-02
免费经典语句APItag标签参数用法筛选
# 免费经典语句 API 标签筛选:tag 参数怎么用才不出空结果? > 元信息:接口 1646-2 · 免费 · 请求方式 POST/GET · 返回 JSON · 适用人群 已接入开发者/产品运营 · 阅读时间 5 分钟 ## 核心要点 - `tag` 是**可选**参数,文档示例值为「学习」,用于按主题筛选语句。 - 不传 `tag` 接口返回默认语句(成功,`ret_code=0`);传了 `tag` 则按主题返回。 - 文档**未列出可用标签清单**,不要预设固定枚举;空结果按"主题不匹配/接口无该主题语料"处理,而非当作报错。 ## Why:为什么单独讲 tag 很多开发者第一次用 `tag` 会误以为"传了就一定会返回我想要的",结果拿到不相关语句或以为失败。本文把 `tag` 的真实语义和边界讲清,避免你在对结果做断言时写出脆弱逻辑。 ## What:参数速览 | 参数 | 位置 | 类型 | 必填 | 说明 | |------|------|------|------|------| | `tag` | Body(POST)或 Query(GET) | String | 否 | 标签筛选,文档示例「学习」 | | `appKey` | Query | String | 是 | 鉴权 | > 注:以上 `tag`/`appKey` 为官方文档列出的参数;其余字段见 [返回字段全解](https://www.showapi.com/guides/classic-quotes-fields-1646)。 ## How:正确传 tag **POST 方式(推荐,表单)** Python: ```python import requests url = "https://route.showapi.com/1646-2" params = {"appKey": "YOUR_APPKEY"} data = {"tag": "学习"} # 可选;不传 data 则返回默认语句 try: resp = requests.post(url, params=params, data=data, timeout=10) js = resp.json() except requests.RequestException as e: print("请求失败:", e) raise if js.get("showapi_res_code") == 0: b = js["showapi_res_body"] if b.get("ret_code") == 0: print(f"{b.get('body')} —— {b.get('author')}《{b.get('name')}》") else: print("业务失败 ret_code=", b.get("ret_code")) ``` cURL: ```bash # 传 tag curl -X POST "https://route.showapi.com/1646-2?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" \ -d "tag=%E5%AD%A6%E4%B9%A0" # 不传 tag(返回默认语句) curl -X POST "https://route.showapi.com/1646-2?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" ``` Node.js(fetch): ```javascript const url = "https://route.showapi.com/1646-2?appKey=YOUR_APPKEY"; const form = new URLSearchParams(); form.append("tag", "学习"); const resp = await fetch(url, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, body: form, }); const js = await resp.json(); if (js.showapi_res_code === 0 && js.showapi_res_body.ret_code === 0) { const b = js.showapi_res_body; console.log(`${b.body} —— ${b.author}《${b.name}》`); } ``` ## 返回示例与解析 传 `tag=学习` 时返回: ```json { "showapi_res_code": 0, "showapi_res_body": { "body": "书山有路勤为径,学海无涯苦作舟。", "author": "韩愈", "ret_code": 0, "name": "古今贤文" } } ``` 无论是否传 `tag`,只要 `ret_code=0` 即视为成功取到一条语句;空结果或异常应看 `ret_code` 与 `showapi_res_error`,而非假设"tag 写错"。 ## 进阶 / 边界 - **可用标签未文档化**:官方只给了「学习」作示例,未提供完整标签表。代码中不要写"支持 N 个标签"之类的量化结论。 - **tag 是软筛选**:文档未承诺精确匹配;对主题一致性敏感的场景,建议在客户端做二次校验或缓存。 - **GET 也可传**:`tag` 同样可作为 query 参数(`?appKey=...&tag=学习`),但中文需 URL 编码。 ## FAQ **Q:不传 tag 会报错吗?** 不会。`tag` 为可选,不传返回默认语句,`ret_code` 仍为 0。 **Q:传了一个不存在的 tag 会怎样?** 文档未定义该行为;以接口实际返回为准。`ret_code` 仍为判断成败的唯一依据,不要对未知 tag 预设"必然失败"。 **Q:tag 支持多个值吗?** 文档仅给出单值示例(如「学习」),未说明多值/数组写法;按单值使用,避免自行拼多值导致不可预期结果。 **Q:怎么知道有哪些可用 tag?** 官方未公布清单,建议以接口实际返回观察,或在产品侧维护你用到的主题白名单,不要假设全量枚举。 **Q:tag 和返回主题不一致怎么办?** tag 为软筛选,文档未承诺完全一致;可结合 [缓存策略](https://www.showapi.com/guides/classic-quotes-cache-1646) 做本地主题库,客户端二次过滤。 ## 相关能力 / 下一步阅读 - [5 分钟接入免费经典语句 API](https://www.showapi.com/guides/classic-quotes-quickstart-1646) — 第一次调用 - [免费经典语句 API 返回字段全解](https://www.showapi.com/guides/classic-quotes-fields-1646) — 字段含义 - [免费接口也要省:经典语句客户端缓存策略](https://www.showapi.com/guides/classic-quotes-cache-1646) — 本地主题库 - **本系列共 11 篇**:查看[免费经典语句 API 开发指南总目录](https://www.showapi.com/guides/classic-quotes-guides-1646)