Skip to content

CochraneK/NewsMail

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

公益慈善新闻日报系统 | 🇺🇸 English

⚠️ 语言切换:当前为中文版,点击上方链接切换至英文版。


将多个来源的新闻自动采集、过滤、去重,生成日报/周报/月报,定时推送到邮箱。支持 RSS、网页爬虫、搜狗微信搜索、微博热搜、RSSBridge(邮件订阅转RSS)等多类来源。

系统架构

GitHub Actions Python Stars MIT License 90+ 信息源


功能特性

功能 说明
日报 每日 09:00 推送,只含昨日以来的新增内容
周报 周日 17:00 推送,汇总最近 7 天
月报 每月最后一天推送,汇总最近 31 天;周日月末重叠时只发月报
深度日期识别 多层策略(time标签/meta/JSON-LD/class选择器/全文正则/URL降级)
中文→英文翻译 中文标题自动翻译为英文,报告双语呈现
去重存储 标题哈希持久化,支持日报/周报/月报独立时间窗口
GitHub Actions 零服务器、零维护,每天自动推送邮件
RSSBridge 邮件订阅、Twitter、微信等无RSS来源通过 RSSBridge 转为可采集格式

项目结构

NewsMail/
├── .github/
│   └── workflows/
│       └── daily-briefing.yml    # GitHub Actions 自动调度
├── assets/
│   └── architecture.svg         # 系统架构可视化图
├── scripts/
│   ├── main.py                   # 主入口,支持 --daily / --weekly / --monthly
│   ├── fetch_news.py             # 采集模块(18 个采集器)
│   ├── dedup_store.py            # 去重与增量存储
│   ├── generate_report.py        # 日报 HTML 生成
│   ├── summary_report.py         # 周报/月报 HTML 生成
│   ├── send_email.py             # 邮件发送(QQ邮箱 SMTP)
│   ├── deploy_rssbridge.py       # RSSBridge Docker 部署脚本
│   └── utils.py                  # 翻译、多途径日期识别工具
├── reports/                       # 生成的报告 HTML + JSON(不提交到 Git)
├── logs/                          # 运行日志(不提交到 Git)
├── info_sources.md                # 信息源清单(维护文档)
├── config.example.py              # 配置模板
├── .gitignore
├── README.md
└── README_EN.md

快速开始

方式一:GitHub Actions(推荐,零维护)

无需本地环境,代码推送到 GitHub 后自动运行。

步骤 1:配置 GitHub Secrets

进入仓库 → SettingsSecrets and variablesActionsNew repository secret

Secret 名称 说明 示例
SENDER_EMAIL 发件人邮箱 your_email@qq.com
SMTP_AUTH_CODE QQ邮箱 SMTP 授权码 xxxxxxxxxxxxxx
RECEIVER_EMAIL 收件人邮箱 your_email@qq.com
SMTP_HOST SMTP 服务器(可选,默认 smtp.qq.com) smtp.qq.com
SMTP_PORT 端口(可选,默认 465) 465
MYMEMORY_API_KEY 翻译 API Key(免费注册,可选) xxxxxxxxxx

SMTP 授权码获取:QQ邮箱 → 设置 → 账户 → POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 → 开启"SMTP服务" → 获取授权码

步骤 2:推送代码

git add .
git commit -m "feat: add GitHub Actions workflow"
git push origin main

步骤 3:验证

进入仓库 → Actions 页面,可以看到定时任务已就绪。

  • 每天 UTC 00:00(约北京时间 08:00) 自动触发
  • 可手动触发:点击 Daily Charity News BriefingRun workflow

方式二:本地运行

1. 安装依赖

pip install requests feedparser beautifulsoup4 lxml

2. 配置邮件

cp config.example.py scripts/config.py

编辑 scripts/config.py 中的邮件信息:

EMAIL_CONFIG = {
    "smtp_host": "smtp.qq.com",
    "smtp_port": 465,
    "sender": "your_email@qq.com",
    "password": "your_smtp_auth_code",  # QQ邮箱 → 设置 → 账户 → SMTP授权码
    "receiver": "your_email@qq.com",
}

3. 测试运行

cd daily-briefing/scripts
python main.py --daily   # 手动触发日报
python main.py --weekly  # 手动触发周报
python main.py --monthly # 手动触发月报

GitHub Actions 工作流说明

工作流文件:.github/workflows/daily-briefing.yml

触发方式

触发方式 说明
定时触发 每天 UTC 00:00(约北京时间 08:00)自动运行
手动触发 GitHub Actions 页面 → Run workflow,可选日报/周报/月报/自动判断
代码推送 推送后自动运行一次(可作为 CI 测试)

手动触发参数

参数 说明
auto(默认) 根据日期自动判断:月末发月报,周日发周报,其他发日报
daily 强制发送日报
weekly 强制发送周报
monthly 强制发送月报

日志与调试

运行完成后,可下载 Artifacts 中的 briefing-log-N 查看完整日志(保留 7 天)。


信息源管理

所有信息源记录在 info_sources.md,共十大分类,90+ 来源:

  • 、政府与官方机构(中华慈善总会、民政部、中国基金会中心网等)
  • 、权威公益媒体(中国发展简报、公益时报、南都公益基金会等)
  • 、互联网平台公益频道(腾讯公益、新浪公益、网易公益、搜狐公益、凤凰网公益)
  • 、主流媒体公益频道(澎湃新闻·公益、人民网·公益、新华网·公益、央视网·公益)
  • 、公众号关键词搜索(搜狗微信,16组关键词轮搜)
  • 、微博热搜公益词
  • 、国际机构(联合国系列、UNICEF中国、乐施会、Oxfam、USAID等)
  • 、国际媒体(Devex、BBC、Guardian、Reuters、AP、New Humanitarian等)
  • 、研究机构与智库
  • 、行业聚合与热榜(今日热榜、AnyKnew)

扩展信息源:直接在 info_sources.md 追加一行,格式:

名称 | 类型 | URL或关键词 | 备注

然后修改 fetch_news.py 的采集列表即可生效。


RSSBridge(邮件订阅转 RSS)

对于没有 RSS 的来源(如 AmCham、Lingxi360 等邮件订阅),使用 RSSBridge 转为可采集格式。

部署步骤

cd scripts
python deploy_rssbridge.py

启动后访问:http://localhost:8080

生成 AmCham / Lingxi360 RSS

  1. 在邮箱中开启 IMAP(QQ邮箱 → 设置 → 账户 → IMAP)
  2. 在 RSSBridge Web 界面选择 Email Bridge,填写 IMAP 信息
  3. 点击 Generate Feed,获得 RSS 地址
  4. 将地址加入 info_sources.md 的对应分类

迁移到其他领域

本系统设计为领域无关,迁移只需修改:

1. 修改关键词(config.example.pyconfig.py

REPORT_CONFIG = {
    "domain": "图书出版",  # 或"科技"、"教育"等
    "keywords": [
        "出版", "作家", "文学", "新书", "阅读", "书店",
        # ... 替换为新领域关键词
    ]
}

2. 替换信息源(info_sources.md

info_sources.md 中的来源替换为新领域的权威媒体和机构。

3. 调整 fetch_news.py 中的采集函数

  • 保留通用函数(RSS采集、搜狗微信搜索、微博热搜、聚合热榜)
  • 修改/新增领域特定的采集函数(如出版社官网、行业媒体RSS)

4. 修改邮件模板

编辑 generate_report.pysummary_report.py 中的 HTML 模板,调整标题和配色。


已知限制与 TODO

已实现 ✅

  • 多层日期提取(time/meta/JSON-LD/class/正则/URL)
  • 深度补充识别(访问详情页)
  • 标题哈希去重(日报24h / 周报7d / 月报31d)
  • 日报/周报/月报自动判断
  • GitHub Actions 自动调度(零服务器维护)
  • 中文标题自动翻译为英文(MyMemory API)
  • RSSBridge 邮件转 RSS
  • 搜狗微信搜索(公众号内容)
  • 微博热搜公益词
  • 聚合热榜(今日热榜、AnyKnew)
  • 国际RSS(BBC/Guardian/Reuters/AP等)

未实现 / 待优化 ⬜

优先级 任务 说明
🔴 高 AmCham 采集 当前为公开页面抓取,如需完整内容需配置 IMAP + RSSBridge
🔴 高 Lingxi360 邮件订阅转 RSS 需用户填写邮箱表单并配置 IMAP
🟡 中 微信公众号直接抓取 目前通过搜狗微信关键词替代;RSSHub 私有部署可提升质量
🟡 中 RSSHub 私有部署 比 RSSBridge 公开实例更稳定,需要一台服务器
🟡 中 去重准确度提升 可考虑加入来源域名+日期组合去重
🟡 中 报告 HTML 美化 可加入来源分布饼图、关键词云等
🟢 低 Telegram Bot 推送 除邮件外增加 Telegram 通知选项
🟢 低 CI/CD 测试 每次提交自动运行采集测试,确保各来源可用

采集来源一览(90+)

点击展开完整来源列表

国内来源

  • RSS订阅:中国发展简报、公益时报、南都公益基金会、慈善时报、中国慈善联合会、中华慈善总会、中国民政部、中国基金会中心网
  • 平台公益:腾讯公益、新浪公益、网易公益、搜狐公益、凤凰网公益
  • 媒体公益:澎湃新闻·公益频道、人民网·公益频道、新华网·公益、央视网·公益、中国新闻网·公益
  • 搜狗微信:公益、慈善、儿童救助、气候变化、NGO、社会组织、残障融合、罕见病、妇女权益、SDG、公益时报、中国发展简报、南都公益、扶贫、志愿服务
  • 微博热搜:公益、慈善、儿童、气候、扶贫、志愿者

国际来源

  • 联合国系列:联合国中文新闻(RSS)、联合国开发计划署(RSS)、UNICEF中国、妇女署中国、世界粮食计划署中国、世卫组织中国
  • 国际机构:乐施会中国(Oxfam)、国际环境与发展研究所(IIED)、USAID、英国外交部(FCDO)
  • 国际媒体:Devex、Philanthropy News Digest、GlobalGiving、News Minimalist
  • BBC:国际频道、环境频道、健康频道
  • The Guardian:国际频道、环境频道
  • Reuters:健康频道、商业频道
  • AP 美联社
  • New Humanitarian(人道主义新闻)
  • Oxfam International / Greenpeace International

聚合热榜

  • 今日热榜·综合频道、公益频道、社会频道
  • AnyKnew 热榜

机构存档

  • 中国政府NGO网、中华慈善总会新闻、中国社会责任新闻、中国基金会新闻、公民基金网

许可证

MIT License — 可自由使用、修改、分发。


💡 如需扩展任何功能、增加信息源、或迁移到其他领域,直接告诉我即可。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages