把 AIHOT 接进你的 Agent
Skill、MCP、RSS、API 四种方式读的是同一份数据:精选、热点、日报、周报和月报,按你用的工具选一种就行。全部匿名只读,不用注册,也不用 API Key。
下面复制出去的配置里带一个本机生成的匿名标识,只用来合并统计,不是账号或密钥,清除浏览器数据后会换新。详见隐私说明。
匿名 GET,拿来就能用
不用 token;浏览器跨域、curl 和各语言默认的 HTTP 客户端都能直接调。路径是 /api/v1,字段和错误码以 OpenAPI 为准。
curl --compressed -A 'aihot-api/2.0.0 aihot-actor/<actor-uuid>' 'https://aihot.news/api/v1/items?mode=selected&window=24h&limit=20'按分类筛选
在资讯请求中加上 category,只取对应分类;不传则包含全部分类。返回条目的 category 也使用下表中的值。
| 分类 | 请求参数 |
|---|---|
| AI 模型 | category=ai-models |
| AI 产品 | category=ai-products |
| 行业动态 | category=industry |
| 论文 | category=paper |
| 教程 | category=tip |
| 观点 | category=opinion |
用得省,也更快
- 01开压缩
curl 加
--compressed,其他客户端打开 gzip 或 br。JSON 压缩后只有原来的 1/4 到 1/8。 - 02带上 ETag
保存响应里的 ETag,下次带
If-None-Match;内容没变时返回 304,不传正文。 - 03按节奏取
资讯和热点最快一分钟一次;日报每天 08:00 后取一次,周报、月报出刊后取一次;往回翻页翻到已有的那条就停。
内容多久变一次:新资讯全天陆续进来,精选每天变几次到几十次,日报每天 08:00、周报每周一 10:00、月报每月 1 日 10:30(北京时间)各一期。同一个 IP 每分钟超过约 60 次会收到 429,请按 Retry-After 等待,不要并发重试。
接口一览
| 路径 | 用来做什么 | 多久取一次 |
|---|---|---|
| 资讯 | ||
/api/v1/items | 精选或最近 7 天全部动态,可按分类、时间窗、关键词筛 | 最快 1 分钟一次 |
| 热点与事件 | ||
/api/v1/hot-topics | 当前热点榜 Top 10 | 最快 1 分钟一次 |
/api/v1/stories/{publicId} | 一个事件的报道时间线、AI 综述和关联事件 | 需要时 |
| 日报 | ||
/api/v1/dailies/latest | 最新一期日报 | 每天 08:00 后一次 |
/api/v1/dailies/{date} | 指定日期日报;撤稿会移除引用 | 缓存过期后使用前验证 ETag |
/api/v1/dailies | 日报日期索引 | 每天一次 |
| 周报与月报 | ||
/api/v1/weeklies/latest | 最新一期周报:头条、总述和一周重点,按栏目分好 | 每周一 10:00 后一次 |
/api/v1/weeklies/{week} | 指定一周,ISO 周如 2026-W39;撤稿会移除引用 | 缓存过期后使用前验证 ETag |
/api/v1/weeklies | 周报索引 | 每周一次 |
/api/v1/monthlies/latest | 最新一期月报 | 每月 1 日 10:30 后一次 |
/api/v1/monthlies/{month} | 指定月份,如 2026-09 | 缓存过期后使用前验证 ETag |
/api/v1/monthlies | 月报索引 | 每月一次 |
| Tibo 重置监控 | ||
/api/v1/codex-resets/recent | 最近 7 天和尚未落地的预告,几 KB | 10 分钟一次 |
/api/v1/codex-resets | 完整日历,最近 30 天的帖子带全文 | 只在要看历史时,最多 10 分钟一次 |
| 给 AI 助手 | ||
/api/v1/agent | 给 Agent 的使用说明,列出的地址返回整理好的中文 Markdown;Skill 用的就是它们 | 需要时 |
| 完整精选同步 | ||
/api/v1/selected/snapshot | 当前全部精选,分页一次拿全 | 只在第一次 |
/api/v1/selected/changes | 之后的新增、修改和撤选 | 几分钟一次 |
常见用法
# 第一次:保存响应头里的 ETag
curl --compressed -A 'aihot-api/2.0.0 aihot-actor/<actor-uuid>' -i 'https://aihot.news/api/v1/items?mode=selected&window=24h&limit=20'
# 之后最快每分钟一次,带上 ETag;返回 304 就是没变化
curl --compressed -A 'aihot-api/2.0.0 aihot-actor/<actor-uuid>' -i -H 'If-None-Match: <上次的 ETag>' 'https://aihot.news/api/v1/items?mode=selected&window=24h&limit=20'需要往回翻页时,把 page.nextCursor 作为 cursor 传回去,翻到已经有的那条就停,不要每次把 7 天重翻一遍。
出错了怎么办
- 400
- 参数不对:按 OpenAPI 和返回的 code 修正,不要自动换成更宽的查询。cursor 无效或滑出时间窗返回 invalid_cursor,从第一页重来。
- 409
- snapshot_required:增量没法安全续上,重新取一次完整快照。
- 429
- 请求太密:按 Retry-After 等待,不要并发重试。
- 5xx
- 指数退避,先用上次成功的结果;公开服务不承诺 SLA。
- 566/567
- 被边缘安全规则拦下(很小的 JSON):保留 requestId,正常退避后最多再试一次,还不行就去反馈页。不要换 User-Agent 或伪装浏览器。
能匿名调用不等于所有用途都获许可:个人、公益和组织内部使用免费;对外商业产品、收费服务、代理接口或批量再分发须先取得书面授权,见公开使用规则。
旧接口迁移(2026 年 10 月 31 日停用)
我的项目还在调用 AIHOT 的旧接口 /api/public/*,它会在 2026 年 10 月 31 日停止服务。
请读取 https://aihot.news/llms.txt 和 https://aihot.news/openapi-v1.json,然后:
1. 在我的代码里找出所有调用 /api/public/ 的地方,列给我看;
2. 按 v1 的字段映射改写,注意 url→links.original、permalink→links.aihot、title_en→originalTitle、source→source.name;把代码和配置里的 aihot.virxact.com 全部换成 aihot.news;
3. 不要复用旧的 cursor 或 ETag;精选同步要重新取一次 v1 snapshot;
4. 请求加上压缩和 If-None-Match,轮询间隔不短于 60 秒;
5. 改完告诉我哪些地方需要我人工确认。| 旧入口 | 新入口或替代 | 注意 |
|---|---|---|
https://aihot.virxact.com/… | https://aihot.news/…(同一路径) | 旧域名与旧接口同日起只做跳转;API、RSS、MCP 的地址都换成新域名 |
/api/public/items | /api/v1/items | take 改为 limit;since 改用覆盖 window 后按 publishedAt 收窄;去掉 fields |
/api/public/hot-topics | /api/v1/hot-topics | 照旧读取当前热点 |
/api/public/daily | /api/v1/dailies/latest | 最新日报;从响应顶层的 report 读取 |
/api/public/daily/{date} | /api/v1/dailies/{date} | 北京时间日期;从顶层 report 读取 |
/api/public/dailies?take= | /api/v1/dailies?limit= | 日报索引;读取 schemaVersion、count 和 items |
/api/public/selected/snapshot | /api/v1/selected/snapshot | 迁移时重新取一次 v1 快照 |
/api/public/selected/changes?take= | /api/v1/selected/changes?limit= | 旧 cursor 不能复用;照旧读取顶层 hasMore 和 cursor |
/api/public/fingerprint | 对 v1 完整 URL 用 ETag/If-None-Match | 返回 304 表示内容没变 |
/api/public/version | 换成最新 Skill;普通查询不再查版本 | 旧 0.x Skill 的升级桥,保留,不停用 |
字段对照:url 改读 links.original,permalink 改读 links.aihot,title_en 改读 originalTitle,source 改读 source.name;items 顶层的 count/hasNext/nextCursor 改读 page.count/page.hasMore/page.nextCursor;attribution 从 { source, canonical } 改为 { name, url };错误统一为 Problem JSON。
v1 只接受 OpenAPI 里声明且不重复的参数;旧客户端带的 _ 防缓存参数、未知参数或重复参数要去掉,否则返回 400。
这些不用改:RSS 的路径和 GUID 不变(只把域名换成 aihot.news);/api/public/version 继续作为旧 0.x Skill 的升级桥,在旧域名上也保留。
迁移遇到阻塞:在反馈页说明用途和卡住的地方,我们会单独确认。