基于Node.js 22+的自动化新闻收集与分析系统,通过GitHub Actions定时收集新闻并生成中文日报。
- 📰 多源新闻收集:集成NewsAPI、HackerNews和天行数据
- 🤖 AI智能分析:使用Google Gemini API自动生成摘要和分类
- 📧 多渠道推送:支持邮件(QQ邮箱)和飞书机器人推送
- 📝 多格式输出:生成Markdown和JSON格式的报告
- ⚡ 自动化运行:通过GitHub Actions定时执行
- 🔍 智能去重:自动识别和去除重复新闻
- 🎯 关键词过滤:自定义关键词搜索和相关性分析
- 运行时:Node.js 22+ ESM
- 开发语言:TypeScript
- 测试框架:Vitest
- 代码质量:ESLint + Prettier
- AI分析:Google Gemini API
- 发送邮件:Nodemailer(支持QQ邮箱)
在GitHub仓库的Secrets中添加以下环境变量:
# 必需
NEWS_API_KEY=your_newsapi_key
TIAN_API_KEY=your_tianapi_key
GEMINI_API_KEY=your_gemini_key
# 推送配置(可选)
QQ_EMAIL_ENABLED=true
QQ_EMAIL_CONFIG=smtp.qq.com:465:your_qq@qq.com:password
FEISHU_WEBHOOK_ENABLED=true
FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx进入GitHub仓库的Actions标签页,选择"Daily News Collection"工作流,点击"Run workflow"。
- 报告文件将保存到
reports/目录 - 推送日志可在GitHub Actions的运行日志中查看
- 推送结果将通过配置的渠道发送
# 安装依赖
npm install
# 运行测试
npm test
# 构建项目
npm run build
# 运行开发模式
npm run dev# 运行所有测试
npm test
# 运行指定测试文件
npm test -- tests/unit/EmailService.test.ts
# 生成测试覆盖率报告
npm run test:coverage| 环境变量 | 说明 | 必需 | 示例 |
|---|---|---|---|
| NEWS_API_KEY | NewsAPI.org的API密钥 | 是 | xxx |
| TIAN_API_KEY | 天行数据的API密钥 | 是 | xxx |
| GEMINI_API_KEY | Google Gemini API密钥 | 是 | xxx |
| QUERY_KEYWORDS | 查询关键词配置 | 否 | tech:AI,区块链;business:股市 |
| MAX_ARTICLES | 最大收集文章数 | 否 | 20 |
| SCHEDULE_CRON | 执行计划 | 否 | 0 8 * * * |
| OUTPUT_FORMAT | 输出格式 | 否 | markdown 或 json 或 both |
- 登录QQ邮箱网页版
- 进入【设置】→【账户】
- 开启【IMAP/SMTP服务】
- 获取16位授权码(不是QQ密码)
- 设置环境变量:
QQ_EMAIL_ENABLED=true QQ_EMAIL_CONFIG=smtp.qq.com:465:your_qq@qq.com:your_authorization_code
- 在飞书中创建自定义机器人
- 获取Webhook地址
- 设置环境变量:
FEISHU_WEBHOOK_ENABLED=true FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx
src/
├── collectors/ # 新闻收集器
├── services/ # 服务层(邮件、飞书、Gemini)
├── generators/ # 报告生成器
├── utils/ # 工具函数
├── prompts/ # AI提示词模板
├── config/ # 配置管理
└── types/ # TypeScript类型定义
tests/ # 测试文件
├── unit/ # 单元测试
└── setup.ts # 测试配置
.reports/ # 生成的报告文件
查看 docs/todo.md 了解详细的开发任务清单。
欢迎提交Issue和Pull Request来改进这个项目!
MIT