API

答案之书 API

最后更新:2026-06-19

一个纯随机的应答接口。问一个问题,得到一句原创短句——不接 AI、不算命、零数据留存。约 1/8 概率掉落公有领域古诗隐藏款。

概览

接口

GET /api/oracle

鉴权

无需

速率限制

每分钟 3 次 / IP

返回格式

application/json

请求

只需一个 GET 请求,不需要任何参数、请求体或请求头。

请求
GET https://echoir.xyz/api/oracle

成功响应 200

响应体
{
  "answer": "风已经在吹了,扬帆吧。",
  "kind": "modern",
  "source": null,
  "meta": {
    "service": "Echoir Oracle",
    "site": "https://echoir.xyz",
    "description": "纯随机应答,不接 AI。每约 8 次有概率掉落公有领域古诗隐藏款。"
  }
}

字段说明

  • answer string

    应答文本。普通款为原创现代短句;诗意款为公有领域真实诗句。

  • kind "modern" | "poetic"

    答案类型。普通款 modern,古诗隐藏款 poetic(约 1/8 概率)。

  • source string | null

    出处。仅诗意款返回(如「—— 苏轼」),普通款为 null

  • meta object

    接口元信息,含服务名、站点地址与简介。

超限响应 429

超过每分钟 3 次限制时返回。响应头会带上标准限流信息,方便调用方自适应等待。

响应头
Retry-After: 38
X-RateLimit-Limit: 3
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1750000000
响应体
{
  "error": "rate_limited",
  "message": "请求过于频繁,限制为每分钟 3 次。",
  "retry_after": 38
}
  • Retry-After header · 秒

    距离窗口重置还需等待多少秒。

  • X-RateLimit-Reset header · unix 时间戳

    当前固定窗口的结束时间(UTC)。

  • retry_after number

    响应体里的同款字段,方便代码读取。

跨域 & 预检

接口允许任意来源跨域调用(Access-Control-Allow-Origin: *),浏览器前端可直接 fetch。OPTIONS 预检请求返回 204

代码示例

cURL
curl https://echoir.xyz/api/oracle
JavaScript
const res = await fetch("https://echoir.xyz/api/oracle");
if (res.status === 429) {
  const wait = res.headers.get("Retry-After");
  console.log(`稍等 ${wait} 秒`);
  return;
}
const { answer, kind, source } = await res.json();
console.log(`${answer}${source ? "  " + source : ""}`);
Python
import requests, time

res = requests.get("https://echoir.xyz/api/oracle")
if res.status_code == 429:
    wait = int(res.headers.get("Retry-After", 60))
    print(f"稍等 {wait} 秒")
    time.sleep(wait)
    res = requests.get("https://echoir.xyz/api/oracle")

data = res.json()
print(data["answer"])
if data.get("source"):
    print(" ", data["source"])

为什么只开放答案之书

塔罗与八字每次调用都要消耗 AI 推理,公开接口会被滥用、迅速耗尽额度。答案之书是纯前端随机,不依赖任何模型,几乎没有运行成本——这是它唯一适合开放的原因。我们也不打算把这个接口做成 B2B 产品,它只是一个允许被机器消费的轻量应答器。