一个本地 RSS 订阅源管理工具,支持版本追踪、快照归档和文章变化检测。
服务于 hahahotsoup's rssreader,可以快速管理自己的 RSS 订阅源并归档化。
- 订阅管理:添加、更新、删除 RSS 订阅源,所有数据存储在本地 SQLite 数据库中
- 文章追踪:自动检测文章的新增、修改和删除,修改/删除的文章会保留历史版本(带时间戳归档标记),不会丢失
- 文章管理:查看指定源的所有文章,支持永久删除(物理删除,不可恢复)
- 快照归档:对订阅源加时间戳归档,保留某一时刻的完整快照,归档后的源不会被后续更新覆盖
- CLI 参数:支持命令行参数一键操作,也支持交互式菜单
- 跨平台:基于 .NET,数据存储为单个
.db文件,Mac/Linux/Windows 均可运行
git clone https://github.com/hahahotsoup/rssreader-core.git
cd rssreader-core
dotnet build
dotnet runrssreader -l # 列出所有订阅源
rssreader -d https://xxx/rss # 下载新 RSS 源
rssreader -u 1 # 更新第 1 个源
rssreader -a 1 # 归档(加时间戳)
rssreader -una 1 # 去归档
rssreader -r 1 # 删除订阅源
rssreader -h # 帮助| 短参数 | 长参数 | 说明 |
|---|---|---|
-l |
--list |
列出所有订阅源 |
-d |
--download |
下载新的 RSS 源 |
-u |
--update |
更新指定订阅源(编号) |
-a |
--archive |
归档当前快照(加时间戳) |
-una |
--unarchive |
去归档(检查同名冲突) |
-r |
--remove |
删除订阅源及其全部文章 |
-h |
--help |
显示帮助 |
不带参数运行时进入交互式菜单。
启动后显示主菜单:
A 看看已有订阅 | B 下载新RSS源 | Q 退出
| 命令 | 示例 | 说明 |
|---|---|---|
| 输入编号 | 2 |
更新该订阅源,检测文章变化 |
T 编号 |
T 1 |
归档当前快照(加时间戳) |
R 编号 |
R 1 |
去归档(检查同名冲突) |
D 编号 |
D 2 |
删除订阅源及其全部文章 |
L 编号 |
L 1 |
查看订阅源的所有文章 |
进入后会列出该源所有文章,每篇有显示编号和状态标签:
── [1] xxx 的文章列表 ──
[1] [现] v1 | 如何学习 C#
[2] [旧] v1 | SQLite 入门指南
[3] [删] v1 | 已删除的文章
| 命令 | 示例 | 说明 |
|---|---|---|
D 编号 |
D 2 |
删除指定文章 |
Q |
Q |
返回 A 菜单 |
注意:
- 文章编号在删除后自动继位(删掉 #2 后原来的 #3 变成 #2)
- 物理删除不可恢复,作者自动标记的
[删]文章(软删除)也会被一并清掉
直接输入 RSS 链接,自动下载、解析、存入数据库。
程序对每篇文章维护三种状态:
| 状态 | 含义 |
|---|---|
active |
当前有效 |
archived |
作者修改后的旧版本(保留原文) |
deleted |
作者删除了此文(标记但不物理删除) |
更新 RSS 时,程序会:
- 比对新旧 Content,仅正文变化才触发归档
- 修改的文章:旧版 →
archived,新版 →active - 删除的文章:
active→deleted,附时间戳标记 - 列表显示各状态文章数量:
现行 5 篇, 其中有 2 篇发生了更改, 1 篇被作者删掉了
T 1 后标题变为 博客名_20260712_143000,此后:
- 下载同名源会被当作全新源,不覆盖旧数据
- 归档源禁止更新,去归档需先执行
R 1 - 新下载的同名源获得独立的文章副本
- C# / .NET 10.0
- Microsoft.Data.Sqlite
- CodeHollow.FeedReader(RSS/Atom 解析)
- DiffPlex(文本差异比较)
├── Hahahotsoup.RssReader.sln
├── Hahahotsoup.RssReader.Core.csproj
├── RssReader.cs # 全部代码(单文件)
├── rss_server.py # 测试用模拟 RSS 服务器
└── README.md
使用了 deepseek-pro 生成部分代码和注释
遵循 GNU General Public License v3.0 (GPL-3.0)