HELLO, DEVELOPER.

从一句 Hello,
开始新的可能。

把一份小小的快乐,接进你的下一个作品。

第一次调用

接口入口是当前站点的 /api/v1,无需账号或 API Key。当前是开发预览,正式公共域名尚未切换。

const response = await fetch('/api/v1/hitokoto');
const result = await response.json();
if (!response.ok) throw new Error(result.error.message);
console.log(result.data.text);

在其他程序调用时加上站点地址。本机预览示例:

curl 'http://127.0.0.1:3018/api/v1/answerbook'
在调试器里试一下

读取响应

默认返回 JSON:文字在 data.text,图片链接在 data.url。一言保留原始数字 ID、分类、出处与作者;分页结果提供 items 和 pagination。

{
  "data": {
    "id": 1,
    "uuid": "9818ecda-9cbf-4f2a-9af8-8136ef39cfcd",
    "text": "与众不同的生活方式很累人呢,因为找不到借口。",
    "category": "a",
    "source": "幸运星",
    "author": null
  },
  "meta": {
    "apiVersion": "1",
    "dataVersion": "2169e848bd430b57"
  }
}

文本接口支持 format=txt。两类 Emoji 支持 format=image,返回 307 跳转到 Google 图片地址;在 cURL 中使用 -L 跟随跳转。错误始终是 JSON。

匿名跨域调用允许 GET、HEAD 与 OPTIONS,不携带 Cookie。随机结果不缓存;固定查询可在浏览器缓存 60 秒、CDN 缓存 1 小时。响应头 X-Data-Version 标识数据版本,X-Request-Id 用于定位单次请求。

图片索引查询成功并不保证外部图片可访问。浏览器无法跨域获取图片字节时,可使用图片链接或直接打开请求地址。动态 Emoji 预览需要手动播放。

接口目录

完整参数、默认值与响应结构来自同一份接口定义:OpenAPI 3.1

接口路径查询参数
随机一言/api/v1/hitokotocategory / format
答案之书/api/v1/answerbookformat
疯狂星期四/api/v1/crazythursdayformat
颜文字/api/v1/emoticonformat
发疯文学/api/v1/fafengtarget / format
今日运势/api/v1/jrysluck / format
Emoji 合成/api/v1/emojileft / right / format
动态 Emoji/api/v1/dynamic-emojiemoji / format
假面骑士索引/api/v1/kamen-ridersrider / random / page / pageSize
答案之书固定页/api/v1/answerbook/pages/{page}无
一言分页/api/v1/hitokoto/allcategory / page / pageSize
按原始 ID 查询一言/api/v1/hitokoto/{id}format
可合成 Emoji 目录/api/v1/emoji/catalogq / page / pageSize
动态 Emoji 目录/api/v1/dynamic-emoji/catalogq / page / pageSize
接口目录/api/v1/catalog无
健康检查/api/v1/health无

列表分页从 1 开始,每页最多 100 条,超出范围返回空列表。Emoji 接受实际表情或完整 Unicode 编码;省略合成接口的两颗表情会随机返回一组已收录的组合,仅省略一颗会报错。运势为随机抽签,不能保证同一人当天得到相同结果。

新版本不接受旧接口的 type、emoji1、emoji2 等参数。请分别改用 format、left、right;旧站仍保持原来的行为。

答案之书:固定页码

GET /api/v1/answerbook/pages/1 返回 data.id、text、page、totalPages,使用相同的 meta 与错误格式,仅支持 JSON、无查询参数。当前共 263 页,按构建数据稳定顺序编号;同一 meta.dataVersion 内,翻回同一页会得到同一答案。数据版本更新后请清空页码缓存。

页码必须为正整数;0、负数、小数或非数字返回 400 / INVALID_PAGE,超出总页数返回 404 / PAGE_NOT_FOUND。原来的 /api/v1/answerbook 仍随机返回 id 与 text,并继续支持 format=txt。

处理错误

状态码含义建议
400参数无效、重复或未知按详情页修改请求参数
404路径、内容或组合未收录检查路径或选择其他内容
405方法不支持改用 GET、HEAD 或 OPTIONS
414查询参数过长缩短查询字符串
500服务异常稍后重试,并保留 requestId
{
  "error": {
    "code": "NO_COMBINATION",
    "message": "这两颗 Emoji 还没有收录组合,换一颗试试。"
  },
  "requestId": "本次请求标识"
}

每一份灵感,都有来处。

文字、Emoji Kitchen 配方与骑士索引由旧项目的本地内容迁移,构建时校验并去重。数据更新后随站点版本发布;第一版不连接数据库,也不保存抽取历史。

合成图片由 Google Emoji Kitchen 提供。动态表情来自 Google Animated Noto Emoji,遵循 CC BY 4.0;使用时请保留归属信息。

骑士图片使用响应中的 url 直链进行展示;sourcePage 是 Kamen Rider Wiki / Fandom 的出处文件页,不是图片地址。外部图片加载失败时会显示提示,仍可尝试打开原图。历史文本与图片的具体再分发范围仍需逐项核对。

答案与运势仅供娱乐。减少动画的系统设置会生效,手机可以点击选择表情,无需拖动。