Trendradar 部署指南
项目概述
TrendRadar 是一个全栈式趋势分析系统,旨在通过爬虫抓取、自然语言处理(NLP)和数据可视化技术,帮助用户实时捕捉特定领域的动态。项目采用 GitHub Actions 自动化运行,支持多种通知渠道,具备零技术门槛部署的特点。
1.1核心特性
- 全网热点聚合:集成知乎、微博、抖音、百度热搜等 11+ 主流平台
- 智能内容筛选:支持普通词、必须词(+)、过滤词(!)三种语法
- 多推送模式:当日汇总、当前榜单、增量监控三种运行模式
- 多渠道通知:支持企业微信、飞书、钉钉、Telegram、邮件等推送渠道
- 热点趋势分析:基于权重算法的新闻热度排序与趋势追踪
- AI 智能分析:基于 MCP 协议的对话式分析功能(v3.0.0 新增)
1.2核心架构分析
TrendRadar 采用单体应用架构,所有功能集中在 main.py 文件中,这种设计便于用户快速部署和升级。系统整体架构可以分为以下几个核心模块
TrendRadar/
├── 配置管理模块 (config/*.yaml, config/frequency_words.txt)
├── 数据获取模块 (DataFetcher)
├── 数据处理模块 (数据解析、统计分析)
├── 报告生成模块 (HTML/Markdown 生成)
├── 通知推送模块 (多渠道适配器)
├── AI 分析模块 (MCP 服务器)
└── 自动化部署 (GitHub Actions)
| 技术领域 | 使用技术 | 说明 |
|---|---|---|
| 开发语言 | Python 3.x | 主要编程语言 |
| 配置管理 | YAML | 配置文件格式,支持复杂配置结构 |
| 网络请求 | requests | HTTP 客户端库,支持代理和重试机制 |
| 数据处理 | pytz | 时区处理,支持北京时间标准化 |
| 通知服务 | Webhook API | 支持企业微信、飞书、钉钉等多种平台 |
| AI 协议 | MCP (Model Context Protocol) | 标准化的 AI 工具调用协议 |
| 部署平台 | GitHub Actions | 自动化运行和版本管理 |
1.3核心功能展示
数据汇总
通过config目录下的config.yaml和frequency_word.txt两个文件进行功能选择和关键词筛选。
frequency文件支持该文件用于定义热点筛选规则,支持普通词、必须词(+前缀)、过滤词(!前缀)及词组分隔(空行)等语言。config.yaml文件可对信息的抓取频率,对象,以及是否开启推送进行抉择
定点推送

能够在固定的时间,定时的在社交平台分享最新的流量新闻
AI接入
如果消息量过大的话,可以利用cmp的接口让ai帮助我们查找相关信息

当然也可以让ai爬取最新的新闻

部署环境
2.1 系统要求
# 操作系统支持
- Linux (Ubuntu 18.04+, CentOS 7+, Debian 9+)
- macOS (10.14+)
- Windows (10+, Windows Server 2019+)
# 软件依赖
- Python 3.8+
- Docker 20.10+ (可选,用于容器化部署)
- Git 2.20+ (用于代码获取)
- uv (推荐,用于依赖管理)
# 硬件要求
- 最低配置: 1 CPU, 1GB RAM, 10GB存储
- 推荐配置: 2 CPU, 2GB RAM, 50GB存储
2.2python环境
# 使用uv管理Python环境(推荐)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 创建项目环境
uv venv
source .venv/bin/activate # Linux/macOS
# 或 .venv\Scripts\activate # Windows
# 安装依赖
uv pip install -r requirements.txt
项目部署
该项目共有两个部署方式,我们先将简单一点的,使用github直接进行拉取
3.1Git actions方式
这个方式最大的优点就是脱离docker的部署,直接通过github的action进行部署,且能迅速的访问web端。相对缺点也比较明显,维护较为麻烦,需要不停更新修改,且每次修改都需要访问到自己主页面去逐步改正。
-
第一步,找到项目的git地址:https://github.com/sansan0/TrendRadar,将他fork到自己的仓库中去

-
第二步,进到刚刚fork好的项目中去,点击settings,然后到page项里去,更改一下branch的设置,设置在main函数下的root目录中
-
第三步就是访问actions项里,然后到Hot News Crawler里(必须是这个)点击run worlflower,等他build完成之后就可以直接访问网址了,网站是(https://你的账号名字.github.io/你的项目名称/)

补充一点,这里的actions其实和原项目不太一致,具体原因我们放在第四点中详细解释
原项目里还有一个check in 的进程,本意是如果使用者在七天之内没有再次运行的话就会自动把网站的访问权限给关闭。

3.2Git actions的困难之处
可能是近期才跟新的缘故,新的项目在该方法中存在大量的bug(且存在普遍性),主要如下:
-
首先是如果我们按照上述方法进行workflow,我们会发现改项目进程会一直卡在这个地方。经过查阅和代码审计之后会发现,如果从项目里面直接fork的话,会导致workflow_dispatch:这个创建节点的丢失,从而导致项目一直在创建转圈之中,

这里有两个解决方案,第一个和下面的图片一样,随便写入一个workflow_dispatch:函数,然后执行空指令可以继续创建,

第二个方法就是不使用fork,通过use this template选项来创建项目,将所有分支都选中,也可以创建网页,然而这样就导致了第二个问题
-
当我们成功创建网页的时候,想利用关键词抓取我们想要的内容,我们突然发现,无论如何修改网页,最后刷新出来的结果都没有变,web端被写死了

最后无奈使用了旧一点的版本,唯一的缺点就是新功能大模型CMP无法落地
3.3docker部署
这个方法是比较适合开发者进行部署和管理的,但是缺点就是比较麻烦,需要docker的环境,并且镜像的拉取很容易失败。经过尝试之后,我们发现问题出在作者的dockerfile里面,作者的
RUN pip install --no-cache-dir -r requirements.txt
没有做任何的换源处理,导致我们在kaili上一直拉取失败,所以我们最后选择在win本地部署。当然win的docker需要hyper-v和wsl的安装,这些在网上都有详细教程,我们这里重点讲trendrada的部署。
-
首先第一步,拉取镜像,这里我自己写了一个bat的脚本来帮我们一键部署,可以参考一下,
@echo off chcp 65001 >nul echo ========================================== echo TrendRadar Docker 启动脚本 echo ========================================== echo. docker --version >nul 2>&1 if %errorlevel% neq 0 ( echo ❌ 未检测到 Docker,请先安装 Docker Desktop 并启动。 echo 下载地址: https://www.docker.com/products/docker-desktop/ pause exit /b 1 ) echo 正在构建并启动 TrendRadar... docker compose -f docker/docker-compose-build.yml up -d --build if %errorlevel% neq 0 ( echo ❌ 启动失败,请检查 Docker 是否正在运行。 pause exit /b 1 ) echo. echo ✅ TrendRadar 已在后台启动! echo. echo 正在查看日志 (按 Ctrl+C 退出日志查看,不会停止服务)... echo. docker compose -f docker/docker-compose-build.yml logs -f然后针对dockerfile,我们也略微修改了一下,就是加了一个aliyuan,在刚刚的地方补充一个
-i https://mirrors.aliyun.com/pypi/simple/就可以了,然后我们点击刚刚写的bat,双击运行,直接就部署完成了

-
第二步,我们在.env的配置文件中,把web预览改为ture
ENABLE_WEBSERVER=true在不修改默认端口的情况下,我们访问http://localhost:8080/就可以看到我们刚刚抓取的内容了
3.3docker的困难之处
kali里docker部署有一个很大的问题就是.env作为环境变量到了kali里会直接自动消失掉,导致后面的配置很繁琐且docker的拉取非常不稳定,容易失败
win docker的唯一困难点就是镜像的拉取以及部署问题,其他基本上都是优点,只要熟悉操作之后,很快就可以上手了。
项目扩展
基于上述项目的基本功能落地,现在我们开始尝试利用一下trendrada的特色定制化、推送功能以及CMP部署
4.1 特色定制化
config的部分配置选择
# config/config.yaml优化配置
app:
# 生产环境建议关闭版本检查以减少网络请求
show_version_update: false
crawler:
# 请求间隔根据目标网站调整,避免过于频繁
request_interval: 2000 # 2秒
# 启用爬虫
enable_crawler: true
# 代理设置(如需要)
use_proxy: false
default_proxy: "http://127.0.0.1:10086"
report:
# 根据需求选择模式
mode: "daily" # daily|current|incremental
# 排名高亮阈值
rank_threshold: 5
notification:
# 启用通知
enable_notification: true
# 消息分批大小(根据渠道调整)
message_batch_size: 4000
dingtalk_batch_size: 20000
feishu_batch_size: 29000
# 批次发送间隔
batch_send_interval: 3
push_window:
# 启用时间窗口控制
enabled: true
time_range:
start: "09:00" # 工作时间推送
end: "18:00"
# 每天只推送一次
once_per_day: true
# 推送记录保留7天
push_record_retention_days: 7
weight:
# 权重配置根据需求调整
rank_weight: 0.6 # 重视排名
frequency_weight: 0.3 # 考虑频次
hotness_weight: 0.1 # 适度考虑热度
关键词设置
# 提示:
# 1. 关键词越靠前,优先级越高
# 2. 使用空行分隔不同词组
# 3. 合理使用必须词(+)和过滤词(!)
# 4. 避免词组过于复杂
基于cron 表达式进行推送时间定制化,由 5 个字段组成,按顺序分别是:
- 分钟(0–59)
- 小时(0–23)
- 日(1–31)
- 月(1–12)
- 星期(0–7,0或7代表周日)
# CRON_SCHEDULE优化建议
# 高频监控(每15分钟)
CRON_SCHEDULE="*/15 * * * *"
# 标准频率(每30分钟)
CRON_SCHEDULE="*/30 * * * *"
# 低频监控(每小时)
CRON_SCHEDULE="0 * * * *"
# 工作时间推送
CRON_SCHEDULE="0 9-18 * * 1-5"
# 晚间汇总推送
CRON_SCHEDULE="0 20 * * *"
4.2推送功能
-
企业微信推送
企业微信的部署相对简单,只要在群聊里找到消息推送,就可以自己部署一个了,需要注意的是你必须是群的群主且要记住你的Webhook地址

完成之后可以发现可以成功完成推送了,并且推送的频率和次数我们都可以自己定夺

-
飞书推送功能
飞书的官方指南也是有的:自定义机器人使用指南 - 开发指南 - 开发文档 - 飞书开放平台
并且飞书可以自定义机器人发送的消息格式,所以体验感是最好的,操作起来和企业微信是大差不差的

-
钉钉推送功能
这个其实和上面两个都大差不差,但是钉钉的群聊不能有一个人组成,所以这里就没办法亲自实验了,但是官方是有机器人指南的,所以因该问题不大。自定义机器人接入 - 钉钉开放平台
-
邮箱推送功能
邮箱的话,首先要注意的是你的内容是以html的格式发送出去的,所以首先要在config.yaml文件里把html的生成允许打开,然后再docker的env中把你的邮箱配置进去。

需要注意的是,作为主流的邮件无需配置邮箱的服务以及端口。此外,基于各大厂商的安全考量,现在的直接用邮箱密码给项目登录是不现实的,因为你属于陌生账号登录,需要验证码才能通过,所以这里我们需要改为使用QQ的授权码才能实现。

一开始并不知道为什么会产生这个bug,后面用docker专门去跑了一下这个服务,才发现问题所在
docker exec -it trendradar python -c "import smtplib; s=smtplib.SMTP_SSL('smtp.qq.com',465,timeout=10); print('connected'); s.close()"
发送授权码的步骤如上,需要我们手动去开启服务,然后获取授权码,然后再password的地方把授权码填上去,然后就可以完成自动的消息推送了
4.3 CMP部署
在这个项目中,我们之前查找的内容会放在一个目录名为output的文件夹下,基于这个特性,我们可以部署一个CMP从而结合AI帮我们做总结。部署的话同样有两种方法。
第一种是根据开发者在指南里提到的,可以通过他自己写的setup-windows-en.bat来运行。用的是cherry的标注输入stdio模式
==========================================
Setup Complete
==========================================
MCP Server Configuration for Claude Desktop:
Command: C:\Users\Square\.local\bin\uv.exe
Working Directory: D:\Download\TrendRadar-master
Arguments (one per line):
--directory
D:\Download\TrendRadar-master
run
python
-m
mcp_server.server
Configuration guide: README-Cherry-Studio.md
运行完之后会有一个command和argument两个内容,分别填入到cherry studio里可以了
还有一种是直接用docker开启他的cmp镜像
docker compose -f docker/docker-compose-build.yml ps
curl http://127.0.0.1:3333/mcp
curl -H "Accept: text/event-stream" http://127.0.0.1:3333/mcp --verbose
我们可以看到他的镜像是映射到我们的3333端口的,所以我们可以直接通过http流的方式进行调用
在cherry里选用streamableHttp模式,url头直接选取http://127.0.0.1:3333/mcp就可以了
然后就可以调用接口进行对话了,具体的话术在https://github.com/sansan0/TrendRadar/blob/master/README-MCP-FAQ.md这里有所体现
此外,在最新的版本中还可以让ai调用trendrada去搜集最新的消息,做到实时更新
总结
TrendRadar作为一个功能完整的热点资讯聚合系统,提供了多种部署方式和灵活的配置选项。通过本文介绍的最佳实践和部署指南,用户可以根据自己的需求选择合适的部署方案,并进行相应的优化配置。
关键要点回顾:
- 选择合适的部署方式:GitHub Actions适合快速开始,Docker适合生产环境
- 合理配置参数:根据实际需求调整爬取频率、推送方式等参数
- 做好监控维护:建立日志监控和健康检查机制
- 注意安全防护:妥善管理凭证,配置网络安全
- 定期备份升级:建立数据备份机制,及时升级版本
通过遵循这些最佳实践,用户可以确保TrendRadar系统的稳定运行,充分发挥其在热点资讯监控方面的价值。随着使用经验的积累,用户还可以根据具体需求进行更深入的定制和优化。
参考资料
- TrendRadar GitHub仓库:https://github.com/sansan0/TrendRadar
- TrendRadar多渠道推送系统实现(企业微信、飞书、钉钉等)_trendradar 推送-优快云博客
- 自定义机器人使用指南 - 开发指南 - 开发文档 - 飞书开放平台
- 自定义机器人接入 - 钉钉开放平台
- CarlowZJ-优快云博客
- CoderJia_-优快云博客
1234

被折叠的 条评论
为什么被折叠?



