Twitter → 钉钉 实时消息推送系统,支持 A 股关键词特别提醒。
- 每分钟/每 5 分钟轮询 Twitter 作者的推文和回复
- 全部推文实时推送至钉钉群机器人
- A 股相关消息自动标注 🔴【A股相关】醒目提醒
- 自动去重,同一条绝不推送两次
- 支持同时跟踪多个 Twitter 作者
- 可配置的 A 股关键词列表
- Docker 部署 / GitHub Actions 免服务器运行
Nitter RSS → Fetcher 获取推文 → Matcher 关键词匹配 → Pusher 钉钉推送 → Store 去重
通过 Nitter 的 RSS 接口获取 Twitter 数据,无需 Twitter API 付费订阅。
- Fork 本仓库
- 在
Settings → Secrets and variables → Actions中添加 Secret:- 名称:
DINGTALK_WEBHOOK_URL - 值:你的钉钉机器人 Webhook 地址
- 名称:
- 编辑
config.yaml修改要跟踪的作者和关键词 - GitHub Actions 会自动每 5 分钟运行一次
手动触发:Actions → Twitter to DingTalk Tracker → Run workflow
# 1. 编辑 config.yaml,填入钉钉 Webhook URL
# 2. 启动
docker compose up -d
# 查看日志
docker compose logs -f# 1. 安装
pip install -r requirements.txt
# 2. 设置钉钉 Webhook(二选一)
# 方式 A:环境变量(推荐,不泄露密钥)
set DINGTALK_WEBHOOK_URL=https://oapi.dingtalk.com/robot/send?access_token=你的token
# 方式 B:直接写在 config.yaml 里
# 3. 启动(持续运行模式,每分钟轮询)
python -m src.main config.yaml
# 或者单次运行模式
python -m src.main config.yaml --once编辑 config.yaml:
# 要跟踪的作者列表(可添加多个)
authors:
- username: "aleabitoreddit" # Twitter 用户名
display_name: "Ale Abit" # 钉钉里显示的名称
# Nitter 实例(按优先级排列,挂了自动切换)
nitter_instances:
- "https://nitter.net"
- "https://nitter.privacydev.net"
- "https://nitter.poast.org"
# 钉钉配置(推荐使用环境变量 DINGTALK_WEBHOOK_URL 替代)
dingtalk:
webhook_url: ""
# A 股关键词列表(推文内容包含任一关键词即标记)
a_stock_keywords:
- "A股"
- "上证"
- "深证"
- "沪指"
- "深成指"
- "创业板"
- "科创板"
- "北向"
- "南向"
- "券商"
- "涨停"
- "跌停"
- "沪深"
- "中证"
- "IPO"
- "证监会"
- "印花税"
- "量化"
# 轮询间隔(秒),GitHub Actions 中此值无效
poll_interval_seconds: 60
# SQLite 数据库路径
database_path: "data/tweets.db"在 authors 列表中添加:
authors:
- username: "aleabitoreddit"
display_name: "Ale Abit"
- username: "another_user"
display_name: "另一个人"直接编辑 a_stock_keywords 列表,增删关键词即可。下次轮询自动生效。
普通推文:
📢 @Ale Abit 新推文
> 推文内容...
🔗 https://x.com/aleabitoreddit/status/1234567890
🕐 2026-06-06 14:30:00
A 股相关推文:
🔴【A股相关】📢 @Ale Abit 新推文
> 这条推文提到了A股市场...
🔗 https://x.com/aleabitoreddit/status/1234567890
🕐 2026-06-06 14:30:00
回复推文:
💬 @Ale Abit 的回复
> 回复内容...
🔗 https://x.com/aleabitoreddit/status/1234567890
🕐 2026-06-06 15:00:00
- 打开钉钉,进入目标群聊
- 点击右上角
...→智能群助手→添加机器人 - 选择
自定义机器人 - 安全设置选择
自定义关键词,填入A股(可选) - 复制 Webhook URL
编辑 config.yaml,从 Nitter 实例列表 找到可用的新实例,添加到 nitter_instances 中。
可以,编辑 .github/workflows/run.yml 中的 cron 表达式:
*/5 * * * *= 每 5 分钟*/10 * * * *= 每 10 分钟- GitHub 最短间隔为 5 分钟
- 本地/Docker 持续运行模式使用
poll_interval_seconds(默认 60 秒) - GitHub Actions 的 cron 控制运行频率(默认 5 分钟)
--once模式下poll_interval_seconds无效
不会。首次运行只记录不推送历史推文,后续通过 SQLite 数据库去重,同一条推文绝不重复推送。
# 运行所有测试
pytest tests/ -v
# 运行指定模块测试
pytest tests/test_fetcher.py -vNewsTracking/
├── config.yaml # 配置文件
├── pyproject.toml
├── requirements.txt
├── Dockerfile
├── docker-compose.yaml
├── .github/workflows/run.yml # GitHub Actions 工作流
├── src/
│ ├── main.py # 入口
│ ├── config.py # 配置加载
│ ├── fetcher.py # Nitter RSS 获取
│ ├── matcher.py # A股关键词匹配
│ ├── pusher.py # 钉钉推送
│ ├── scheduler.py # 调度器
│ └── store.py # SQLite 去重
├── data/ # 运行时数据
└── tests/ # 测试