拒绝推荐算法:我的RSS自托管方案
RSS Quest – 像素风RSS聚合系统
一个单文件实现的RSS聚合器,融合复古RPG美学与现代Web技术
项目简介
RSS Quest 是一个轻量级、自托管的RSS订阅聚合系统。它将传统的RSS阅读体验与复古像素RPG风格相结合,为用户提供独特的信息获取方式。整个系统仅由两个PHP文件组成(install.php + index.php),无需复杂配置即可部署。
为什么选择 RSS Quest?
- 单文件架构 – 仅2个PHP文件,零依赖(除PDO_MySQL和cURL外)
- 像素RPG风格 – 独特的游戏化界面设计,让阅读变得有趣
- 广场生态 – 发现、分享、推荐优质RSS源
- 邮件推送 – 新文章自动邮件通知,不错过重要信息
- 多用户支持 – 支持个人使用或团队协作
功能特性
核心功能
| 功能 | 描述 |
|---|---|
| RSS聚合 | 支持RSS 2.0、Atom 1.0、XML Sitemap格式 |
| 分类管理 | 自定义分类,树状导航 |
| 已读追踪 | 自动标记已读/未读,未读文章带黄色”!”提示 |
| 收藏系统 | 红心/白心切换,快速收藏重要文章 |
| 全文搜索 | 基于MySQL的全文检索 |
| 邮件订阅 | SMTP推送新文章摘要,支持批量合并通知 |
广场系统
- 站点广场 – 管理员发布优质RSS源,用户一键订阅
- 最新文章 – 每个站点显示最新3篇文章预览
- 用户推荐 – 推荐自选源到广场,审核后公开分享
- 更新排序 – 有更新的站点自动”冒泡”到顶部
安全特性
- 登录保护 – 3次失败锁定15分钟
- 注册防刷 – 验证码 + IP每小时限5账号
- SQL注入防护 – PDO预处理语句
- XSS防护 – 输出自动转义
技术架构
单文件设计哲学
RSS Quest 采用极端的极简主义设计:
install.php → 安装向导(建表 + 配置生成)
index.php → 完整系统(路由 + 业务 + 视图)
config.php → 配置文件(安装后生成)
优势:
- 无复杂的目录结构
- 无Composer依赖地狱
- 无前端构建流程
- 单文件即可理解全部逻辑
性能优化
- 连接池友好 – 单例PDO连接
- 内存控制 – 限制单次处理50篇文章
- 超时保护 – 30秒执行上限,防止卡死
- 垃圾回收 – 及时释放大数组
邮件系统
手写SMTP Socket实现,不依赖PHPMailer:
- 支持TLS/SSL加密
- 超时控制(30秒)
- 失败重试日志
- 批量文章合并为一封邮件
界面展示
像素RPG风格
系统采用《Undertale》风格的设计语言:
- 配色方案
- 深紫
#2d1b4e– 背景 - 浅紫
#967bb6– 边框/按钮 - 金色
#ffd700– 标题/强调 - 绿色
#7fff00– 成功状态 - 红色
#ff6b6b– 错误/收藏
- 深紫
部署指南
环境要求
- PHP >= 7.4
- PDO_MySQL 扩展
- cURL 扩展
- GD 扩展(验证码,可选)
- MySQL >= 5.7
快速安装
# 1. 克隆/下载到网站目录
cd /var/www/html/rss
# 2. 访问安装向导
# 浏览器打开: http://your-domain/install.php
# 3. 按向导完成5步安装:
# - 环境检测
# - 数据库配置
# - SMTP配置(可选)
# - 管理员账号
# - 执行安装
# 4. 安装完成后自动跳转到系统
定时任务(可选)
自动刷新所有Feed:
# 编辑crontab
crontab -e
# 每小时自动刷新(替换YOUR_CRON_KEY为config.php中的值)
0 * * * * curl -s "https://your-domain/index.php?action=cron_refresh&key=YOUR_CRON_KEY" > /dev/null
使用场景
1. 个人知识管理
- 订阅技术博客、新闻站点
- 分类整理(技术/设计/生活)
- 收藏重要文章,建立个人知识库
2. 团队信息共享
- 团队成员共享RSS广场
- 推荐优质源给同事
- 新文章邮件通知团队
3. 内容策展
- 运营者维护优质源广场
- 用户发现新站点
- 构建垂直领域内容聚合
开发计划
- OPML导入/导出
- 全文搜索(Elasticsearch)
- 移动端PWA支持
- 多语言国际化
- 暗黑/亮色主题切换
技术细节
Feed解析兼容性
// RSS 2.0
<item>
<title>文章标题</title>
<link>https://...</link>
<description>摘要...</description>
<pubDate>Mon, 01 Jan 2024...</pubDate>
<guid>唯一标识</guid>
</item>
// Atom 1.0
<entry>
<title>文章标题</title>
<link href="https://..."/>
<summary>摘要...</summary>
<updated>2024-01-01T00:00:00Z</updated>
<id>唯一标识</id>
</entry>
// Sitemap
<url>
<loc>https://...</loc>
<lastmod>2024-01-01</lastmod>
</url>
数据库表结构
users - 用户表(含登录锁定、订阅开关)
feeds - RSS源表(关联广场、分类)
plaza_sites - 广场站点表
articles - 文章表(已读状态、GUID去重)
favorites - 收藏表
recommendations - 用户推荐审核表
email_logs - 邮件发送日志
贡献与支持
欢迎提交Issue和PR!如果你在使用过程中遇到问题,或有新功能建议,请随时反馈。
许可证
MIT License – 自由使用、修改、分发
本文系作者 @
雨落祈星台
原创发布在 雨落Droplogue ,未经许可,禁止转载。
评论