一个用于批量读取 RSS 源并输出摘要到终端的简易工具。当前示例脚本默认展示每个源的前 5 条最新内容(可按需修改)。
- 读取多个 RSS 源,解析基础信息与文章条目
- 终端打印摘要信息(可自定义过滤与展示逻辑)
- 支持按完整日期筛选文章(yyyy/mm/dd 格式)
- 附带一份微信/媒体 RSS 源清单
source/channels.json(当前脚本未自动读取) - 预留前端目录
rss-frontend/(当前为空,后续可接入 Web UI)
RSS_AI/
├─ rss_get.py # 主脚本:读取与打印 RSS 摘要
├─ date_filter_example.py # 日期筛选功能使用示例
├─ requirements.txt # Python 依赖包列表
├─ source/
│ └─ channels.json # RSS 源清单(示例数据,脚本未直接使用)
├─ rss-frontend/ # 预留前端目录(当前空)
└─ venv/ # 可选:本地虚拟环境目录(建议本地创建,不建议提交)
- Python 3.10+(建议 3.10)
- macOS / Linux / Windows 均可(示例命令以 macOS/Linux 为主)
- 网络可访问目标 RSS 源(部分源在国内可能需要代理)
- 克隆代码(或将本目录放置到任意路径)
cd /path/to
# git clone <your-repo-url> RSS_AI
cd RSS_AI- 创建与激活虚拟环境
python3 -m venv venv
source venv/bin/activate
python -V # 确认版本- 安装依赖
pip install -U pip
pip install -r requirements.txt
# 或者手动安装
# pip install feedparser requests- 运行
python rss_get.py运行后将依次读取 rss_get.py 中定义的各 RSS 源并打印摘要。
- 选择分类:在
rss_get.py末尾处,有test_categories字典与selected_category变量。- 将
selected_category修改为你希望测试的分类,例如:"人工智能"、"中文科技媒体"、"新闻"等。
- 将
- 新增 RSS 源:在相应的分类字典中追加
名称: 链接键值对即可。 - 展示逻辑:默认展示每个源的前 5 条最新内容。你可以通过
print_rss_summary(rss_data, target_day=None, target_date=None, max_items=5)调整:target_date: 推荐使用,按完整日期过滤,格式为yyyy/mm/dd(如"2025/11/01");None表示不过滤。target_day: 按日期日号(1-31)过滤;None表示不过滤。(已弃用,建议使用target_date)max_items: 可选,控制每源显示条数;None或不传表示默认 5。
# 不按日期过滤,显示每源前 5 条(默认行为)
print_rss_summary(rss_data)
# 仅显示发布日期为 9 号的前 10 条(旧方式)
print_rss_summary(rss_data, target_day=9, max_items=10)
# 不按日期过滤,仅显示前 3 条
print_rss_summary(rss_data, max_items=3)# 筛选 2025年11月1日 的文章
print_rss_summary(rss_data, target_date="2025/11/01", max_items=20)
# 筛选今天的文章
from datetime import datetime
today = datetime.now().strftime("%Y/%m/%d")
print_rss_summary(rss_data, target_date=today, max_items=20)
# 筛选昨天的文章
from datetime import timedelta
yesterday = (datetime.now() - timedelta(days=1)).strftime("%Y/%m/%d")
print_rss_summary(rss_data, target_date=yesterday, max_items=20)更多示例请参考 date_filter_example.py 文件。
source/channels.json 提供了大量示例 RSS 源(多为微信/媒体渠道),目前脚本未自动读取。你可以手动将其中 Links 字段复制到 rss_get.py 的分类字典中使用,或按需扩展脚本读取该文件。
以下给出一个最小示例(仅用于参考,非必须修改):
# 示例:从 channels.json 读取 Links 列表并作为一个临时类别使用
import json
from pathlib import Path
with open(Path('source') / 'channels.json', 'r', encoding='utf-8') as f:
channels = json.load(f)
links = {item['Title']: item['Links'] for item in channels[:20]} # 仅取前20个以免过多请求
for name, url in links.items():
print(f"\n正在读取 {name}: {url}")
rss_data = get_rss_content(url)
print_rss_summary(rss_data)- 新建
Dockerfile(位于项目根目录RSS_AI/):
FROM python:3.10-slim
WORKDIR /app
COPY rss_get.py /app/
COPY source /app/source
RUN pip install --no-cache-dir feedparser requests
CMD ["python", "rss_get.py"]- 构建镜像
docker build -t rss-ai:latest .- 运行容器
docker run --rm -it \
-e TZ=Asia/Shanghai \
rss-ai:latest如需挂载自定义 source/ 或输出日志,可加 -v 与重定向。
- macOS/Linux 使用 cron 示例:每天 09:00 运行一次并追加到日志
crontab -e
# 添加一行(将路径替换为你的实际路径)
0 9 * * * cd /Users/<你的用户名>/Desktop/RSS_AI && /Users/<你的用户名>/Desktop/RSS_AI/venv/bin/python rss_get.py >> /Users/<你的用户名>/Desktop/RSS_AI/logs/`date +\%Y\%m\%d`.log 2>&1- Windows 可使用「任务计划程序」,或通过
schtasks创建计划任务。
- 解析告警(bozo)或个别源报错:
- 脚本会输出警告但尽量继续解析;部分源本身格式不规范或有时效性问题。
- 证书/SSL 问题:
- 执行
pip install certifi并确保系统时间正确;必要时配置网络代理。
- 执行
- 国内网络访问:
- 部分源(如
wechat2rss或海外站点)在国内可能需要代理。
- 部分源(如
- 字符显示问题(Windows):
- 终端设置为 UTF-8(如
chcp 65001),或在 IDE 终端中运行。
- 终端设置为 UTF-8(如
rss-frontend/目录为后续 Web 界面预留,当前为空,不影响后端脚本运行。- 计划可选技术栈:React/Next.js 或简单静态页,消费由后端生成的数据。
本项目的示例 RSS 源链接仅用于技术演示。请遵守各数据源的使用条款与版权要求,合理合规地抓取与使用数据。