一键导入
blogwatcher
Monitor RSS / Atom feeds for new posts (Python feedparser)
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Monitor RSS / Atom feeds for new posts (Python feedparser)
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Search and download arXiv papers (no API key needed)
Delegate coding and file edits to Anthropic Claude Code CLI
Read/write Windows clipboard text, HTML, images, history (PowerShell)
Running scripts and code on Windows
Delegate coding tasks to OpenAI Codex CLI
Windows Defender: scans, threat history, signatures (PowerShell)
| name | blogwatcher |
| description | Monitor RSS / Atom feeds for new posts (Python feedparser) |
| category | research |
| version | 1.0.0 |
| origin | aiden |
| license | Apache-2.0 |
| tags | rss, atom, feed, blog, news, monitor, feedparser, podcast, updates, aggregation |
Monitor RSS and Atom feeds from blogs, news sites, and podcasts to track new posts. Uses the feedparser Python library — no API keys required for most feeds.
pip install feedparser
import feedparser
from datetime import datetime
feed = feedparser.parse("https://news.ycombinator.com/rss")
print(f"Feed: {feed.feed.title}")
print(f"Posts: {len(feed.entries)}\n")
for entry in feed.entries[:5]:
title = entry.get("title", "No title")
link = entry.get("link", "")
date = entry.get("published", "Unknown date")
print(f"• {title}\n {link}\n {date}\n")
import feedparser, time
FEEDS = [
"https://feeds.feedburner.com/oreilly/radar",
"https://blog.openai.com/rss/",
"https://news.ycombinator.com/rss",
"https://simonwillison.net/atom/everything/",
]
def fetch_all(feeds, max_per_feed=5):
results = []
for url in feeds:
feed = feedparser.parse(url)
for entry in feed.entries[:max_per_feed]:
results.append({
"source": feed.feed.get("title", url),
"title": entry.get("title", ""),
"link": entry.get("link", ""),
"published": entry.get("published", ""),
})
return sorted(results, key=lambda x: x["published"], reverse=True)
for item in fetch_all(FEEDS):
print(f"[{item['source']}] {item['title']}\n {item['link']}")
import feedparser
def search_feed(url, keyword):
feed = feedparser.parse(url)
keyword = keyword.lower()
matches = [
e for e in feed.entries
if keyword in e.get("title","").lower() or keyword in e.get("summary","").lower()
]
for e in matches:
print(f"• {e.title}\n {e.link}\n")
search_feed("https://news.ycombinator.com/rss", "llm")
Common RSS URL patterns:
https://site.com/feed
https://site.com/rss
https://site.com/feed.xml
https://site.com/atom.xml
https://site.com/blog/feed
import feedparser, requests
from bs4 import BeautifulSoup # pip install beautifulsoup4
def find_feed(site_url):
resp = requests.get(site_url, timeout=10, headers={"User-Agent": "Mozilla/5.0"})
soup = BeautifulSoup(resp.text, "html.parser")
for tag in soup.find_all("link", type=lambda t: t and "rss" in t or "atom" in t):
print(tag.get("href"))
find_feed("https://simonwillison.net")
import feedparser, json
feed = feedparser.parse("https://news.ycombinator.com/rss")
posts = [{"title": e.title, "link": e.link, "date": e.get("published","")} for e in feed.entries[:20]]
with open("hn_feed.json", "w") as f:
json.dump(posts, f, indent=2)
print(f"Saved {len(posts)} posts to hn_feed.json")
"What are the latest posts from Hacker News?"
→ Use step 2 with https://news.ycombinator.com/rss.
"Monitor these 4 AI blogs and show me posts about agents from the last week"
→ Use step 3 to fetch all, then step 4 logic to filter for agent keyword.
"Does this blog have an RSS feed? If so, get the latest 5 posts" → Use step 5 to discover the feed URL, then step 2 to fetch posts.
User-Agent header if getting 403 errorsentry.published format varies by feed — some use RFC 2822, others ISO 8601; don't assume a format[:n]) to limit output