← 返回 Skills 市场
fuzzyb33s

RSS Aggregator

作者 Fuzzyb33s · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ✓ 安全检测通过
85
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install fuzzy-rss-aggregator
功能描述
Monitor, filter, and summarize RSS/Atom feeds on a schedule. Use when: (1) tracking industry news or competitor blogs, (2) setting up keyword alerts across m...
使用说明 (SKILL.md)

RSS Aggregator

Monitor RSS/Atom feeds on a schedule, filter by keywords or date, and route summaries to your preferred channel.

Setup

Requires the feedparser Python package:

pip install feedparser

Core Script

Save as scripts/fetch_feeds.py:

#!/usr/bin/env python3
"""RSS/Atom feed fetcher with filtering and summarization."""
import feedparser
import sys
import json
from datetime import datetime, timedelta
from pathlib import Path

def parse_date(entry):
    """Extract publication date from entry."""
    for field in ('published_parsed', 'updated_parsed', 'created_parsed'):
        if hasattr(entry, field) and entry.get(field):
            return datetime(*entry[field][:6])
    return None

def fetch_feed(url, max_age_days=None, keyword_filter=None):
    """Fetch and filter feed entries."""
    feed = feedparser.parse(url)
    entries = feed.entries

    # Filter by age
    if max_age_days:
        cutoff = datetime.now() - timedelta(days=max_age_days)
        entries = [e for e in entries if parse_date(e) and parse_date(e) >= cutoff]

    # Filter by keyword
    if keyword_filter:
        kw_lower = keyword_filter.lower()
        entries = [e for e in entries if kw_lower in (e.get('title', '') + e.get('summary', '')).lower()]

    return {
        'title': feed.feed.get('title', url),
        'url': url,
        'entries': [
            {
                'title': e.get('title', 'No title'),
                'link': e.get('link', ''),
                'published': parse_date(e).isoformat() if parse_date(e) else None,
                'summary': e.get('summary', e.get('description', ''))[:500]
            }
            for e in entries
        ]
    }

if __name__ == '__main__':
    url = sys.argv[1] if len(sys.argv) > 1 else ''
    max_age = int(sys.argv[2]) if len(sys.argv) > 2 else None
    keyword = sys.argv[3] if len(sys.argv) > 3 else None

    if not url:
        print(json.dumps({'error': 'URL required'}))
        sys.exit(1)

    result = fetch_feed(url, max_age, keyword)
    print(json.dumps(result, indent=2))

Recipes

Recipe 1: Daily News Digest

cron_add(
  name="Tech news digest",
  schedule={"kind": "cron", "expr": "0 8 * * 1-5", "tz": "Africa/Johannesburg"},
  payload={
    "kind": "agentTurn",
    "message": "Run: python scripts/fetch_feeds.py https://news.ycombinator.com/rss 7. Then summarize the top 5 stories as a clean bullet list with titles and links."
  },
  delivery={"mode": "announce"},
  sessionTarget="isolated"
)

Recipe 2: Multi-Feed Monitoring

// First, create scripts/multi_fetch.py:
"""
import feedparser, json, sys
from scripts.fetch_feeds import fetch_feed

feeds = [
    "https://techcrunch.com/feed/",
    "https://www.theverge.com/rss/index.xml",
    "https://feeds.feedburner.com/TechCrunch/"
]

results = [fetch_feed(url, max_age_days=1) for url in feeds]
print(json.dumps(results, indent=2))
"""

Then schedule:

cron_add(
  name="Industry pulse",
  schedule={"kind": "cron", "expr": "0 */6 * * *", "tz": "UTC"},
  payload={
    "kind": "agentTurn",
    "message": "Run: python scripts/multi_fetch.py. Filter entries from last 6 hours. Post new articles to #news channel on Discord with title + link."
  },
  delivery={"mode": "announce"},
  sessionTarget="isolated"
)

Recipe 3: Keyword Alert

cron_add(
  name="AI keyword alert",
  schedule={"kind": "cron", "expr": "0 */4 * * *", "tz": "UTC"},
  payload={
    "kind": "agentTurn",
    "message": "Run: python scripts/fetch_feeds.py https://feeds.feedburner.com/venturebeat/Settings 1 \"AI OR machine learning OR LLM\". If results have entries, format as: **Alert** [Article Title](URL). Send to Discord #alerts channel."
  },
  delivery={"mode": "webhook", "to": "https://discord.com/api/webhooks/..."},
  sessionTarget="isolated"
)

Recipe 4: Feed Status Health Check

cron_add(
  name="Feed health check",
  schedule={"kind": "cron", "expr": "0 9 * * *", "tz": "UTC"},
  payload={
    "kind": "agentTurn",
    "message": "Check if these feeds are still live: Hacker News (https://news.ycombinator.com/rss), TechCrunch (https://techcrunch.com/feed/). Run fetch without filters. If any feed returns 0 entries or error, alert via webhook."
  },
  delivery={"mode": "announce"},
  sessionTarget="isolated",
  failureAlert={"after": 3, "mode": "announce", "cooldownMs": 86400000}
)

Recipe 5: Feed to Read Later (Notion)

cron_add(
  name="RSS to Notion",
  schedule={"kind": "cron", "expr": "0 7 * * *", "tz": "Africa/Johannesburg"},
  payload={
    "kind": "agentTurn",
    "message": "Run: python scripts/fetch_feeds.py https://example.com/rss 1. Create Notion page for each entry in your Reading List database with title, link, and summary as page content."
  },
  delivery={"mode": "none"},
  sessionTarget="isolated"
)

Managing Feeds

# Test a feed directly
python scripts/fetch_feeds.py \x3Cfeed-url> [max-age-days] [keyword-filter]

# Example
python scripts/fetch_feeds.py https://news.ycombinator.com/rss 7
python scripts/fetch_feeds.py https://techcrunch.com/feed/ 1 "AI"

Feed Discovery

Find RSS feeds on any website by:

  • Adding /feed or /rss to the URL
  • Checking the page source for \x3Clink rel="alternate" type="application/rss+xml">
  • Using site:rss search on Google

Common feed URLs:

  • YouTube: https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID
  • Twitter/X: No native RSS — use替他 (Nitter for Twitter lists)
  • Reddit: https://www.reddit.com/r/SUBREDDIT.rss (requires auth for full content)

Troubleshooting

Symptom Cause Fix
Empty entries list Feed may require auth or be XML-only Try curl to inspect raw feed
decode error in feed Malformed encoding Add , encoding='utf-8' to feedparser.parse()
Unicode errors Non-UTF8 characters Add , response_encoding='utf-8' to parse call
Old entries only max_age_days too restrictive Increase or remove the filter
Missing summaries Site blocks feed scrapers Use e.get('content', [{}])[0].get('value', '') for full content

See Also

  • fuzzy-cron-scheduler skill — scheduling recurring feed checks
  • notion-integration skill — storing articles in Notion
  • discord skill — routing articles to Discord channels
  • webhook-automation skill — HTTP delivery to any endpoint
安全使用建议
This skill appears to do exactly what it says, but take these precautions before installing: (1) Only configure trusted webhook URLs and third‑party integrations (Discord, Notion) because feed contents will be posted to them. Do not paste production tokens into example code; store them securely in your scheduler/integration settings. (2) Be cautious about which feed URLs you schedule — the agent will fetch them and could be used to probe internal-only endpoints (SSRF risk) if run in an environment with internal network access. Limit scheduled feeds to known, public sources. (3) Review any cron/schedule payloads you add so they don't include sensitive data in plain text. (4) If you want stricter control, avoid allowing autonomous runs or run the skill in an isolated environment. If you want me to, I can show how to adapt the script to validate feed hostnames and to avoid posting to unknown endpoints.
功能分析
Type: OpenClaw Skill Name: fuzzy-rss-aggregator Version: 1.0.0 The fuzzy-rss-aggregator skill is a standard utility for fetching and filtering RSS/Atom feeds. The core logic in `scripts/fetch_feeds.py` uses the well-known `feedparser` library to process feeds and provides basic filtering by date and keyword. The instructions in `SKILL.md` are well-documented, providing legitimate recipes for scheduling tasks and integrating with external platforms like Discord and Notion without any signs of malicious intent, data exfiltration, or prompt injection attacks.
能力评估
Purpose & Capability
Name/description match the contents: SKILL.md and scripts/fetch_feeds.py implement feed fetching, filtering, summarization, scheduling recipes, and delivery to webhooks/third‑party services. Required artifacts (a small Python script and feedparser) are proportionate to the claimed purpose.
Instruction Scope
Instructions are focused on fetching feeds and routing summaries. They do direct output to external endpoints (Discord webhooks, Notion, generic webhooks) which is expected for this use case, but that means feed content will be sent to whatever endpoint you configure. Also the agent will fetch arbitrary URLs you schedule — this can be abused to probe internal services (SSRF risk) if untrusted feed URLs are supplied.
Install Mechanism
No install spec; instruction-only plus a small Python file. The only dependency is 'feedparser' suggested via pip, which is a normal, traceable Python package. No downloads from untrusted URLs or archive extraction are present.
Credentials
The skill requires no environment variables or credentials. Recipes reference webhooks and third‑party services (Discord, Notion) but those are delivered via scheduling payloads or separate integrations rather than baked into the skill—this is proportionate. There are no requests for unrelated secrets.
Persistence & Privilege
always:false and no install-time modifications to other skills or system-wide settings. disable-model-invocation is default (agent may invoke autonomously), which is expected; there are no elevated persistence requests.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install fuzzy-rss-aggregator
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /fuzzy-rss-aggregator 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
- Initial release of RSS Aggregator skill. - Monitor, filter, and summarize RSS/Atom feeds on a schedule. - Supports keyword filtering, date filtering, and outputting article summaries. - Includes ready-to-use Python scripts and multiple example automation recipes. - Can route feed digests or alerts to Discord, Notion, or webhooks. - Troubleshooting tips and feed discovery guidance provided.
元数据
Slug fuzzy-rss-aggregator
版本 1.0.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

RSS Aggregator 是什么?

Monitor, filter, and summarize RSS/Atom feeds on a schedule. Use when: (1) tracking industry news or competitor blogs, (2) setting up keyword alerts across m... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 85 次。

如何安装 RSS Aggregator?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install fuzzy-rss-aggregator」即可一键安装,无需额外配置。

RSS Aggregator 是免费的吗?

是的,RSS Aggregator 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

RSS Aggregator 支持哪些平台?

RSS Aggregator 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 RSS Aggregator?

由 Fuzzyb33s(@fuzzyb33s)开发并维护,当前版本 v1.0.0。

💬 留言讨论