RSS Digest - 资讯流聚合技能
基于你自己的 quotedance-service Feeds API 和本地 RSSHub (http://localhost:1200),为 Agent 提供一个「最近几天资讯流」的聚合能力。
- 默认:先从 quotedance-service 获取你已启用的订阅源,再由本地逐个抓取 RSS,生成 Markdown 资讯流。
- 可选:支持按 资讯源名称关键字 过滤,例如“只看 少数派 / 机核网 / 某个专栏”。
- 支持简单的 本地缓存,在配置的 TTL 内重复调用不会频繁打服务端和 RSS 源站。
配置
配置文件:skills/quotedance-rss-digest/config.json
{
"serviceUrl": "https://quotedance.api.gapgap.cc",
"apiKey": "与 qutedance-quotes 相同的 API Key",
"rsshubUrl": "http://localhost:1200",
"defaults": {
"recentDays": 3,
"limit": 100,
"cacheTtlMinutes": 30,
"sourceCacheTtlMinutes": 15
}
}
- serviceUrl:quotedance-service 的线上地址(与你现在使用的一致)
- apiKey:和
qutedance-quotes/config.json 中一致,通过 X-API-Key 鉴权
- rsshubUrl:你本地 RSSHub 服务地址(当订阅源
rss_url 为相对路径时会自动拼接)
- defaults.recentDays:默认拉取「最近几天」的天数
- defaults.limit:最终输出的最大文章数量
- defaults.cacheTtlMinutes:缓存有效期,分钟
- defaults.sourceCacheTtlMinutes:订阅源列表缓存有效期,分钟(默认建议 15)
能力
1️⃣ 全部订阅源资讯流
- 调用 quotedance-service:
GET /feeds/registry
- 通过
X-API-Key 自动识别用户,返回该用户 已启用的订阅源列表
- 脚本在本地做:
- 逐个抓取订阅源的
rss_url(支持 RSS / Atom)
- 本地聚合并去重(优先按链接去重)
- 只保留最近
recentDays 天内的文章
- 截断为最多
limit 条
- 格式化为 Markdown 列表(标题、来源、时间、链接)
- 结果写入简单缓存文件(同一参数组合在 TTL 内重复调用直接命中缓存)
2️⃣ 按资讯源名称筛选
- 用户可以在对话中描述:
- “看下少数派最近几天的文章”
- “只看机核网的更新”
- 脚本会:
- 先从
/feeds/registry 拉取该用户订阅源
- 本地抓取这些订阅源的 RSS 内容并聚合
- 在本地用 资讯源名称关键字 做模糊过滤(例如匹配
source_name / feed_title / source.name 等字段)
- 同样支持最近 N 天过滤与缓存
注意:由于服务端的数据结构可能调整,脚本在取“来源名称”时做了多种字段兜底,只要大致有个 source/name/title 字段就能工作。
在对话中如何使用
当用户说:
- “帮我汇总下最近几天的资讯流”
- “看下我订阅源最近 3 天有啥值得看的”
- “只看 少数派 的更新”
- “汇总最近 5 天我所有订阅源的新文章”
Agent 应该:
- 选择本技能
rss-digest
- 推断参数:
- 若用户没有提天数 → 使用
defaults.recentDays
- 若用户提到“最近 N 天 / 两三天 / 一周左右” → 转成具体天数
- 若提到具体资讯源名称 → 作为 name 关键字过滤
- 调用脚本生成 Markdown 资讯流,并直接展示给用户,必要时做少量总结。
手动脚本用法
从 workspace-quotedance 目录运行:
cd ~/.openclaw/workspace-quotedance
# 默认:最近 defaults.recentDays 天,全部源
node skills/quotedance-rss-digest/scripts/rss-digest.js
# 指定最近 N 天
node skills/quotedance-rss-digest/scripts/rss-digest.js --days 5
# 只看某个资讯源(按名称关键字模糊匹配)
node skills/quotedance-rss-digest/scripts/rss-digest.js --name 少数派
# 同时指定天数和输出数量
node skills/quotedance-rss-digest/scripts/rss-digest.js --days 7 --limit 50
# 强制刷新(忽略文章缓存和订阅源缓存)
node skills/quotedance-rss-digest/scripts/rss-digest.js --refresh
# 只刷新订阅源列表(文章缓存仍按原规则)
node skills/quotedance-rss-digest/scripts/rss-digest.js --refresh-sources
# 清空缓存并立即重新抓取
node skills/quotedance-rss-digest/scripts/rss-digest.js --clear-cache
目录结构
skills/quotedance-rss-digest/
├── SKILL.md
├── config.json
├── scripts/
│ └── rss-digest.js
└── memory/
└── rss-cache-*.json # 本地缓存(脚本运行时自动创建)
实现概要
- 从
config.json 读取:
serviceUrl / apiKey / rsshubUrl / defaults
- 请求 quotedance-service:
- 使用
X-API-Key 做鉴权
- 调用
/feeds/registry 获取当前用户已启用订阅源
- 本地处理:
- 先读取订阅源缓存(
sourceCacheTtlMinutes),超时后重新请求 /feeds/registry
- 对每个订阅源抓取 RSS/Atom(
rss_url 为相对路径时会拼接 rsshubUrl)
- 聚合、去重并按发布时间倒序排序
- 根据
recentDays 过滤最近几天的文章
- 可选按
name 关键字过滤资讯源
- 限制输出为
limit 条
- 生成结构化 Markdown 文本
- 结合
cacheTtlMinutes 做文章缓存(按 days + name + limit 组合区分)