欢迎使用 POLITICO 中文 RSS 生成器!🎉 这是一个 Python 项目,它会自动抓取 POLITICO 的最新新闻,使用 Gemini API 将其翻译成简体中文,然后生成一个全新的 RSS Feed (feed.xml)。更酷的是,它还会将这个中文 RSS Feed 同步到您指定的 GitHub 仓库,方便您随时订阅和分享!
- 自动新闻抓取: 定期从 POLITICO RSS 源获取最新文章。
- 智能翻译: 利用 Google Gemini API 将英文新闻内容高质量翻译为简体中文。
- RSS Feed 生成: 将翻译后的新闻条目构建为标准的 RSS 2.0 Feed (
feed.xml)。 - GitHub 同步: 自动将生成的
feed.xml推送到您的 GitHub 仓库。 - Web 服务: 通过 Flask 提供一个简单的 Web 服务,可以直接访问生成的 RSS Feed。
- 定时任务: 使用 APScheduler 自动执行每日新闻更新和翻译流程。
- 保持活跃: 内置 "ping self" 功能,以保持在某些免费托管平台(如 Render)上的服务持续运行。
- 智能初始化: 启动时会尝试从 GitHub 同步
feed.xml,确保使用最新版本。
项目大致遵循以下流程:
- 抓取 (Parse):
rss_parser.py脚本从 POLITICO 的 RSS 源抓取新闻,并将每条新闻保存为 Markdown 文件到dailynews/目录。 - 翻译 (Translate):
translate_news.py脚本检测dailynews/目录中的新文件,使用 Gemini API 将其内容翻译成中文,并保存到translate/目录。 - 生成 (Generate):
generate_rss.py脚本读取translate/目录中的翻译稿件,生成包含这些新闻的feed.xml文件。 - 同步 (Sync):
github_sync.py脚本将本地的feed.xml文件推送到您在环境变量中配置的 GitHub 仓库。 - 服务 (Serve):
app.py(Flask 应用) 启动后,会运行一个定时任务(默认每天美国东部时间 22:00),自动执行以上1-4步。同时,它还提供/feed.xml端点供 RSS 阅读器订阅。
.
├── .gitattributes
├── README.md # 本说明文件
├── app.log # 应用运行日志 (自动生成)
├── app.py # Flask 主应用,包含定时任务和 Web 服务
├── dailynews/ # 存放从 POLITICO 抓取的原始英文新闻 (Markdown 格式)
│ └── YYYYMMDD.md # 例如: 20231026.md
├── feed.xml # 生成的中文 RSS Feed 文件
├── generate_rss.py # 从翻译后的 Markdown 文件生成 feed.xml
├── github_sync.py # 同步 feed.xml 到 GitHub 仓库
├── requirements.txt # Python 依赖库
├── rss_parser.py # 抓取并解析 POLITICO RSS 源
├── translate/ # 存放翻译后的中文新闻 (Markdown 格式)
│ └── YYYYMMDD.md
└── translate_news.py # 使用 Gemini API 翻译新闻文件
在开始之前,请确保您的系统已安装:
- Python 3.7+
- pip (Python 包安装器)
-
克隆仓库:
git clone https://github.com/your_username/your_repo_name.git cd your_repo_name请将
your_username/your_repo_name替换为您自己的 GitHub 用户名和仓库名。 -
安装依赖:
pip install -r requirements.txt
-
设置环境变量 🔑: 项目依赖以下环境变量来正常工作。建议在项目根目录下创建一个
.env文件,并填入您的配置信息。当应用启动时,会自动加载此文件中的变量。.env文件示例:GEMINI_API_KEY="YOUR_GEMINI_API_KEY" GITHUB_TOKEN="YOUR_GITHUB_TOKEN" GITHUB_REPO_URL="https://github.com/your_username/your_rss_repo.git" # 可选配置 # GEMINI_MODEL="gemini-2.5-pro-exp-03-25" # 或其他支持的模型 # HOST="0.0.0.0" # PORT="8080"
环境变量详解:
GEMINI_API_KEY: 必需。您的 Google Gemini API 密钥。用于翻译新闻文章。您可以从 Google AI Studio 获取。GITHUB_TOKEN: 必需。您的 GitHub Personal Access Token (PAT)。需要至少有repo范围的权限,用于读取和写入feed.xml到您的 GitHub 仓库。您可以从 GitHub 的开发者设置中创建。GITHUB_REPO_URL: 必需。您希望存储feed.xml的目标 GitHub 仓库的完整 URL。例如:https://github.com/your_username/your_politico_rss_feed.git。脚本会从此 URL 解析出owner和repo名称。GEMINI_MODEL: 可选。指定用于翻译的 Gemini 模型。如果未设置,默认为gemini-2.5-pro-exp-03-25(在translate_news.py中定义,您可以按需修改默认值或通过此环境变量覆盖)。HOST: 可选。Flask 应用监听的主机地址。默认为localhost。在部署时可能需要设置为0.0.0.0。PORT: 可选。Flask 应用监听的端口号。默认为5000。
⚠️ 重要提示:generate_rss.py脚本中包含硬编码的 RSS Channel 链接 (https://github.com/your_username/your_repo) 和文章链接前缀 (https://github.com/my_username/my_repo/). 您可能需要根据您的GITHUB_REPO_URL手动修改这些值以确保 RSS Feed 中的链接正确。未来版本可能会考虑通过环境变量配置这些。
-
启动应用服务: 配置好
.env文件后,运行主应用:python app.py
应用启动后:
- 会立即尝试从 GitHub 同步
feed.xml。 - 启动定时任务,默认在美国东部时间 (EST) 每天 22:00 自动执行完整的新闻更新、翻译、生成 RSS 和同步流程。
- 启动一个 Flask Web 服务。您可以访问
http://<HOST>:<PORT>/feed.xml(例如http://localhost:5000/feed.xml) 来获取 RSS Feed。 - 首页
http://<HOST>:<PORT>/会提供一个简单的提示页面。
- 会立即尝试从 GitHub 同步
-
手动执行脚本 (可选): 如果您想立即执行特定步骤,可以单独运行相应的脚本:
- 抓取新闻:
(注意:
python rss_parser.py
rss_parser.py的具体行为和参数可能需要查看其内部实现,当前信息主要基于其在app.py中的调用方式。) - 翻译新闻:
翻译
dailynews/目录下最新的.md文件:翻译指定文件 (例如python translate_news.py
dailynews/20231026.md):python translate_news.py 20231026 # 或者 python translate_news.py 20231026.md - 生成 RSS Feed:
此脚本会处理
translate/目录下的所有.md文件并更新feed.xml。python generate_rss.py
- 同步到 GitHub:
此脚本会将本地的
feed.xml推送到 GitHub。python github_sync.py
- 抓取新闻:
-
订阅 RSS Feed: 将
http://<your_domain_or_ip>:<PORT>/feed.xml地址添加到您的 RSS 阅读器中。如果您在本地运行,地址通常是http://localhost:5000/feed.xml。
- 该应用设计为可以部署在支持 Python 的平台上,例如 Heroku, Render, Google Cloud Run 等。
ping_self功能有助于在某些免费托管层 (如 Render 的免费 Web 服务) 保持应用唤醒状态,防止因不活跃而休眠。- 部署时,请确保正确设置了所有必需的环境变量。
- 您可能需要一个
Procfile(例如,对于 Heroku 或 Render) 来指定如何启动应用,通常是使用gunicorn:web: gunicorn app:app
- 项目中的日期和时间处理(如文件名、RSS
lastBuildDate、定时任务触发时间)默认使用美国东部时间 (America/New_York)。这是在app.py和generate_rss.py中通过TIMEZONE_EST常量定义的。如果需要更改,可以直接修改代码中的时区设置。 - 每日 RSS 更新任务默认在
app.py中设置为美国东部时间 22:00 执行。您可以根据需要修改CronTrigger的参数。
欢迎各种形式的贡献!如果您有任何改进建议或发现了 Bug,请随时创建 Issue 或提交 Pull Request。
- Fork 本仓库
- 创建您的特性分支 (
git checkout -b feature/AmazingFeature) - 提交您的更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开一个 Pull Request