Update log: 2026-03-24
lhasaRSS 是一款专注于 RSS 抓取与聚合的实用工具。它可以从预先设定的 RSS 源列表中并发抓取最新文章,自动提取博客名称、文章标题、发布时间、文章链接及头像等信息,并将数据按时间倒序存储到 JSON 对象中
随后上传至 Github 仓库亦或是腾讯云 COS。同时,每次运行过程中的日志信息都会记录到 GitHub 仓库中(按日期生成独立日志文件),方便您随时查看和追溯历史记录
效果展示:https://lhasa.icu/links.html
获取 RSS 列表从 Github 或 腾讯云 COS 获取纯文本格式的 RSS 列表文件(每行一个 RSS 链接)
并发抓取与解析同时抓取各个 RSS 源,实时解析最新文章及相关信息
异常情况记录对解析失败、空 Feed、头像缺失等异常情况进行统计并记录,确保异常报告一看可以看出来问题所在
数据存储与上传将抓取结果保存为JSON对象,并自动上传至腾讯云 COS 或 GitHub
日志记录与管理每次运行均会生成日志文件,并同步写入 GitHub,支持按日期分文件记录,并自动清理7天前的旧日志
指数退避重试机制采用指数退避算法重试解析失败的 RSS,提升系统稳定性,降低因网络波动或 SSL 问题引起的抓取中断风险
lhasaRSS ├── logs/ # 日志目录 ├── data/ │ ├── data.json # 抓取后生成 JSON 对象并上传到 GitHub 或 COS │ └── rss.txt # RSS 订阅源文件 可存放在 GitHub 或 COS ├── config.go # 环境变量的统一管理和校验 ├── cos_upload.go # 利用腾讯云 COS SDK 上传 JSON 文件 ├── feed_fetcher.go # 核心抓取逻辑(支持并发、指数退避重试等) ├── feed_parser.go # 辅助函数(RSS 时间解析、头像处理等) ├── github_utils.go # GitHub 文件操作工具(创建、更新、删除等) ├── logger.go # 日志写入 GitHub 的 logs/ 目录及旧日志清理 ├── main.go # 主入口,业务流程调度 ├── model.go # 数据结构定义(Article、AllData、feedResult) ├── wrap_error.go # 错误信息包装(附带文件名和行号) └── go.mod # Go Modules 依赖管理
lhasaRSS 主要通过以下环境变量来进行配置:
RSS_SOURCE=COS
SAVE_TARGET=COS
COS
GITHUB
RSS
RSS_SOURCE=GITHUB
data/rss.txt
DATA
SAVE_TARGET=GITHUB
data/data.json
https://<bucket>.cos.ap-<region>.myqcloud.com/folder/data.json
owner/repo
Tips: 当 RSS_SOURCE 和 SAVE_TARGET 均为 GITHUB 时,代表你只使用 GitHub 读写文件,那么所有腾讯云相关的环境变量都可以省略。
RSS_SOURCE
SAVE_TARGET
1.准备 GitHub 仓库
在 GitHub 上创建一个空仓库,并生成具有 repo 权限的 Token 以便写入日志
2.配置环境变量
在服务器或本地机配置上述环境变量(可通过 CI/CD 平台或本地 .env 文件进行配置)
3.创建工作流文件
在仓库中点击 Actions > New workflow,新建一个 .yml 工作流文件,如 .github/workflows/rss.yml
示例 Workflow(定时任务,每 1 小时执行一次):
name: lhasaRSS Update on: schedule: - cron: '0 * * * *' # 每1小时执行一次 workflow_dispatch: # 允许手动触发 jobs: build: runs-on: ubuntu-latest permissions: contents: write steps: - name: Check out repository code uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v3 with: go-version: '1.24.0' - name: Build and Run env: TOKEN: ${{ secrets.TOKEN }} NAME: ${{ secrets.NAME }} REPOSITORY: ${{ secrets.REPOSITORY }} # 以下两项仅在COS场景时才需要 TENCENT_CLOUD_SECRET_ID: ${{ secrets.TENCENT_CLOUD_SECRET_ID }} TENCENT_CLOUD_SECRET_KEY: ${{ secrets.TENCENT_CLOUD_SECRET_KEY }} DEFAULT_AVATAR: ${{ secrets.DEFAULT_AVATAR }} RSS: ${{ secrets.RSS }} DATA: ${{ secrets.DATA }} # RSS_SOURCE: ${{ secrets.RSS_SOURCE }} # SAVE_TARGET: ${{ secrets.SAVE_TARGET }} RSS_SOURCE: GITHUB # 如果 RSS_SOURCE=GITHUB,但需要指定具体路径: # RSS: data/rss.txt SAVE_TARGET: GITHUB # 如果 SAVE_TARGET=GITHUB,但需要指定具体路径: # DATA: data/data.json run: | go mod tidy go build -o rssfetch . ./rssfetch echo "=== Done RSS Fetch ==="
将所需的环境变量配置在仓库的 Settings > Secrets and variables > actions 中(以 secrets.TOKEN 等形式引用)
如果你想把抓取后的 JSON 文件放在 COS,则把 SAVE_TARGET 改为 COS 并提供 DATA 等环境变量
提交后,GitHub Actions 会定时触发工作流,自动执行程序并上传RSS和日志,当然也可以手动调试
在抓取过程中,如遇到解析失败、RSS 为空、头像无效等情况,系统会在类似 logs/2025-03-11.log 的日志文件中记录详细信息
当天多次运行时,日志将持续追加于同一文件中,同时程序会自动清理 7 天前的日志文件,确保日志存储高效且不臃肿
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
lhasaRSS —— 高效稳定的RSS聚合解决方案
lhasaRSS 是一款专注于 RSS 抓取与聚合的实用工具。它可以从预先设定的 RSS 源列表中并发抓取最新文章,自动提取博客名称、文章标题、发布时间、文章链接及头像等信息,并将数据按时间倒序存储到 JSON 对象中
随后上传至 Github 仓库亦或是腾讯云 COS。同时,每次运行过程中的日志信息都会记录到 GitHub 仓库中(按日期生成独立日志文件),方便您随时查看和追溯历史记录
效果展示:https://lhasa.icu/links.html
主要功能
获取 RSS 列表
从 Github 或 腾讯云 COS 获取纯文本格式的 RSS 列表文件(每行一个 RSS 链接)
并发抓取与解析
同时抓取各个 RSS 源,实时解析最新文章及相关信息
异常情况记录
对解析失败、空 Feed、头像缺失等异常情况进行统计并记录,确保异常报告一看可以看出来问题所在
数据存储与上传
将抓取结果保存为JSON对象,并自动上传至腾讯云 COS 或 GitHub
日志记录与管理
每次运行均会生成日志文件,并同步写入 GitHub,支持按日期分文件记录,并自动清理7天前的旧日志
指数退避重试机制
采用指数退避算法重试解析失败的 RSS,提升系统稳定性,降低因网络波动或 SSL 问题引起的抓取中断风险
目录结构
环境变量
lhasaRSS 主要通过以下环境变量来进行配置:
RSS_SOURCE=COS或SAVE_TARGET=COS时必须设置RSS_SOURCE=COS或SAVE_TARGET=COS时必须设置COS/GITHUB。默认为GITHUBCOS,需要额外提供RSS环境变量指向远程 TXT 文件地址- 如果
RSS_SOURCE=GITHUB,则为本地路径(如data/rss.txt)- 如果
RSS_SOURCE=COS,则为 HTTP(S) 远程 TXT 文件地址RSS_SOURCE=COS时必填;若RSS_SOURCE=GITHUB未指定,则默认为data/rss.txtCOS/GITHUB。默认为GITHUBCOS时需要提供DATA环境变量- 若
SAVE_TARGET=GITHUB,则为 GitHub 文件路径(如data/data.json)- 若
SAVE_TARGET=COS,则为 HTTP(S) 上传路径(如https://<bucket>.cos.ap-<region>.myqcloud.com/folder/data.json)SAVE_TARGET=COS时必填;若SAVE_TARGET=GITHUB未指定,则默认为data/data.jsonSAVE_TARGET=GITHUB时必须设置SAVE_TARGET=GITHUB时必须设置owner/repo格式)SAVE_TARGET=GITHUB时必须设置部署与运行
1.准备 GitHub 仓库
在 GitHub 上创建一个空仓库,并生成具有 repo 权限的 Token 以便写入日志
2.配置环境变量
在服务器或本地机配置上述环境变量(可通过 CI/CD 平台或本地 .env 文件进行配置)
3.创建工作流文件
在仓库中点击 Actions > New workflow,新建一个 .yml 工作流文件,如 .github/workflows/rss.yml
示例 Workflow(定时任务,每 1 小时执行一次):
将所需的环境变量配置在仓库的 Settings > Secrets and variables > actions 中(以 secrets.TOKEN 等形式引用)
如果你想把抓取后的 JSON 文件放在 COS,则把 SAVE_TARGET 改为 COS 并提供 DATA 等环境变量
提交后,GitHub Actions 会定时触发工作流,自动执行程序并上传RSS和日志,当然也可以手动调试
日志查看
在抓取过程中,如遇到解析失败、RSS 为空、头像无效等情况,系统会在类似 logs/2025-03-11.log 的日志文件中记录详细信息
当天多次运行时,日志将持续追加于同一文件中,同时程序会自动清理 7 天前的日志文件,确保日志存储高效且不臃肿
相关文档