免费名言警句:在教育平台 / 网站 / App 中集成"每日一句"
# 免费名言警句:在教育平台 / 网站 / App 中集成"每日一句"
> 接口 1839-1 · 免费 · 适用人群:产品经理、全栈工程师 · 阅读时间:约 6 分钟
## 核心要点
- "每日一句"是名言接口最自然的落地场景:定时取一句、前端卡片展示、配合缓存省钱。
- 推荐架构:定时任务回源(带缓存)→ 落本地库/缓存 → 前端按日取展示,不直接高频打接口。
- 作者内嵌在 `content` 里,前端若需分开显示"名言/作者",需在后端拆分。
## Why
教育类产品用"每日一句"培养晨读习惯,企业官网用名言点缀首页,社群 App 用随机励志句做推送——这些都是低开发成本、高质感的正向场景。关键不在"调接口",而在"怎么调才稳、才不超额度"。本文给你一条从触发到展示的全链路设计。
## What
**接口速览**
| 项 | 值 |
|----|----|
| 用途 | 随机名言,适合"每日一句"/随机激励 |
| 参数 | `num`(最多 10) |
| 注意 | 免费档位有限,必须配合缓存,避免前端每次刷新直连接口 |
## How
### 步骤 1:设计数据表(缓存池)
```sql
CREATE TABLE daily_quote (
id INT PRIMARY KEY AUTO_INCREMENT,
content TEXT NOT NULL, -- 名言 + 作者合并串
author VARCHAR(64), -- 后端拆分出的作者(可空)
used_at DATETIME, -- 上次展示时间
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
```
### 步骤 2:后端定时回源 + 落库(带缓存)
```python
import requests, re, schedule, time
def fetch_and_store():
resp = requests.get(
"https://route.showapi.com/1839-1",
params={"appKey": "YOUR_APPKEY", "num": "10"},
timeout=15,
).json()
body = resp["showapi_res_body"]
if body.get("ret_code") != "0":
return # 失败不阻断,沿用旧数据
for it in body["contentlist"]:
text = it["content"]
# 简单拆分作者:以 —— / -- / (朝代) 结尾
m = re.search(r"(.*?)[——\-–—.]?\s*([\u4e00-\u9fa5A-Za-z·]+(?[0-9A-Za-z\u4e00-\u9fa5]+)?)\s*$", text)
author = m.group(2) if m else None
# INSERT INTO daily_quote(content, author) VALUES (%s,%s)
print(text, author)
# 每小时补充一次,避免高频实时调用
schedule.every(1).hours.do(fetch_and_store)
while True:
schedule.run_pending()
time.sleep(30)
```
### 步骤 3:前端按"日"取展示
前端不直接调用接口,而是读你自己的 `daily_quote` 表(或缓存),按日期取当天一句展示为卡片。
```html
<div class="quote-card">
<p id="q-content">加载中…</p>
<footer id="q-author"></footer>
</div>
<script>
fetch("/api/quote/today").then(r => r.json()).then(d => {
document.getElementById("q-content").textContent = d.content;
document.getElementById("q-author").textContent = d.author || "";
});
</script>
```
## 返回示例与解析
回源返回结构见[返回字段全解](https://www.showapi.com/guides/famous-quotes-response-fields-1839);落库与展示均在你的服务端完成,接口只作为"补给源"。
## 进阶 / 边界
- **不要前端直连接口**:既暴露 AppKey,又易超免费档位;务必走服务端代理 + 缓存。
- **作者拆分是 best-effort**:`content` 格式不完全统一,拆分逻辑要容错,拆不出就整句展示。
- **重复展示**:用 `used_at` 记录,避免同一句在短期内反复出现。
## FAQ
**Q1:前端能直接调接口吗?**
A:不建议。AppKey 会暴露在前端,且高频直连易超免费档位;应经服务端代理 + 缓存。
**Q2:每天只更新一句够吗?**
A:够。"每日一句"本就一天一条;用 `num=10` 批量补充、按日轮转即可。
**Q3:作者显示不出来?**
A:作者内嵌在 `content` 字符串,需后端正则拆分,格式不一致时允许整句展示。
**Q4:接口挂了会影响我的页面吗?**
A:不会——有本地缓存/落库兜底,回源失败沿用旧数据即可。
## 相关能力 / 下一步阅读
- [免费名言警句:如何设计缓存策略,避免重复调用浪费免费档位](https://www.showapi.com/guides/famous-quotes-cache-1839)
- [免费名言警句:num 参数怎么用?最多 10 条与"随机返回"机制](https://www.showapi.com/guides/famous-quotes-num-param-1839)
- [免费名言警句:返回字段全解(contentlist / ret_code / allNum)](https://www.showapi.com/guides/famous-quotes-response-fields-1839)
- **本系列共 10 篇**:查看[免费名言警句指南总目录](https://www.showapi.com/guides/famous-quotes-guides-1839)