【免费下载链接】rss-feeds
Generate RSS feeds for all the blogs that don't have one
rss-feeds 是一个开源 RSS Feed 生成器,专为那些没有 RSS 订阅功能的博客自动抓取网页并生成标准 feed_*.xml 文件,每小时由 CI 自动刷新。本教程带你用 6 个步骤,从零创建并注册你的第一个 RSS Feed,即使是编程新手也能照着跑通。
一、rss-feeds 是什么:30秒看懂项目
你喜欢的博客没有 RSS,而且可能永远不会有?rss-feeds 的思路很简单:
- 用 Python 脚本"抓取"博客页面(静态页面、分页列表、JS 动态加载都支持)
- 解析出标题、日期、摘要、链接,生成合法的 RSS XML
- 输出到 feeds/ 目录,提交后任何 RSS 阅读器都能直接订阅
项目已内置 30 多个生产级示例(Ollama、OpenAI、Anthropic、Cursor 等博客的 Feed),你完全可以模仿现有生成器来完成自己的第一个。
二、准备工作:一键安装开发环境
最快环境配置方法只需 3 条命令:
# 1. 克隆仓库
git clone https://gitcode.com/gh_mirrors/rs/rss-feeds
cd rss-feeds
# 2. 安装依赖(项目使用 uv 管理)
uv sync --group dev
# 3. 安装 pre-commit 钩子
pre-commit install
💡 装好后运行 make help,可以看到按类别分组的全部可用命令,这是探索项目最快的方式。
三、读懂项目:5 个核心文件速览
动手前,先认识这几个关键位置(完整架构说明见 AGENTS.md):
| 文件 / 目录 | 作用 |
|---|---|
| feed_generators/ | 每个博客对应一个 Python 抓取脚本,如 ollama_blog.py |
| feeds/ | 输出的 feed_*.xml 文件,订阅者使用的就是这里 |
| feeds.yaml | Feed 注册表,所有生成器的"单一事实来源" |
| makefiles/feeds.mk | 每个 Feed 对应的 Make 命令目标 |
| feed_generators/utils.py | 共享工具:抓取页面、设置 Feed 链接、保存输出 |
四、创建第一个 RSS Feed:6步上手
Step 1:分析目标博客,选择抓取模式
打开目标博客,先看它是哪种加载方式,这决定了你使用哪种模式:
| 网站行为 | 推荐模式 | 可参考的示例 |
|---|---|---|
| 所有文章在单页展示 | 简单静态(最简单,新手首选) | feed_generators/ollama_blog.py |
URL 变 ?page=2 的分页 | 分页 + 缓存 | feed_generators/dagster_blog.py |
| 点击 "Load More" 按钮加载 | Selenium 无头浏览器 | feed_generators/anthropic_news_blog.py |
判断技巧:打开浏览器 DevTools 的 Network 面板刷新页面,如果文章在初始 HTML 里就有,选前两种;如果是执行 JS 后才出现,选 Selenium。
Step 2:下载 HTML 样本
# 静态站直接下载即可
curl -o sample.html "https://example.com/blog"
如果是 JS 重度渲染的网站,需在页面加载完成后,从 DevTools 的 Elements 面板复制完整 HTML。
Step 3:生成抓取脚本
项目内置了 AI 辅助的 Feed 生成器技能,一条指令即可根据 HTML 样本自动分析结构、选对模式并生成 feed_generators/ 下的脚本:
Use /cmd-rss-feed-generator to convert @sample.html to a RSS feed for https://example.com/blog
不想用 AI 也没关系——直接复制 ollama_blog.py 改一改即可,它的结构非常清晰:fetch_blog_content() 抓取 → parse_blog_html() 解析 → generate_rss_feed() 生成 → save_rss_feed() 保存。
Step 4:本地测试并验证输出
# 运行你的生成器
uv run feed_generators/<source>_blog.py
# 查看生成的 XML
head -50 feeds/feed_<source>.xml
验证清单:
- XML 能正常打开,无解析错误
-
<link>指向博客原站(而不是 XML 文件本身)——记得用 utils.py 中的setup_feed_links()辅助函数 - 每篇文章都有标题、日期、链接
- 日期顺序为最新在前
Step 5:注册你的 Feed(3 处改动)
这是新手最容易漏的一步,缺一不可:
- 在 feeds.yaml 添加注册项:
<source>:
script: <source>_blog.py
type: requests # JS 重度站点用 "selenium"
blog_url: https://example.com/blog
- 在 makefiles/feeds.mk 添加 Make 目标,仿照现有条目:
.PHONY: feeds_<source>
feeds_<source>: ## Generate RSS feed for <Source Name>
$(call check_venv)
$(call print_info,Generating <Source Name> feed)
$(Q)uv run feed_generators/<source>_blog.py
$(call print_success,<Source Name> feed generated)
- 更新 README.md 中的 Feed 列表表格(按字母顺序插入)。
之后就可以用一条命令运行了:make feeds_<source>。
Step 6:提交前的最终检查
-
make dev_format通过(Ruff 格式化) -
uv run feed_generators/<source>_blog.py无报错 -
feeds/feed_<source>.xml已生成且有效 - 三项注册(feeds.yaml / feeds.mk / README)全部完成
- Feed 的
<link>指向原博客
更多质量保障细节(回归测试、离线 fixture、输出校验)可参考 docs/feed-reliability.md 和 CONTRIBUTING.md。
五、新手常见问题速查
| 症状 | 解决办法 |
|---|---|
| "No posts found" / 空 Feed | 网站改版了,重新下载 HTML 样本并更新选择器 |
<link> 显示 XML 地址 | 使用 setup_feed_links(),并确保 rel="self" 先于 rel="alternate" 设置 |
| 日期解析报错 | 在 date_formats 列表中补充该站的日期格式 |
| 缓存不更新 | 删除 cache/<source>_posts.json,加 --full 参数全量重跑 |
完整的排障清单在 AGENTS.md 的 Troubleshooting 章节。
结语:从这里出发
🎉 恭喜!完成以上 6 步,你就拥有了一个可以持续更新的 RSS Feed。建议的进阶路径:
- 先跑通一个静态站(模式 1),建立信心
- 再挑战分页站(模式 2),理解缓存合并机制
- 最后尝试 Selenium 模式(模式 3)
这个项目刻意保持了"简单 Python + Makefile"的轻量架构,几乎没有学习门槛——你的第一个 Feed,今天就可以上线。
【免费下载链接】rss-feeds
Generate RSS feeds for all the blogs that don't have one
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



