
在网站首页、个人博客、导航站、APP 启动页、登录页和后台管理系统中,经常会看到一句简短的文案。
比如:
text
生活不止眼前的代码,还有诗和远方。
或者:
text
保持热爱,奔赴下一场山海。
这类文案看起来只是页面上的一个小细节,但对用户体验很有帮助。它可以让页面不那么生硬,也能提升产品的情绪价值。
如果每次都手动维护句子,不仅麻烦,而且内容容易重复。一言经典语录 API 可以通过接口返回一句随机语录,适合用在网站文案展示、博客签名、每日一句、APP 提示语和内容卡片中。
接口文档地址:
https://apizero.cn/marketplace/hitokoto
一、接口适合的业务场景
一言经典语录 API 适合用于"随机获取一句文案"的场景。
常见应用包括:
| 业务场景 | 使用方式 |
|---|---|
| 个人博客 | 首页展示每日一句 |
| 导航网站 | 顶部展示随机语录 |
| 登录页面 | 表单旁展示温暖提示 |
| 管理后台 | 欢迎页展示一句话 |
| APP启动页 | 展示一句短文案 |
| 小程序首页 | 提升页面氛围感 |
| 内容卡片 | 生成可分享的语录卡片 |
| AI工具站 | 输出页增加轻量文案 |
这种接口不属于复杂业务接口,但非常适合用来优化页面细节。
二、为什么需要一言API
很多开发者会把一句话直接写在页面里。
例如:
html
<p>愿你今天也有好心情。</p>
这种方式简单,但存在几个问题。
1. 内容固定,缺少新鲜感
用户每次打开页面都看到同一句话,时间久了就没有感觉。
2. 手动维护成本高
如果想经常换文案,需要手动修改代码或后台配置。
3. 多端复用不方便
网站、APP、小程序、后台系统如果都需要展示语录,单独维护会比较混乱。
4. 不利于做内容扩展
如果后续要做每日一句、语录卡片、用户收藏、分享海报等功能,固定文案不够灵活。
接入一言 API 后,系统可以自动获取随机语录,前端只负责展示,后端可以做缓存和日志,整体更容易维护。
三、接口调用方式
一言经典语录接口属于 GET 类型接口。
接口地址:
text
https://apizero.cn/marketplace/hitokoto
常见调用方式:
text
GET https://apizero.cn/marketplace/hitokoto
如果接口支持分类或返回格式参数,可以根据业务传入对应字段。
常见参数设计可以参考下面这种结构:
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| type | string | 否 | 语录分类,例如文学、动漫、励志 |
| format | string | 否 | 返回格式,例如 json、text |
| length | number | 否 | 句子长度限制 |
| scene | string | 否 | 使用场景,例如 blog、app、login |
实际接入时,以接口文档中的参数说明为准。
四、返回结果结构设计
一言接口可能直接返回文本,也可能返回 JSON 结构。
如果直接返回文本,结果可能是:
text
保持热爱,奔赴山海。
如果返回 JSON,常见结构可能如下:
json
{
"code": 200,
"msg": "success",
"result": {
"content": "保持热爱,奔赴山海。",
"author": "佚名",
"from": "经典语录",
"type": "励志"
}
}
常见字段说明:
| 字段 | 说明 |
|---|---|
| code | 接口状态码 |
| msg | 返回信息 |
| result | 返回结果 |
| content | 语录内容 |
| author | 作者 |
| from | 来源 |
| type | 分类 |
前端展示时,建议重点展示 content,作者和来源可以作为辅助信息展示。
五、HTML页面直接使用
如果接口返回文本内容,可以在页面加载后请求接口并写入页面。
html
<div class="hitokoto-box">
<p id="hitokoto">正在加载一句话...</p>
</div>
<script>
async function loadHitokoto() {
const el = document.getElementById("hitokoto");
try {
const response = await fetch("https://apizero.cn/marketplace/hitokoto");
const text = await response.text();
el.innerText = text || "今天也要保持热爱。";
} catch (error) {
el.innerText = "今天也要保持热爱。";
}
}
loadHitokoto();
</script>
简单样式:
css
.hitokoto-box {
max-width: 720px;
margin: 40px auto;
padding: 24px;
border-radius: 16px;
background: #f7f8fa;
color: #333;
line-height: 1.8;
font-size: 18px;
}
这类写法适合个人主页、博客、导航页等轻量场景。
六、JavaScript调用示例
如果接口返回 JSON,可以这样处理:
javascript
async function getHitokoto() {
const url = "https://apizero.cn/marketplace/hitokoto";
try {
const response = await fetch(url);
const data = await response.json();
if (data.code === 200 && data.result) {
return data.result.content;
}
return "保持热爱,继续前进。";
} catch (error) {
return "保持热爱,继续前进。";
}
}
getHitokoto().then(sentence => {
console.log(sentence);
});
如果页面需要点击刷新一句话:
html
<p id="sentence">点击按钮获取一句话</p>
<button onclick="refreshSentence()">换一句</button>
<script>
async function refreshSentence() {
const sentence = await getHitokoto();
document.getElementById("sentence").innerText = sentence;
}
</script>
七、Vue项目接入示例
在 Vue 项目中,可以把一言语录放在首页、登录页或欢迎页。
vue
<template>
<div class="home">
<div class="sentence-card">
<p>{{ sentence }}</p>
<button @click="loadSentence">换一句</button>
</div>
</div>
</template>
<script setup>
import { ref, onMounted } from "vue";
const sentence = ref("正在加载一句话...");
async function loadSentence() {
try {
const response = await fetch("https://apizero.cn/marketplace/hitokoto");
const text = await response.text();
sentence.value = text || "保持热爱,继续前进。";
} catch (e) {
sentence.value = "保持热爱,继续前进。";
}
}
onMounted(() => {
loadSentence();
});
</script>
<style scoped>
.home {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.sentence-card {
max-width: 640px;
padding: 32px;
border-radius: 20px;
background: #ffffff;
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.08);
text-align: center;
line-height: 1.8;
}
</style>
如果接口返回 JSON,可以把 response.text() 改成 response.json(),然后读取对应字段。
八、React项目接入示例
React 项目中可以使用 useEffect 在页面加载时请求接口。
jsx
import { useEffect, useState } from "react";
export default function HitokotoCard() {
const [sentence, setSentence] = useState("正在加载一句话...");
async function loadSentence() {
try {
const response = await fetch("https://apizero.cn/marketplace/hitokoto");
const text = await response.text();
setSentence(text || "保持热爱,继续前进。");
} catch (error) {
setSentence("保持热爱,继续前进。");
}
}
useEffect(() => {
loadSentence();
}, []);
return (
<div className="card">
<p>{sentence}</p>
<button onClick={loadSentence}>换一句</button>
</div>
);
}
这种组件可以复用在首页、用户中心、空状态页面和登录页中。
九、Python后端接入示例
如果项目不希望前端直接请求第三方接口,可以通过 Python 后端转发。
python
import requests
def get_hitokoto():
url = "https://apizero.cn/marketplace/hitokoto"
try:
response = requests.get(url, timeout=10)
return {
"code": 200,
"data": response.text
}
except requests.exceptions.Timeout:
return {
"code": 504,
"msg": "一言接口请求超时",
"data": "保持热爱,继续前进。"
}
except Exception as e:
return {
"code": 500,
"msg": str(e),
"data": "保持热爱,继续前进。"
}
result = get_hitokoto()
print(result)
Flask 封装示例:
python
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/api/hitokoto")
def hitokoto():
result = get_hitokoto()
return jsonify(result)
前端只需要请求自己的接口:
text
/api/hitokoto
这样可以更方便地做缓存、限流和兜底。
十、Java后端接入示例
Java 项目可以使用 OkHttp 调用。
java
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class HitokotoApiDemo {
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://apizero.cn/marketplace/hitokoto")
.get()
.build();
Response response = client.newCall(request).execute();
if (response.body() != null) {
System.out.println(response.body().string());
}
}
}
Spring Boot 中可以封装为 Service:
java
@Service
public class HitokotoService {
public String getSentence() {
// 这里封装HTTP请求、缓存、异常处理和默认文案
return "保持热爱,继续前进。";
}
}
Controller 示例:
java
@RestController
@RequestMapping("/api")
public class HitokotoController {
@Resource
private HitokotoService hitokotoService;
@GetMapping("/hitokoto")
public String hitokoto() {
return hitokotoService.getSentence();
}
}
十一、Node.js接入示例
Node.js 可以使用 axios。
javascript
const axios = require("axios");
async function getHitokoto() {
const url = "https://apizero.cn/marketplace/hitokoto";
try {
const response = await axios.get(url, {
timeout: 10000
});
return {
code: 200,
data: response.data
};
} catch (error) {
return {
code: 500,
msg: "一言接口调用失败",
data: "保持热爱,继续前进。"
};
}
}
getHitokoto().then(console.log);
Express 封装示例:
javascript
const express = require("express");
const app = express();
app.get("/api/hitokoto", async (req, res) => {
const data = await getHitokoto();
res.json(data);
});
app.listen(3000, () => {
console.log("server running at http://localhost:3000");
});
十二、PHP接入示例
PHP 可以使用 curl 请求接口。
php
<?php
$url = "https://apizero.cn/marketplace/hitokoto";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo "保持热爱,继续前进。";
} else {
echo $response;
}
curl_close($ch);
如果是博客主题或传统模板项目,可以直接把结果渲染到页面指定位置。
十三、在博客系统中的应用
一言 API 非常适合放在博客首页。
常见位置包括:
- 首页标题下方
- 文章列表顶部
- 侧边栏签名
- 文章详情页底部
- 关于页面
- 404 页面
推荐逻辑:
text
用户打开博客首页
↓
前端请求一言接口
↓
展示随机语录
↓
接口失败时展示默认文案
如果博客访问量较高,建议不要每次都直接请求第三方接口,可以通过后端缓存当天语录。
十四、在登录页中的应用
登录页通常比较单调,一言语录可以让页面更有温度。
适合展示的位置:
text
登录表单右侧
页面底部
背景图上方
欢迎语下面
示例文案结构:
html
<div class="login-tip">
<p id="hitokoto">正在加载今日一句...</p>
</div>
配合壁纸、渐变背景或玻璃拟态卡片,可以明显提升页面质感。
十五、在APP和小程序中的应用
APP 和小程序中可以把一言语录用于:
- 启动页
- 首页顶部
- 签到页面
- 用户中心
- 空状态页面
- 每日推荐
- 分享卡片
推荐接入方式:
text
应用启动
↓
读取本地缓存语录
↓
后台请求新语录
↓
更新缓存
↓
下次打开展示新内容
移动端不要频繁请求接口,建议按天缓存,减少网络请求和加载延迟。
十六、缓存策略设计
一言接口虽然轻量,但正式项目中仍然建议增加缓存。
1. 前端本地缓存
适合个人项目和轻量页面。
javascript
function getToday() {
return new Date().toISOString().slice(0, 10);
}
async function loadDailySentence() {
const cache = JSON.parse(localStorage.getItem("hitokoto_cache") || "{}");
const today = getToday();
if (cache.date === today && cache.sentence) {
return cache.sentence;
}
const sentence = await getHitokoto();
localStorage.setItem("hitokoto_cache", JSON.stringify({
date: today,
sentence
}));
return sentence;
}
2. 后端缓存
适合正式业务项目。
推荐使用 Redis:
text
请求一句话
↓
查询 Redis 缓存
↓
缓存存在:直接返回
↓
缓存不存在:请求一言API
↓
写入缓存
↓
返回结果
缓存 key 示例:
text
hitokoto:daily:2026-06-04
hitokoto:login
hitokoto:blog
十七、数据库表设计
如果只是展示一句随机文案,不需要数据库。
如果要做历史记录、收藏、每日一句、分享卡片,可以设计日志表和收藏表。
1. 语录记录表
sql
CREATE TABLE hitokoto_log (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(500) NOT NULL COMMENT '语录内容',
author VARCHAR(100) DEFAULT NULL COMMENT '作者',
source VARCHAR(100) DEFAULT NULL COMMENT '来源',
scene VARCHAR(50) DEFAULT NULL COMMENT '使用场景',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
2. 用户收藏表
sql
CREATE TABLE hitokoto_favorite (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
content VARCHAR(500) NOT NULL COMMENT '收藏内容',
author VARCHAR(100) DEFAULT NULL COMMENT '作者',
source VARCHAR(100) DEFAULT NULL COMMENT '来源',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
有了这些表,可以继续做:
- 我的收藏
- 每日一句归档
- 热门语录统计
- 分享海报生成
- 内容推荐
十八、异常处理方案
一言接口接入简单,但也要考虑接口异常。
常见异常包括:
| 异常情况 | 处理方式 |
|---|---|
| 接口超时 | 展示默认文案 |
| 返回为空 | 使用本地兜底语录 |
| JSON解析失败 | 按文本格式处理 |
| 网络错误 | 使用缓存内容 |
| 高频刷新 | 增加按钮冷却时间 |
推荐准备几条本地兜底文案:
javascript
const fallbackSentences = [
"保持热爱,继续前进。",
"慢慢来,比较快。",
"今天也要认真生活。",
"代码会报错,但人不能停止思考。"
];
随机取一条:
javascript
function getFallbackSentence() {
const index = Math.floor(Math.random() * fallbackSentences.length);
return fallbackSentences[index];
}
十九、页面体验优化建议
一言语录属于细节功能,展示方式会直接影响观感。
建议注意以下几点:
1. 字数不要太长
首页、登录页、卡片页面更适合短句。过长会影响排版。
2. 字体层级要轻
不要让语录抢主标题的视觉重点,可以使用较浅颜色。
3. 增加淡入动画
让句子出现得更自然。
css
.hitokoto {
opacity: 0;
animation: fadeIn 0.6s ease forwards;
}
@keyframes fadeIn {
to {
opacity: 1;
}
}
4. 换一句按钮不要太突兀
如果支持刷新语录,按钮可以做得轻量一点,比如文字按钮或小图标。
5. 移动端注意换行
短句最好居中展示,长句要控制最大宽度。
二十、项目落地方案
如果只是做个人博客,可以这样落地:
text
页面加载
↓
请求一言API
↓
展示一句话
↓
失败时展示默认文案
如果是正式项目,可以这样设计:
text
前端请求自己的后端接口
↓
后端查询Redis缓存
↓
缓存没有再请求一言API
↓
结果写入缓存和日志
↓
前端展示内容
如果是 APP 或小程序,可以这样设计:
text
打开应用
↓
优先展示本地缓存
↓
后台刷新新语录
↓
更新本地缓存
↓
第二次打开展示新内容
这样既能保证页面加载速度,也能减少外部接口依赖。
二十一、总结
一言经典语录 API 是一个很适合做页面氛围优化的轻量接口。
它可以用于:
- 博客首页每日一句
- 网站登录页提示语
- APP 启动页文案
- 小程序首页语录
- 管理后台欢迎语
- 404 页面提示
- 分享卡片内容
- AI 工具站输出页点缀
推荐的接入方式是:
text
轻量页面:前端直接请求
正式项目:后端转发并缓存
移动端:本地缓存优先
异常情况:使用默认文案兜底
通过一言经典语录 API,可以用很低的开发成本,让页面多一点温度,也让产品细节更完整。
接口文档地址: