Use when 用户想向 BestBlogs 添加一个或多个 RSS 订阅源,或导入 OPML 订阅列表。
从用户提供的文本、文件或 OPML 中提取 RSS 地址,调用 BestBlogs Admin API 逐个添加为订阅源。
完整 API 参数详情见 references/api_reference.md。
bestblogs-fetcherbestblogs-daily-digest、bestblogs-weekly-curator、bestblogs-article-recommenderbestblogs-process-* 或对应 worker skillssuccess: false 的 HTTP 200 也要按失败处理bestblogs-fetcher:读取 BestBlogs 内容、期刊和来源元数据bestblogs-weekly-curator:基于已有内容做每周精选策展manage-daily-content:将 BestBlogs 作为每日内容 sourcing 输入bestblogs-process-*:处理 BestBlogs 中已入库但待分析/翻译的内容完整认证配置见
../../references/shared/auth-bestblogs.md。
本 skill 仅使用 Admin API(添加订阅源)。
| 端点 | 方法 | 类型 | 用途 |
|---|---|---|---|
/api/admin/source/addRssUrl | POST | 写入 | 添加 RSS 订阅源 — 写操作,必须在用户明确确认后才能调用 |
- [ ] 阶段一: 解析输入,提取 RSS URL
- [ ] 阶段二: 展示列表,等待用户确认 ⛔ BLOCKING
- [ ] 阶段三: 串行执行添加
- [ ] 阶段四: 输出汇总报告
根据用户输入类型提取 RSS 地址:
纯文本输入 — 从文本中识别所有 RSS/Atom feed URL:
/feed, /rss, /atom, .xml, /feeds/ 等路径的 URLhttp:// 或 https:// 开头)OPML 文件输入 — 解析 OPML XML 结构:
.opml 或 .xml 文件<outline> 元素中的 xmlUrl 属性值xmlUrl 的分类节点(仅有 text/title 的父节点)text 或 title 属性作为来源名称辅助展示将提取到的 RSS URL 列表展示给用户:
从输入中解析到 **N** 个 RSS 订阅源:
| # | RSS URL | 来源名称(如有) |
|---|---------|-----------------|
| 1 | https://example.com/feed | Example Blog |
| 2 | https://another.com/rss | - |
| ... | ... | ... |
确认添加以上订阅源?(y/n)
⛔ BLOCKING — 必须等待用户明确确认后才能执行添加操作。用户可以要求移除某些条目后再确认。
用户确认后,逐个调用 API 添加订阅源。必须串行执行,不要并行,以减轻系统压力。
python3 scripts/examples/bestblogs_add_rss_source.py \
--rss-url "https://example.com/feed"
执行规则:
[3/10] ✅ https://example.com/feed → SOURCE_f1142f错误处理:
通用错误码见
../../references/shared/error-handling-bestblogs.md。
本 skill 特有的错误处理:
400: 请求参数错误,记录错误信息,继续下一个success: false: 业务错误(如 URL 已存在、格式无效等),记录 message 字段内容,继续下一个全部执行完成后,输出汇总:
## 添加订阅源完成
✅ 成功:M 个 | ❌ 失败:N 个 | 共计:T 个
### 成功列表
| # | RSS URL | Source ID |
|---|---------|-----------|
| 1 | https://example.com/feed | SOURCE_f1142f |
| ... | ... | ... |
### 失败列表(如有)
| # | RSS URL | 错误原因 |
|---|---------|---------|
| 1 | https://bad.com/rss | URL 格式无效 |
| ... | ... | ... |