ai_news
v1.0.0
Published
AI 新闻聚合系统 - 使用 Gemini 分析网页内容并生成中文资讯汇总
Readme
AI 新闻聚合系统
自动化 AI 新闻聚合系统,通过 Gemini Pro 分析网页内容并生成中文资讯汇总,支持通过邮件发送。
功能特性
- 多源数据抓取:支持手动维护的 URL 列表
- 页面链接提取:从列表页面(如 HackerNews)自动提取文章链接
- URL 预验证:过滤无效链接,避免浪费 Gemini 配额
- 智能去重:URL 标准化 + 文件持久化
- Gemini Web 自动化:使用 Playwright 控制浏览器,自动查询分析
- 并发处理:支持多个 Gemini 会话并发处理
- 内容汇总:按类别分组、排序,生成 Markdown
- 格式转换:Markdown → HTML(邮件友好)
- 邮件发送:通过 SMTP 发送到 QQ 邮箱
- 定时调度:支持 cron 定时任务
安装
# 安装依赖
npm install
# 初始化项目
npm run init配置
- 编辑
.env文件,配置 QQ 邮箱:
[email protected]
QQ_EMAIL_PASS=your_authorization_code获取授权码:登录 QQ 邮箱 → 设置 → 账户 → 开启 SMTP 服务 → 生成授权码
- 在
data/sources/urls.json中配置数据源:
{
"sources": [
{
"url": "https://news.ycombinator.com/",
"type": "dom",
"linkSelector": ".titleline > a",
"titleSelector": ".titleline",
"excludePatterns": ["from\\?site="]
},
{
"url": "https://www.theverge.com/",
"type": "sitemap"
},
{
"url": "https://techcrunch.com/",
"type": "rss",
"feedUrl": "https://techcrunch.com/feed/"
},
{
"url": "https://openai.com/blog",
"type": "auto"
}
]
}数据源类型:
rss: RSS Feed 提取sitemap: Sitemap 提取dom: 使用 CSS 选择器从页面提取auto: 自动检测(依次尝试 RSS → Sitemap)
DOM 类型配置:
linkSelector: 链接元素的 CSS 选择器titleSelector: 标题元素的 CSS 选择器(可选)excludePatterns: 要排除的 URL 正则模式(可选)
使用
命令行
# 抓取 URL 并使用 Gemini 分析
npm run scrape
# 生成汇总并发送邮件
npm run generate定时任务
使用 cron skill 配置定时任务:
// 每小时抓取
0 * * * * npm run scrape
// 每天早上 8 点生成汇总
0 8 * * * npm run generate项目结构
ai_news/
├── src/
│ ├── managers/ # 管理器(URL、去重、存储)
│ ├── scrapers/ # 抓取器(URL 验证、Gemini 控制、列表提取)
│ ├── processors/ # 内容处理
│ ├── generators/ # 汇总生成(Markdown、HTML)
│ ├── email/ # 邮件发送
│ └── scheduler/ # 定时任务
├── scripts/ # 命令行脚本
├── data/ # 数据目录
├── output/ # 输出目录
└── config/ # 配置文件配置选项
在 config/config.json 中可以配置:
{
"pageExtraction": {
"enabled": true, // 是否启用页面链接提取
"headless": true, // 是否使用无头浏览器
"timeout": 30000, // 页面加载超时(毫秒)
"selectors": [ // 提取链接的 CSS 选择器
"article a[href]",
".post a[href]",
".item a[href]"
],
"filteredDomains": [ // 过滤的域名
"facebook.com",
"twitter.com",
"x.com"
]
},
"gemini": {
"concurrency": 2, // Gemini 并发数
"chatUrls": [ // 多个 Gemini 会话 URL
"https://gemini.google.com/app/xxx"
]
}
}注意事项
- 首次使用:首次运行时需要手动在浏览器中登录 Gemini
- Session 过期:Gemini Session 会过期,需要重新登录
- 网络稳定:Gemini 响应时间不确定,建议设置合理的超时
- 邮件频率:QQ 邮箱可能有反垃圾机制,注意发送频率
技术栈
- Node.js
- Playwright(浏览器自动化)
- marked(Markdown 转 HTML)
- juice(CSS 内联)
- nodemailer(邮件发送)
License
ISC
