# 渣男语录使用档位与频率限制:如何避免触发限流
- **接口/接入点**:免费渣男语录(apiCode=2962,接入点 1) · **是否免费**:免费(有使用档位限制) · **请求方式**:POST/GET · **返回格式**:JSON · **适用人群**:已接入用户、做自动化的开发者 · **阅读时间**:约 5 分钟
## 核心要点
- 渣男语录**免费**,但文档明确"为防止滥用设有使用档次限制"——具体档位数字文档未给出,以[官方档位说明](https://www.showapi.com/free-api)为准,**不编造**。
- 客户端做**节流(令牌桶)+ 缓存去重**,既能避免触发限制,也能减少无意义的重复调用。
- 本接口是随机返回,缓存"同一用户短时间内的结果"即可降频,不影响体验。
## Why:这跟我有什么关系
- 把语录做成机器人彩蛋/定时推送时,若不做限流,高频调用可能踩到档位上限,导致请求被拒。
- 免费接口虽无按次费用,但滥用会被限流;合理的客户端策略让你"免费且稳"。
## What:关于档位的事实
| 项 | 说明 |
|----|------|
| 是否免费 | 是,注册后默认可调用 |
| 是否有频率/档位限制 | 有(文档:"为防止滥用设有使用档次限制") |
| 具体档位数字 | **文档未给出**,以[官方档位说明页](https://www.showapi.com/free-api)为准 |
| 我能做什么 | 客户端侧节流 + 缓存,留足余量 |
> 注意:本文不臆造任何调用量、QPS、档位数值;具体额度请查阅官方档位说明。
## How:客户端限流与缓存(生产级写法)
### 令牌桶限速(Python 示例)
```python
import time, requests
class TokenBucket:
def __init__(self, rate: float, capacity: float):
self.rate = rate # 每秒补充令牌数(按你的档位留余量)
self.capacity = capacity # 桶容量
self.tokens = capacity
self.ts = time.time()
def acquire(self):
now = time.time()
self.tokens = min(self.capacity, self.tokens + (now - self.ts) * self.rate)
self.ts = now
if self.tokens >= 1:
self.tokens -= 1
return True
return False
bucket = TokenBucket(rate=1.0, capacity=5.0) # 示例:约 1 次/秒,峰值 5
def safe_get(appkey: str) -> str | None:
if not bucket.acquire():
return None # 触发限速,降级处理
r = requests.post("https://route.showapi.com/2962-1",
params={"appKey": appkey}, timeout=10)
return r.json().get("showapi_res_body", {}).get("text")
```
### 缓存去重(避免同一用户短时间重复调用)
```python
from functools import lru_cache
import time
_cache = {}
CACHE_TTL = 30 # 秒
def cached_quote(user_id: str, fetcher) -> str:
now = time.time()
if user_id in _cache and now - _cache[user_id][1] < CACHE_TTL:
return _cache[user_id][0]
txt = fetcher()
_cache[user_id] = (txt, now)
return txt
```
## 返回示例与解析
限流/档位相关返回都体现在业务体 `ret_code`:正常为 `0`;若后端因限流返回异常,请结合 `remark` 与官方档位说明排查。本文不杜撰具体限流错误码。
## 进阶 / 边界
- **留余量**:令牌桶 `rate` 按官方档位**向下取余量**设置,别顶满上限跑。
- **失败退避**:遇到 `ret_code=-1` 或网络异常,用指数退避重试,别盲目猛刷。
- **档位以官方为准**:任何额度数字请看[官方档位说明](https://www.showapi.com/free-api),本文不提供具体数值。
## FAQ
- **Q:免费接口也会被限流?** A:会,文档明确为防滥用设有档位限制,具体额度看官方说明。
- **Q:限流的具体阈值是多少?** A:文档未给出具体数字,以[官方档位说明页](https://www.showapi.com/free-api)为准,本文不编造。
- **Q:缓存会不会让用户总看到同一句?** A:只对"同一用户短时间(如 30 秒)"去重,体验上几乎无感,却能显著降频。
- **Q:ret_code=-1 是限流吗?** A:不是,-1 是"接口准备中";限流表现以官方说明和 `remark` 为准。
- **Q:要不要做服务端队列?** A:中小流量用客户端令牌桶+缓存足够;体量很大再上消息队列削峰。
## 相关能力 / 下一步阅读
- [渣男语录:5 分钟接入,从注册到第一条土味情话](https://www.showapi.com/guides/zhanan-quotes-quickstart-2962)
- [聊天机器人如何接入渣男语录?从调用到展示的全链路设计](https://www.showapi.com/guides/zhanan-quotes-chatbot-integration-2962)
- [渣男语录内容合规与娱乐边界:仅供娱乐的正确姿势](https://www.showapi.com/guides/zhanan-quotes-content-compliance-2962)
- **本系列共 7 篇**:查看[渣男语录指南总目录](https://www.showapi.com/guides/zhanan-quotes-guides-2962)