用 TrendRadar 在飞牛OS上搭一个AI情报站

信息过载的时代,主动权得自己抢回来。

用 TrendRadar 在飞牛OS上搭一个AI情报站

每天打开手机,各个平台的算法争着把它们认为你「该看」的东西塞进来。你以为在刷信息,其实是在被信息刷。

TrendRadar 是一个开源的热点聚合工具,能同时监控知乎、微博、抖音、今日头条等十几个平台的热榜,用你自己设定的关键词过滤,然后推送到 Telegram。从此你看到的,是你想看的。

这篇文章记录我在飞牛OS上部署它的完整过程。


准备工作

你需要:

  • 一台装有飞牛OS的NAS(或其他能跑Docker的机器)
  • 一个 Telegram 账号
  • 代理(用于容器访问 Telegram API,局域网内有代理即可)

一、在飞牛OS上部署容器

1.1 获取源码

前往 TrendRadar 的 GitHub 页面,下载完整源码压缩包,解压到飞牛OS上你想存放的路径。

项目地址:https://github.com/sansan0/TrendRadar
下载源码

解压后目录结构如下:

TrendRadar/
├── config/          ← 配置文件目录
│   ├── config.yaml
│   └── frequency_words.txt
├── output/          ← 输出目录,自动生成报告
├── docker-compose.yml
└── ...

configoutput 两个目录已经包含在源码里,不需要手动创建,后续挂载时直接指向这两个目录即可。

1.2 在飞牛OS Docker 中创建容器

打开飞牛OS管理后台 → Docker → 新建容器,镜像填:

wantcat/trendradar:latest
下载镜像

1.3 挂载目录

在容器的卷挂载设置中,添加两条挂载:

宿主机路径容器路径模式
/your/path/TrendRadar/config/app/config只读
/your/path/TrendRadar/output/app/output读写

路径替换成你实际解压的位置。

1.4 配置环境变量

TrendRadar 的所有运行参数都通过环境变量注入,在容器环境变量设置里逐条添加。

基础运行:

TZ=Asia/Shanghai
RUN_MODE=cron
CRON_SCHEDULE=0 9,18 * * *
IMMEDIATE_RUN=true

Telegram 推送:

TELEGRAM_BOT_TOKEN=你的Bot Token
TELEGRAM_CHAT_ID=你的Chat ID

如何获取这两个值,见第二章。

代理(访问 Telegram 必须):

HTTP_PROXY=http://局域网代理IP:端口
HTTPS_PROXY=http://局域网代理IP:端口

将 IP 和端口替换成你局域网内代理机器的实际地址,比如 http://192.168.1.50:7890。确认代理软件已开启「允许局域网连接」选项。

启动容器。因为 IMMEDIATE_RUN=true,容器启动后会立刻执行一次推送,可以用来验证配置是否正确。

1.5 开启 Web 界面(可选)

TrendRadar 内置了一个轻量的 Web 服务,可以在浏览器里直接浏览聚合后的热点新闻,不依赖 Telegram 推送也能查看。

默认关闭,开启需要两步:

第一步: 在环境变量里追加:

ENABLE_WEBSERVER=true
WEBSERVER_PORT=8080

第二步: 在飞牛OS容器的端口映射里添加:

宿主机端口容器端口
80808080

重启容器后,在飞牛OS Docker 管理界面点击容器的终端按钮,执行:

之后在浏览器访问:

http://飞牛OS的IP:8080

即可看到热点新闻的 Web 汇总页面。


二、配置 Telegram 推送(可选)

2.1 创建专属 Bot

在 Telegram 搜索 @BotFather,发送 /newbot,按提示完成创建,依次填入 Bot 的名称和用户名。完成后会获得一串 Token:

123456789:ABCdefGHIjklMNOpqrSTUvwxYZ

把这串 Token 填入环境变量 TELEGRAM_BOT_TOKEN

2.2 获取你的 Chat ID

在 Telegram 搜索 @userinfobot,发任意消息,它会回复你的账号 ID(纯数字)。

把这个数字填入环境变量 TELEGRAM_CHAT_ID

2.3 激活 Bot

这一步容易漏掉。 在 Telegram 找到你刚创建的 Bot,主动发一条 /start。没有这一步,Bot 没有权限向你推送消息,日志会报 403 错误。


三、自定义推送内容

3.1 调整推送频率

修改环境变量 CRON_SCHEDULE,使用标准 Cron 表达式:

场景表达式
每天早9晚60 9,18 * * *
工作日早9点0 9 * * 1-5
每2小时0 */2 * * *
每30分钟*/30 * * * *

修改后在飞牛OS重启容器生效。

3.2 添加 RSS 订阅源

config.yamlrss.feeds 部分可以添加任意 RSS 源。以 AI 领域为例:

yaml

feeds:
  - id: "openai-news"
    name: "OpenAI 官方博客"
    url: "https://openai.com/blog/rss"
    max_age_days: 3

  - id: "huggingface-blog"
    name: "HuggingFace 博客"
    url: "https://huggingface.co/blog/feed.xml"
    max_age_days: 3

  - id: "36kr-ai"
    name: "36氪"
    url: "https://36kr.com/feed"
    max_age_days: 1

  - id: "geekpark"
    name: "极客公园"
    url: "https://www.geekpark.net/rss"
    max_age_days: 1

max_age_days 控制只推送几天内的文章,更新频繁的源设 1,博客类可以设 3。

3.3 配置关键词过滤

这是 TrendRadar 最核心的功能,通过 frequency_words.txt 控制推送内容。

文件分两个区域:

[GLOBAL_FILTER] 全局过滤,包含这些词的新闻一律不推送:

震惊
/AI绘画教程|AI换脸/

[WORD_GROUPS] 关键词组,命中任意一个词就推送。以追踪 AI 领域为例:

[AI Agent]
/AI Agent|AI智能体|智能体/
/\bDify\b|\bCoze\b|\bLangChain\b/
多智能体
工作流自动化

[开源模型]
/\bLlama\b|\bQwen\b|\bGemma\b/
/开源模型|开源大模型/
本地部署
量化

[代码生成]
/\bCursor\b|\bWindsurf\b|\bCline\b/
/代码生成|AI编程|AI写代码/
/\bClaude Code\b/

语法速查:

写法含义
关键词标题包含即匹配
/词A|词B/正则,匹配其中任意一个
+关键词必须包含此词
!关键词组内排除此词
关键词 => 别名自定义显示名称
@5该组最多显示5条
[组名]给词组命名

修改完配置文件后,重启容器即可生效,不需要重新建容器。

最终效果:


附:常见问题

收不到推送,日志报 403 去找你的 Bot 发一条 /start 激活它,然后重启容器。

收不到推送,日志报连接超时 检查代理配置,确认 HTTP_PROXY 填写的 IP 和端口正确,代理软件已开启「允许局域网连接」。

访问 8080 端口被拒绝 检查环境变量 ENABLE_WEBSERVER 是否设为 true,以及端口映射是否已添加。

关键词配置后没有命中 检查 frequency_words.txt 格式,词组之间必须用空行分隔,正则表达式语法是否正确。

想立刻触发一次推送测试 在飞牛OS重启容器,IMMEDIATE_RUN=true 会在启动时立即执行一次。


项目地址:https://github.com/sansan0/TrendRadar