前言
作为一个经常刷热搜的人,每天要在微博、知乎、B站、V2EX、Hacker News 之间来回切换,就为了不错过什么重要的事。后来实在受不了了,干脆自己写了一个工具——HotPush,把多个平台的热榜聚合到一个页面,新热点还能自动推送到 Telegram、企业微信、飞书等 IM,不用主动去刷,热点自己来找你。
项目已开源,欢迎体验和交流。
在线演示:hotpush.dawenzaist.de5.net(测试账号:test / test123)
GitHub:github.com/JackyST0/ho…
效果展示
技术选型
| 层级 | 技术 | 选择理由 |
|---|---|---|
| 后端框架 | FastAPI | 异步原生支持,性能好,自带 Swagger 文档 |
| 前端框架 | Vue 3 + Vite | 组合式 API 开发体验好,Vite 构建速度快 |
| UI | Tailwind CSS | 原子化 CSS,快速搭建现代化界面 |
| 状态管理 | Pinia | Vue 3 官方推荐,比 Vuex 更简洁 |
| 数据库 | MySQL | 持久化推送记录、用户数据、推送规则等 |
| 缓存 | Redis | 热榜数据缓存、推送去重、抓取锁 |
| 定时任务 | APScheduler | 轻量级,支持异步,配置灵活 |
| 数据源 | RSSHub | 万物皆可 RSS,统一的数据获取方式 |
| 部署 | Docker Compose | 一键启动全部服务,开箱即用 |
架构设计
整体分为四个核心模块:
1. 数据抓取层
通过 RSSHub 统一获取各平台热榜数据。项目自带 RSSHub 实例,支持多实例容错——主实例挂了自动切换备用实例。用 Redis 缓存抓取结果(默认 5 分钟 TTL),避免频繁请求上游。
2. 推送服务层
这是项目的核心。设计了一个 BasePusher 抽象基类,每个推送渠道继承实现:
- Telegram:Bot API 推送,支持 HTML 格式
- Discord:Webhook 推送
- 企业微信 / 飞书 / 钉钉:Webhook 推送,Markdown 格式
- 邮件:SMTP 推送,HTML 模板
- Webhook:通用 Webhook,适配任意平台
消息支持自动分割(避免超长消息被截断),按平台分组显示。
3. 规则过滤层
推送前经过规则引擎过滤:
- 关键词过滤:包含/排除关键词
- 时间段限制:设置免打扰时段
- 来源过滤:只推送指定平台的内容
- 去重机制:Redis Set 记录已推送条目,避免重复推送
4. Web 管理层
Vue 3 构建的管理界面,所有配置可视化操作:
- 实时查看聚合热搜榜
- 在线配置推送渠道(填 Token 就行,不用改配置文件)
- 管理过滤规则
- 查看推送历史
- 多用户权限管理
部署方式
Docker Compose 一键启动,包含 MySQL、Redis、RSSHub、后端、前端共 5 个服务:
git clone https://github.com/JackyST0/hotpush.git
cd hotpush
docker compose up -d
访问 http://localhost:3001,默认管理员 admin / admin123。
目前支持的平台
微博、知乎、B站、V2EX、Hacker News、Linux DO、掘金、少数派、品玩、豆瓣热映、豆瓣新书、联合早报、澎湃新闻,共 13 个内置源,还支持自定义添加任意 RSS 源。
后续计划
- AI 摘要:接入大模型,自动总结每日热点
- PWA 移动端:手机端体验优化
- 热搜趋势图表:可视化热度变化
写在最后
项目 MIT 协议开源,欢迎 Star、Issue、PR。如果你也受够了每天在各个平台之间来回切换刷热搜,可以试试这个工具。
GitHub 地址:github.com/JackyST0/ho…