logo
0
0
WeChat Login
编辑文件 README.md

悦·RSS Reader

一款轻量、简洁、无框架依赖的自托管 RSS 阅读器,由夜枫编写开发。

这是一个轻量级 RSS 阅读器,支持 RSS 2.0 和 Atom 1.0 格式。

由夜枫编写开发,相关信息访问 悦·RSS Reader 获取,可自由使用、修改、分发,保留原作者署名即可,既符合MIT License。


✨ 功能特性

  • 订阅管理:添加、编辑、删除 RSS/Atom 订阅源
  • 智能识别:输入普通网站地址时自动识别 <link type="application/rss+xml"> 并提取真实 feed 地址
  • 自动去重:抓取文章时以 guidlink 两级去重,防止重复入库
  • 文章阅读:分页展示订阅文章,支持按订阅源筛选
  • 刷新订阅:一键拉取所有订阅源最新内容
  • 深色/浅色模式:跟随系统或手动切换,太阳/月亮图标动画过渡,localStorage 记忆偏好
  • 复古草稿纸风格:灰白 + 深棕配色,无阴影无渐变,干净克制
  • 响应式设计:适配桌面和移动端,移动端侧栏抽屉式展开
  • 单管理员:无注册入口,仅管理员可添加/编辑/删除订阅,访客可无障碍阅读

📁 目录结构

rss/
├── index.php                  # 入口文件,渲染页面骨架
│
├── app/
│   ├── api/                   # 后端 JSON API
│   │   ├── auth.php           # 登录 / 退出
│   │   ├── feeds.php          # 订阅源管理(列表、预览、新增、编辑、删除)
│   │   ├── entries.php        # 文章列表(分页、按源筛选)
│   │   └── refresh.php        # 刷新所有订阅,拉取最新文章
│   │
│   ├── core/                  # 核心基础设施
│   │   ├── config.php         # 全局配置(数据库、管理员、路径等)
│   │   ├── db.php             # PDO 数据库封装(fetch / fetchAll / execute)
│   │   ├── auth.php           # Session 鉴权封装
│   │   └── install.php        # 首次访问自动建表(feeds / entries)
│   │
│   └── utils/                 # 工具函数
│       ├── rss_parser.php     # RSS 2.0 / Atom 1.0 解析器,兼容 BOM 和前置空白
│       └── helpers.php        # 公共辅助函数(json_ok / json_err 等)
│
└── assets/
    ├── css/
    │   └── main.css           # 全部样式(CSS 变量主题、响应式、深色模式)
    └── js/
        └── app.js             # 全部前端逻辑(原生 JS,无任何框架)

🗄️ 数据库表结构

feeds — 订阅源表

字段类型说明
idINT UNSIGNED主键,自增
titleVARCHAR(200)订阅名称
urlVARCHAR(500)feed 地址(唯一)
site_linkVARCHAR(500)对应网站主页地址
descriptionTEXT订阅简介
iconVARCHAR(500)图标 URL
last_fetchDATETIME最后抓取时间
created_atDATETIME添加时间

entries — 文章条目表

字段类型说明
idINT UNSIGNED主键,自增
feed_idINT UNSIGNED所属订阅源 ID
titleVARCHAR(500)文章标题
linkVARCHAR(1000)原文链接
contentMEDIUMTEXT正文内容
authorVARCHAR(200)作者
pub_dateDATETIME发布时间
guidVARCHAR(1000)唯一标识(用于去重)
created_atDATETIME入库时间

🚀 部署方法

环境要求

依赖版本要求
PHP≥ 8.0(推荐 8.2)
MySQL / MariaDB≥ 5.7
Web 服务器Nginx / Apache
PHP 扩展pdo_mysqlsimplexmlmbstring 等基础扩展

1. 上传文件

将 包含index.php及同级目录上传至服务器 Web 目录下,推荐二级目录部署,因为太轻量了,例如:

/www/wwwroot/blog/reader/

2. 修改配置文件

编辑 app/core/config.php

// 数据库连接
define('DB_HOST', 'localhost');
define('DB_PORT', 3306);
define('DB_NAME', 'rss');          // 数据库名
define('DB_USER', 'rss');          // 数据库用户名
define('DB_PASS', 'your_password'); // 数据库密码

// 访问路径(阅读器所在的 URL 前缀,结尾不加斜杠)
define('BASE_URL', '/reader');   // 例如部署在 /rss/目录下 则填 /rss ,注意末尾没有“/”

// 每页文章数
define('PAGE_SIZE', 8);

// RSS 抓取超时(秒)
define('FETCH_TIMEOUT', 15);

3. 修改管理员密码

默认账号为 admin,默认密码为 admin123

上线前务必修改密码:

方法一(推荐): 临时在 config.php 末尾添加一行:

echo password_hash("你的新密码", PASSWORD_DEFAULT);

访问首页,在页面源代码最顶部复制生成的哈希值,粘贴替换 ADMIN_PASS_HASH 的值,然后删除该行。

方法二: 在 PHP CLI 中直接生成:

php -r "echo password_hash('你的新密码', PASSWORD_DEFAULT);"

4. Nginx 配置参考

server {
    listen 80;
    server_name your-domain.com;
    root /www/wwwroot;
    index index.php index.html;

    location /reader {
        try_files $uri $uri/ /reader/index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/tmp/php-cgi.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

5. 访问验证

浏览器打开 https://myblog.com/reader/,若看到订阅列表页即部署成功。

点击右上角「登录」,使用 admin / admin123(或你设置的密码)登录后即可管理订阅。


📖 使用说明

添加订阅

  1. 登录后,点击左侧栏「+」按钮
  2. 粘贴订阅地址(支持直接粘贴博客/网站主页 URL,系统自动识别 feed)
  3. 点击「获取信息」自动填充订阅名称和简介
  4. 按需修改名称和简介,点击「保 存

编辑订阅

鼠标悬停在订阅名称上,点击右侧出现的 ✎ 图标,可修改订阅名称和简介。

删除订阅

鼠标悬停在订阅名称上,点击右侧 × 图标并确认,删除订阅及其全部文章。

刷新订阅

  • 顶部导航栏「刷新订阅」按钮
  • 左侧栏顶部刷新按钮(⟳,无需登录,访客可点击)

深色/浅色切换

点击右上角 ☀/☽ 按钮切换,偏好自动记忆,下次访问恢复。默认跟随系统设置。


📄 开源许可

MIT License — 自由使用、修改、分发,保留原作者署名即可。


夜枫 编写开发 · 悦·RSS Reader v1.0