前言
在信息爆炸的时代,RSS 依然是最高效的信息获取方式之一。通过开发一个 RSS 订阅 Skill,你可以让 OpenClaw 自动监控你喜欢的内容源,生成摘要,并推送到你的聊天频道。
本教程将带你完成一个 RSS 订阅和新闻推送 Skill 的完整开发过程,支持多源聚合、AI 摘要、定时推送和 OPML 导入。
功能概览
| 功能 | 说明 |
|---|---|
| 添加订阅 | 通过 RSS/Atom URL 添加订阅源 |
| OPML 导入 | 批量导入已有的 RSS 订阅 |
| 定时抓取 | 按设定间隔自动检查新内容 |
| AI 摘要 | 自动生成文章摘要 |
| 频道推送 | 将新内容推送到指定聊天频道 |
| 管理订阅 | 查看、删除和分类订阅源 |
前期准备
配置MCP工具
在 ~/.config/openclaw/openclaw.json5 中添加所需的 MCP 工具:
{
mcp: {
servers: {
"http-fetch": {
command: "npx",
args: ["-y", "@openclaw-mcp/http-fetch"]
},
"filesystem": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem",
"--allow-read", "--allow-write",
"~/.openclaw/data/rss/"]
},
"scheduler": {
command: "npx",
args: ["-y", "@openclaw-mcp/scheduler"]
}
}
}
}
创建数据目录:
mkdir -p ~/.openclaw/data/rss/
编写SKILL.md
创建 ~/.openclaw/skills/rss-reader.SKILL.md:
---
name: rss-reader
version: 1.0.0
description: RSS/Atom 订阅监控和新闻推送技能
triggers:
- rss
- 订阅
- subscribe
- 新闻
- news
- 资讯
- feed
mcp_tools:
- http_fetch
- filesystem
- scheduler
---
# RSS 订阅和新闻推送技能
## Description
监控 RSS/Atom 订阅源,自动抓取新内容,生成 AI 摘要,
并推送到用户所在的聊天频道。
## Commands
用户可以通过以下命令与 RSS 技能交互:
### 添加订阅
- "订阅 {URL}" - 添加一个 RSS 订阅源
- "订阅 {URL} 分类到 {分类名}" - 添加并归类
### 管理订阅
- "我的订阅" / "订阅列表" - 查看所有订阅
- "取消订阅 {名称或编号}" - 删除订阅
- "暂停订阅 {名称或编号}" - 暂停更新检查
- "恢复订阅 {名称或编号}" - 恢复更新检查
### 查看内容
- "最新资讯" / "今天的新闻" - 查看最新未读内容
- "查看 {订阅名} 的更新" - 查看特定源的更新
### OPML 操作
- "导入OPML {URL或内容}" - 批量导入订阅
- "导出OPML" - 导出当前所有订阅
### 推送设置
- "设置推送时间 {时间}" - 设定每日推送时间
- "关闭推送" / "开启推送" - 切换推送状态
## Behavior
### 添加订阅流程
1. 用户提供 RSS/Atom URL
2. 使用 http_fetch 获取 feed 内容
3. 解析 feed,提取标题、描述等元信息
4. 保存到 ~/.openclaw/data/rss/feeds.json
5. 确认订阅成功,显示源名称和最近文章数
### 定时抓取流程
1. 每 30 分钟(默认,可配置)检查所有活跃订阅
2. 使用 http_fetch 获取 feed 最新内容
3. 与已存储的文章对比,找出新增文章
4. 对新文章生成 AI 摘要(50-100字)
5. 存储新文章到 articles.json
6. 如果开启了推送,发送到用户频道
### OPML 导入流程
1. 解析 OPML XML 内容
2. 提取所有 feed URL 和分类信息
3. 逐个验证 feed 可访问性
4. 批量添加到 feeds.json
5. 报告导入结果(成功数、失败数)
## Data Schema
### feeds.json
```json
{
"feeds": [
{
"id": "feed_001",
"url": "https://example.com/rss.xml",
"title": "Example Blog",
"description": "A great blog about tech",
"category": "技术",
"status": "active",
"pollInterval": 1800,
"lastChecked": "2026-03-28T10:00:00+08:00",
"lastUpdated": "2026-03-28T09:30:00+08:00",
"addedAt": "2026-03-25T14:00:00+08:00",
"channelType": "telegram",
"channelId": "12345678"
}
]
}
articles.json
{
"articles": [
{
"id": "art_20260328_001",
"feedId": "feed_001",
"title": "Article Title",
"url": "https://example.com/post/123",
"publishedAt": "2026-03-28T08:00:00Z",
"summary": "AI生成的文章摘要...",
"isRead": false,
"isPushed": false
}
]
}
Output Format
Subscription Added Successfully
✅ 订阅成功!
📰 名称:{源名称}
🔗 地址:{URL}
📁 分类:{分类}
📊 当前文章数:{N} 篇
最近 3 篇文章:
1. {标题1} ({日期1})
2. {标题2} ({日期2})
3. {标题3} ({日期3})
Subscription List
📋 你的 RSS 订阅(共 {N} 个)
技术:
1. ✅ Example Blog (最后更新: 2小时前) [feed_001]
2. ✅ Tech News (最后更新: 30分钟前) [feed_002]
设计:
3. ⏸️ Design Weekly (已暂停) [feed_003]
未分类:
4. ✅ Personal Blog (最后更新: 1天前) [feed_004]
News Push
📬 今日资讯推送 (2026-03-28)
━━━━━━━━━━━━━━━━
📰 Example Blog
▸ {文章标题1}
{50-100字AI摘要}
🔗 阅读全文
▸ {文章标题2}
{50-100字AI摘要}
🔗 阅读全文
━━━━━━━━━━━━━━━━
📰 Tech News
▸ {文章标题3}
{50-100字AI摘要}
🔗 阅读全文
━━━━━━━━━━━━━━━━
共 {N} 条新内容
Push Schedule Configuration
用户可以自定义推送时间:
- 默认每日推送时间:08:00 和 18:00
- 支持自定义:任意时间点,多个时间点
- 使用 scheduler 工具注册定时任务
推送配置存储在 feeds.json 的顶层:
{
"pushSettings": {
"enabled": true,
"times": ["08:00", "18:00"],
"timezone": "Asia/Shanghai",
"maxArticlesPerPush": 20,
"summarize": true
},
"feeds": [...]
}
OPML Format Reference
导入时支持标准 OPML 格式:
<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
<head>
<title>My Subscriptions</title>
</head>
<body>
<outline text="技术" title="技术">
<outline type="rss" text="Example Blog"
xmlUrl="https://example.com/rss.xml"
htmlUrl="https://example.com"/>
</outline>
</body>
</opml>
导出时生成同样格式的 OPML,用户可以导入到其他 RSS 阅读器。
Error Handling
- URL 无法访问:提示用户检查 URL 是否正确
- 非 RSS/Atom 格式:尝试自动发现页面中的 feed 链接
- 抓取频率限制:尊重 feed 的 TTL 设置和 HTTP Cache 头
- 存储文件损坏:自动备份并从备份恢复
## 高级配置
### 自定义抓取间隔
不同类型的订阅源可以设置不同的抓取间隔:
```json5
// 在 openclaw.json5 中为 RSS 技能添加额外配置
{
skillConfig: {
"rss-reader": {
defaultPollInterval: 1800, // 默认 30 分钟
minPollInterval: 300, // 最少 5 分钟
maxArticlesStore: 1000, // 最多存储 1000 篇文章
summaryMaxLength: 100, // 摘要最大字数
autoCleanupDays: 30 // 自动清理 30 天前的文章
}
}
}
内容过滤
你可以为某个订阅源设置关键词过滤:
订阅 https://example.com/rss.xml 只看包含 AI 或 机器学习 的文章
Skill 会在 feed 配置中记录过滤规则,抓取时只保留匹配的文章。
测试流程
# 重启以加载技能
openclaw restart
# 确认技能已加载
openclaw skill list
测试场景:
-
添加一个知名 RSS 源(如 Hacker News):
订阅 https://hnrss.org/frontpage -
查看订阅列表:
我的订阅 -
查看最新内容:
最新资讯 -
测试 OPML 导入(使用一个在线 OPML 文件)
-
设置推送时间并等待触发
推荐RSS源
以下是一些优质的中文 RSS 源,适合用来测试:
| 名称 | URL | 分类 |
|---|---|---|
| 少数派 | https://sspai.com/feed |
科技 |
| 36氪 | https://36kr.com/feed |
创投 |
| InfoQ 中文 | https://www.infoq.cn/feed |
技术 |
| 编程随想 | 自行搜索 | 技术 |
| Hacker News | https://hnrss.org/frontpage |
技术 |
总结
RSS 订阅 Skill 把 OpenClaw 变成了一个智能信息聚合器。通过 AI 摘要和定时推送,你可以在不被信息淹没的前提下紧跟重要动态。这个 Skill 也展示了如何组合多个 MCP 工具(HTTP 请求、文件存储、定时任务)来实现复杂功能。