新闻管理 API
复制任务给 AI Agent:采集今日 AI 新闻并自动发布,随后出片、投稿 B 站;投稿失败会发邮件通知。
会员专属 API 文档
登录会员账号后,VIP 会员可查看 API 使用文档并管理自己的 Key。
API Key 管理当前使用的 Key:正在加载…管理密钥
设置默认 Key 后,复制提示词会自动携带。密钥可随时查看、禁用或删除。
正在验证 VIP 身份…
点击查看明文,复制可直接配置 Agent。
让 Agent 跑完今日全链路
复制完整任务,自动附带默认 Key:采集即发布 → 出片 → 投稿 B 站,失败发邮件通知。
请完成今天(以北京时间为准)的 AI 新闻全链路,四步依次做完,不要中途停下来问我要不要继续:① 采集今日新闻并直接发布到我的新闻站点;② 发布后自动制作当日视频;③ 自动投稿到 B 站;④ B 站投稿若失败,发邮件通知我(我会自己处理,你不要反复重试投稿)。
第一步:检索顺序与选题优先级- 先检索和整理国内 AI 新闻、国内产品及面向国内用户的服务,再补充国外重要动态。各地区内优先整理福利羊毛、合法白嫖机会及漏洞与安全资讯,再整理常规产品、模型和行业新闻;不要为凑数量收录低质量内容。
- 福利羊毛重点关注官方免费额度、限时免费、免费试用、优惠活动、教育或开发者福利,以及可免费使用的开源模型与工具。核实活动是否仍有效,注明适用人群、地区、领取入口、额度、截止时间、是否绑卡及自动续费;未披露的信息写明未披露,不能把付费或有条件试用写成永久免费。
- 漏洞与安全资讯优先选择厂商公告、CVE/CNVD/CNNVD 等可信披露,说明受影响产品和版本、影响范围、修复版本与缓解建议;区分已确认漏洞和未经证实的传闻。白嫖选题以官方授权及合法免费资源为准。
站点:https://www.wlphp.com
API Key:复制时自动填入默认 Key
所有请求使用 HTTPS,并将 Key 放入 X-Api-Key 请求头。这把 Key 有新闻与分类的完整读写权限,只在本任务中使用,不要写进日志、代码仓库或对外发送。
GET /news/open/categories:读取分类。GET /news/open/list?date=YYYY-MM-DD&page=1&limit=100:查重,遍历所有分页。POST /news/open/save:写入新闻,字段含 title、content、news_date、category_id、summary、source_name、source_url、keywords、importance、status。POST /news/open/notify:发告警邮件给我,参数subject(≤120 字)、message(≤5000 字);收件人由站点配置决定,不用传。相同内容 6 小时内只发一封,每小时最多 10 封。
核实原始来源与北京时间的发布时间,以今日新发布或有实质更新的资讯为主,不编造;按 source_url 和标题去重,同一事件优先保留原始来源,避免重复入库。使用中文编写标题、摘要与正文,优先使用现有分类。写入前先自查一遍:标题、摘要、正文无错别字与事实错误,来源链接可打开,福利信息有截止时间或「未披露」,漏洞信息有受影响版本与修复版本。确认无误后以 "status": 1 写入,即自动审核通过并公开;published_at 留空即可,站点会自动设为当前时间。不要写成草稿,也不要写入后再改状态。逐条记录返回的新闻 ID。本任务写站一律直接调这个接口;write_site.py 是给「先写草稿、人工审核」的旧流程用的,固定写 status=0,不要用它。
新闻全部写入成功后,在本机 E:\ai-videos 工程里按 shared/daily-news/README.md 的流程执行,用共享库脚本,不要另写一套:
- 还没建当期项目就
python shared/daily-news/new_project.py --date YYYY-MM-DD;目录已存在时不要加--force(会清掉 work/ 与 output/),直接复用; set DAILY_NEWS_PROJECT=projects/daily-news-YYYY-MM-DD,然后python shared/daily-news/scripts/check_published.py --date YYYY-MM-DD取当日已发布新闻:退出码 0 才继续,2 表示站点还没有已发布新闻(停止并说明原因,等下一轮),3 表示本期已出过片(跳过出片,直接进入第三步);- 按当期
assets/script.json模板写稿,然后validate_script.py(需要时--fix-target按实际字数重算目标时长)→build.py→bash shared/daily-news/scripts/run_acceptance.sh; - 验收不通过时按脚本输出的问题修改后重跑,不要绕过或放宽验收判据;连续两次修不好就停止并走第四步通知我。
出片并验收通过后,先 python shared/daily-news/scripts/prep_bilibili.py --date YYYY-MM-DD 备投稿包,再 python shared/daily-news/scripts/publish_bilibili.py --dry-run 看一遍要提交的内容,确认标题、分区、标签、封面无误后去掉 --dry-run 正式投稿(B 站 cookie 已就绪,不需要重新登录)。分区与字段上限以工程内的 B 站真源配置为准,不要手写分区 id。判成功只看三条:脚本退出码 0、输出里解析出 bvid、回读校验无问题。默认只投一次;已投过的成片脚本会拒绝重投,这是保护,不要加 --force。
出现下列任一情况,立即用 POST /news/open/notify 发一封邮件,然后结束任务、等我处理:
publish_bilibili.py退出码为 1(投稿失败,含「退出码 0 但解析不出 bvid」);- 退出码为 2(稿件已提交但回读校验发现问题);
- cookie 缺失 / 登录失效、分区查不到、投稿包不合规等导致脚本中止;
- 出片环节连续两次验收不通过。
邮件 subject 固定以「B站投稿失败 · YYYY-MM-DD」或「出片失败 · YYYY-MM-DD」开头;message 写清:失败发生在哪一步、退出码、脚本最后 20 行报错、当期项目名、成片文件名、已生成的 bvid(若有)、建议我下一步看什么。不要为了「跑通」而重试投稿或改参数绕过检查 —— 重复稿件和静默投错分区比失败更麻烦。
收尾汇报最后按顺序汇报:① 今日入库并发布的新闻(先国内后国外,标出福利与安全资讯,列出标题、分类、来源链接和新闻 ID);② 视频是否出片成功、成片文件名与验收结论;③ B 站投稿结果(bvid、分区、回读是否一致);④ 若失败,说明第几步失败、通知邮件是否已发出。
示例curl -H "X-Api-Key: 完整 Key" "https://www.wlphp.com/news/open/categories"
API 使用文档接口、参数与返回格式 · 展开查看
所有 /news/open/* 接口均需认证。只接受 X-Api-Key 请求头,不接受 query/body 中的 api_key。
统一返回格式
{
"code": 0,
"msg": "",
"time": 1793000000,
"data": {}
}
| HTTP 状态 / code | 含义 |
|---|---|
200 / 0 | 成功 |
400 / 1 | 参数或业务校验失败 |
401 | 缺少或无效的 API Key |
403 | Key 已禁用或已过期 |
404 | 新闻或分类不存在 |
429 / 1 | 告警邮件发送过于频繁(仅 /news/open/notify) |
GET /news/open/list 查询新闻
默认返回所有未软删除新闻(含草稿、已发布、下架);可按状态筛选。
| 参数 | 说明 |
|---|---|
date | 新闻日期,格式 YYYY-MM-DD |
start_date / end_date | 日期范围 |
category_id | 分类 ID |
keyword | 匹配标题、摘要或关键词 |
status | 0 草稿 / 1 已发布 / 2 下架;不传则全部 |
page / limit | 分页;limit 1–100,默认 20 |
GET /news/open/detail?id=65 查询单条新闻
返回完整记录,包括正文、来源、分类、状态与发布时间。
POST /news/open/save 新建或更新新闻
使用表单或 JSON 字段。id 省略或为 0 表示新建;填写现有 ID 表示更新。status 可设为 0 草稿、1 发布或 2 下架。
| 字段 | 要求 |
|---|---|
title | 必填,最多 200 字 |
content | 必填,Markdown 正文,最多 200000 字 |
news_date | 必填,YYYY-MM-DD |
category_id | 可选;0=未分类,其他值必须存在 |
summary | 最多 1000 字 |
source_name | 最多 100 字 |
source_url | 完整 HTTP/HTTPS URL,最多 2000 字 |
cover | 站内相对路径或 HTTP/HTTPS URL,最多 1000 字 |
keywords | 最多 255 字 |
importance | 0 普通 / 1 重要 / 2 头条 |
published_at | 可选;status=1 且留空时自动设为当前时间 |
POST /news/open/delete 软删除新闻
参数:id。设置 deleted_at,不会物理删除记录。
GET /news/open/categories 查询分类
返回分类 ID、名称、排序与启用状态。
POST /news/open/categorySave 新建或更新分类
参数:id(省略或 0=新建)、name(必填,最多 60 字)、sort、status(0/1)。分类名不能重复。
POST /news/open/categoryDelete 删除分类
仅当该分类没有任何关联新闻(包含软删除记录)时允许删除。
POST /news/open/notify 发送流水线告警邮件
用于把「B 站投稿失败」「出片失败」等告警发到站长邮箱。参数:subject(必填,最多 120 字)、message(必填,纯文本,最多 5000 字,换行会保留)。收件人不接受调用方指定:只取站点设置的 blogger_email,未配置时回落到 SMTP 发件账号。相同 subject + message 6 小时内只发一封;每小时最多 10 封,超出返回 429。返回 data.sent 表示本次是否实际发出,data.deduped=true 表示因重复被跳过。