GitHub·· 7 天前AI 评分38
XDigest:追踪 X 用户发言并生成 AI 邮件日报的开源工具
Cyoukakitsu/XDigest
AI 导读
开源项目 XDigest 可自动追踪指定 X 用户的发言,用 AI 生成结构化中文摘要,并每天 08:30(Asia/Shanghai)通过 Gmail 发送邮件日报。
正文
自动追踪 X(Twitter)用户的发言,通过 AI 生成结构化摘要,每天早上 08:30 发送邮件日报。支持对收集到的内容进行聊天式深度追问,并在邮件顶部附带当日大盘快报(Fear & Greed 指数 + 板块 ETF 涨跌 + 科技股表现)。
功能
- 追踪 X 用户的发言,添加/删除/备注管理
- 按时间段(今天 / 本周 / 本月)抓取推文
- AI 生成结构化中文摘要
- 主要话题与重要观点
- 值得关注的信息
- 看涨/看跌标的列表(附理由)
- 流式 AI 聊天,深度追问收集内容
- 每天 08:30(Asia/Shanghai)发送邮件日报,支持按用户开关订阅
- 大盘快报:邮件顶部展示当日市场情绪(Fear & Greed)、板块 ETF 涨跌、科技股表现的 AI 中文摘要
技术栈
| 层级 | 技术 |
|---|---|
| 前端 | React + Vite + Tailwind CSS + Zustand |
| 后端 | FastAPI + Python 3.11 |
| 数据采集 | twikit(X 非官方客户端) |
| 市场数据 | feargreedmeter.com + Alpha Vantage 免费 API |
| AI | OpenRouter API(默认:openrouter/auto) |
| 定时任务 | macOS launchd(每天 08:30 自动执行) |
| 邮件发送 | Gmail SMTP(SSL) |
环境要求
- Python 3.11 及以上
- Node.js 18 及以上
- X 账号(用于登录抓取)
- OpenRouter API Key
- Alpha Vantage API Key(免费,每天 25 次额度)
- Gmail 账号(发送日报邮件,需要应用专用密码)
安装
后端
cd backend python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt cp .env.example .env # 编辑 .env,填写所有必要的环境变量
前端
cd frontend
npm install环境变量
backend/.env
# OpenRouter OPENROUTER_API_KEY=your_openrouter_key OPENROUTER_MODEL=openrouter/auto # 可替换为任意 OpenRouter 模型 # Gmail 邮件推送(需要 Google 应用专用密码) GMAIL_USER=your_address@gmail.com GMAIL_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx DIGEST_TO=recipient@gmail.com # Alpha Vantage 市场数据(免费,25 次/天) AlphaVantage_API_Key=your_alpha_vantage_key
获取 Gmail 应用专用密码:Google 账户 → 安全性 → 两步验证 → 应用专用密码 → 生成
frontend/.env
VITE_API_URL=http://localhost:8000
启动
后端(端口 8000)
cd backend source venv/bin/activate uvicorn main:app --reload
前端(端口 5173)
cd frontend
npm run dev浏览器打开 http://localhost:5173。
使用方式
- 点击左下角「⚙ X 账号登录」,输入 X 账号密码完成登录(Cookie 保存在本地)
- 在侧边栏输入框中输入要追踪的 X 用户名,点击添加
- 点击 ✎ 图标为用户添加备注(便于区分)
- 点击 ✉ 图标开启/关闭该用户的邮件订阅
- 选择用户,选择时间段(今天 / 本周 / 本月),点击「获取发言」
- 查看 AI 摘要,在聊天框中进行深度追问
项目结构
├── backend/
│ ├── main.py # FastAPI 路由
│ ├── digest_job.py # 本地定时执行脚本(无需 FastAPI 服务器)
│ ├── scraper.py # X 数据抓取(twikit)
│ ├── ai.py # OpenRouter AI 调用
│ ├── emailer.py # 邮件生成与发送
│ ├── market_data.py # 市场数据抓取(Fear & Greed + Alpha Vantage)
│ ├── twikit_patches.py # twikit 2.3.x 兼容性补丁
│ └── tests/ # 后端单元测试
├── frontend/
│ └── src/
│ ├── store.js # Zustand 全局状态
│ └── components/ # React 组件
├── feature_list.json # 功能状态列表
├── progress.md # 开发进度日志
└── init.sh # 环境验证脚本
本地定时执行(macOS)
每天 08:30 自动发送邮件日报,使用 macOS launchd。无需 FastAPI 服务器常驻。
手动执行
cd backend
venv/bin/python digest_job.py注册 launchd
创建文件 ~/Library/LaunchAgents/com.xdigest.digest.plist(路径根据实际调整):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.xdigest.digest</string> <key>ProgramArguments</key> <array> <string>/path/to/x/backend/venv/bin/python</string> <string>/path/to/x/backend/digest_job.py</string> </array> <key>WorkingDirectory</key> <string>/path/to/x/backend</string> <key>StartCalendarInterval</key> <dict> <key>Hour</key><integer>8</integer> <key>Minute</key><integer>30</integer> </dict> <key>StandardOutPath</key> <string>/Users/your_name/Library/Logs/xdigest.log</string> <key>StandardErrorPath</key> <string>/Users/your_name/Library/Logs/xdigest.log</string> <key>RunAtLoad</key> <false/> </dict> </plist>
注册与验证:
# 注册 launchctl load ~/Library/LaunchAgents/com.xdigest.digest.plist # 验证 launchctl list | grep xdigest # 查看日志 tail -50 ~/Library/Logs/xdigest.log
休眠说明:仅关闭屏幕(显示器休眠)时,08:30 正常执行。系统休眠(合盖等)期间跳过,Mac 唤醒后立即补跑。
开发
# 运行后端测试 cd backend && pytest # 前端 Lint cd frontend && npm run lint # 环境验证(测试 + lint) ./init.sh
来源:GitHub · github.com