TrendSentinel 是一个面向运营场景的短视频公开账号内容监控与预警平台。系统支持通过关键词发现对口账号,自动提取并去重 sec_user_id,建立监控账号,创建异步采集任务,采集账号资料、主页作品和互动指标,并在发现新作品或指标变化时生成预警记录。
当前版本:v4.3.1-discovery-progress
默认地址:http://localhost:8000
API 文档:http://localhost:8000/docs
RabbitMQ 管理台:http://localhost:15672
项目功能展示视频位于:
video/video.mp4
- 关键词发现账号:输入搜索关键词和目标账号数量,系统按搜索结果顺序提取前 N 个不同账号,并按
sec_user_id去重。 - 自动建立监控账号:发现账号后自动写入账号库,重复账号不会反复创建。
- 异步采集任务:通过 RabbitMQ 将账号采集、数据处理和预警评估解耦,支持任务状态、进度、结果和失败原因记录。
- 公开账号主页采集:基于本地浏览器 cURL 模板采集公开账号资料和主页作品列表。
- 互动指标入库:保存作品标题、封面、发布时间、分享链接、点赞数、评论数指标、分享数等字段。
- 新作品预警:发现新作品后自动生成预警,支持查看、关闭、批量关闭和删除。
- 账号与任务 CRUD:前端提供账号新增、编辑、启用/停用、删除,以及任务创建、取消、删除和详情查看。
- 低频采集策略:支持请求间隔、采集页数、评论采集开关、账号同步间隔等配置。
- 双采集通道保留:公开 Web Collector 是当前主流程;抖音 OAuth/OpenAPI 通道保留用于自有授权账号。
- 学习友好前端:Vue 3 页面按工作台、关键词发现、账号管理、采集任务、内容中心、预警中心、预警规则和系统状态拆分。
| 页面 | 功能 |
|---|---|
| 工作台 | 展示监控账号、本地作品、累计互动、未处理预警、账号同步状态、采集策略、服务健康和最近任务 |
| 关键词发现 | 输入关键词和目标账号数,自动发现去重账号,并批量创建采集任务 |
| 账号管理 | 添加公开监控账号、修改备注名、设置同步间隔、启用/停用、删除、手动全量/增量同步 |
| 采集任务 | 新建采集任务、查看任务进度、查看任务详情、取消任务、删除任务记录 |
| 内容中心 | 查看本地入库作品、按账号筛选、查看标题/封面/互动指标、打开作品、删除本地作品记录 |
| 预警中心 | 查看新作品和规则命中预警,支持按状态筛选、关闭、批量关闭和删除 |
| 预警规则 | 新增、编辑、启用/停用和删除预警规则 |
| 系统状态 | 查看 API、MySQL、Redis、RabbitMQ 健康状态、版本信息、采集配置和架构说明 |
flowchart LR
U[运营用户] --> WEB[Vue 3 管理后台]
WEB --> API[FastAPI]
API --> DB[(MySQL)]
API --> CACHE[(Redis)]
API --> MQ[(RabbitMQ)]
MQ --> WC[Python Web Collector]
MQ --> OC[Node OpenAPI Collector]
MQ --> PW[Pipeline Worker]
MQ --> SCH[Scheduler]
WC --> SIGN[reverse.js / signer_cli.js]
WC --> TPL[web-templates cURL 模板]
WC --> DOUYIN[公开 Web 接口]
OC --> OPENAPI[抖音 OpenAPI]
WC --> MQ
OC --> MQ
MQ --> PW
PW --> DB
PW --> ALERT[预警评估]
ALERT --> DB
ALERT --> NOTICE[飞书 / 邮件 可选]
DB --> API
CACHE --> API
API --> WEB
flowchart TD
A[输入关键词和目标账号数] --> B[读取 request_search.txt 搜索模板]
B --> C[按页请求搜索结果]
C --> D[解析用户信息]
D --> E[提取 sec_user_id / 昵称 / 粉丝数 / 作品数]
E --> F{是否重复账号?}
F -- 是 --> G[记录 duplicate_count]
F -- 否 --> H[写入 discovery_items]
H --> I{达到目标账号数?}
I -- 否 --> C
I -- 是 --> J[自动创建监控账号]
J --> K[为每个账号创建 FULL_SYNC 任务]
K --> L[RabbitMQ 顺序执行作品采集]
L --> M[作品入库并触发新作品预警]
flowchart TD
A[前端创建 FULL_SYNC / INCREMENTAL_SYNC] --> B[FastAPI 写入 crawl_tasks]
B --> C[发布 RabbitMQ 消息]
C --> D[Web Collector 接收任务]
D --> E[请求账号资料 profile/other]
E --> F[请求主页作品 aweme/post]
F --> G[投递 data.process]
G --> H[Pipeline Worker 清洗与 Upsert]
H --> I[写入账号、作品、指标快照]
I --> J[任务状态更新]
J --> K[触发 alert.evaluate]
K --> L[生成新作品或规则预警]
| 层级 | 技术 |
|---|---|
| 后端接口 | Python 3.12、FastAPI、Pydantic、Uvicorn |
| ORM 与数据库 | SQLAlchemy 2.0、PyMySQL、MySQL 8.0 |
| 异步任务 | RabbitMQ、Pika、Direct Exchange、持久化队列 |
| 缓存与状态 | Redis 7 |
| Web 公开采集 | Python Web Collector、Chrome cURL 模板、动态 a_bogus 签名 |
| 签名辅助 | Node.js、reverse.js、signer_cli.js |
| 官方通道 | Node.js Collector、Douyin OAuth/OpenAPI(可选) |
| 前端 | Vue 3、Vue Router、Vite、原生 CSS |
| 部署 | Docker Compose、MySQL / Redis / RabbitMQ 数据卷 |
| 测试数据 | tests/fixtures 保存脱敏后的 OpenAPI 响应结构样例 |
核心表包括:
| 表 | 说明 |
|---|---|
accounts |
监控账号,保存平台、昵称、open_id、粉丝数、平台作品数、同步间隔和状态 |
account_authorizations |
OAuth 授权信息,用于官方 OpenAPI 通道 |
crawl_tasks |
采集任务,保存任务类型、阶段、进度、结果、错误码和耗时 |
videos |
本地作品库,保存作品 ID、标题、封面、分享链接、发布时间和互动指标 |
comments |
评论内容表,当前默认关闭,作为备选能力保留 |
account_metric_snapshots |
账号指标快照 |
video_metric_snapshots |
作品指标快照 |
discovery_runs |
关键词发现批次,保存关键词、目标数、状态、页数、去重数量和任务数量 |
discovery_items |
单次发现结果,保存去重后的 sec_user_id、昵称、账号创建状态和任务创建状态 |
alert_rules |
预警规则配置 |
alerts |
预警记录,保存新作品、任务失败或规则命中的处理状态 |
notification_logs |
飞书或邮件通知发送记录 |
- Windows 10/11 + Docker Desktop;
- Docker Compose Plugin;
- 可用网络环境,首次构建需要拉取
python:3.12-slim-bookworm、node:22-bookworm-slim、mysql:8.0、redis:7-alpine、rabbitmq:3-management-alpine; - 已准备好的 Douyin PC Web cURL 模板。关键词发现至少需要
request_search.txt,作品采集至少需要request_profile.txt和request_posts.txt。
常用低频演示配置:
DOUYIN_WEB_ENABLED=true
DOUYIN_WEB_MAX_PAGES=1
DOUYIN_WEB_POSTS_PAGE_SIZE=18
DOUYIN_WEB_SYNC_COMMENTS=false
DOUYIN_WEB_COMMENT_MAX_PAGES=1
DOUYIN_WEB_COMMENTS_PAGE_SIZE=10
DOUYIN_WEB_REQUEST_INTERVAL_SECONDS=60
DEFAULT_SYNC_INTERVAL_MINUTES=360
SCHEDULER_SCAN_SECONDS=60web-templates/ 中的模板来自 Chrome DevTools 的 Copy as cURL (cmd)。
必需模板:
| 文件 | 用途 |
|---|---|
request_search.txt |
关键词搜索接口 /aweme/v1/web/general/search/single/ |
request_profile.txt |
账号资料接口 /aweme/v1/web/user/profile/other/ |
request_posts.txt |
主页作品接口 /aweme/v1/web/aweme/post/ |
可选模板:
| 文件 | 用途 |
|---|---|
request_comments.txt |
一级评论接口 /aweme/v1/web/comment/list/ |
request_posts_page2.txt |
主页作品第二页,用于排查分页参数 |
screen_info.txt |
浏览器屏幕指纹辅助信息 |
Windows:
cd /d D:\projects\TrendSentinel
start.cmd跨平台 Docker Compose:
docker compose up -d --build首次启动会完成:
- 创建 MySQL、Redis 和 RabbitMQ;
- 执行
migrate.py创建业务表; - 构建 Vue 前端并由 FastAPI 托管;
- 启动 API、Pipeline Worker、Scheduler、Web Collector 和 OpenAPI Collector。
powershell -NoProfile -Command "Invoke-RestMethod 'http://localhost:8000/health'"健康状态为 ok 时,打开:
http://localhost:8000/
FastAPI 文档:
http://localhost:8000/docs
RabbitMQ 管理台:
http://localhost:15672
进入前端:
关键词发现
填写:
搜索关键词:影视解说 / 短剧解说 / 武则天 / 好剧推荐
目标账号数:30
搜索页数上限:8
每页搜索数量:10
搜索请求间隔:3 秒
账号同步间隔:720 分钟
任务类型:FULL_SYNC
发现后立即创建采集任务:开启
执行后,系统会:
- 从搜索结果中提取账号;
- 按
sec_user_id去重; - 展示发现批次和去重账号列表;
- 自动创建监控账号;
- 自动为每个账号创建作品采集任务;
- 后续作品采集进入 RabbitMQ 队列逐个执行。
发现账号的进度在“关键词发现”页面查看;作品采集进度在“采集任务”页面查看。
常用命令:
cd /d D:\projects\TrendSentinel
start.cmd 构建并启动完整系统
docker compose ps 查看容器状态
docker compose logs -f --tail=200 api 查看 API 日志
docker compose logs -f --tail=200 web-collector pipeline-worker
docker compose run --rm migrate 执行数据库迁移
docker compose stop scheduler web-collector 停止自动调度和采集器
docker compose up -d web-collector 重新开启 Web Collector
docker compose down 停止并保留数据卷TrendSentinel/
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI 入口,挂载前端静态资源
│ │ ├── config.py # Pydantic 配置与环境变量
│ │ ├── db.py # SQLAlchemy Base、Session 和健康检查
│ │ ├── models.py # 账号、任务、作品、发现批次、预警等数据模型
│ │ ├── schemas.py # Pydantic 响应模型
│ │ ├── mq.py # RabbitMQ 交换机、队列和发布逻辑
│ │ ├── services.py # 任务创建、任务完成、默认规则和预警逻辑
│ │ ├── douyin_oauth.py # OAuth/OpenAPI 授权能力
│ │ └── routers/
│ │ ├── accounts.py # 账号管理接口
│ │ ├── discovery.py # 关键词发现和自动建档接口
│ │ ├── tasks.py # 采集任务接口
│ │ ├── content.py # 作品和评论查询接口
│ │ ├── alerts.py # 预警和预警规则接口
│ │ ├── dashboard.py # 工作台统计接口
│ │ ├── system.py # 系统状态、版本和采集配置接口
│ │ └── oauth.py # 抖音 OAuth 授权入口
│ ├── web_signer/
│ │ ├── reverse.js # a_bogus 生成逻辑
│ │ └── signer_cli.js # 签名命令行入口
│ ├── migrate.py # 建表和默认规则初始化
│ ├── web_collector.py # PC Web 公开账号采集器
│ ├── worker.py # 数据清洗、入库和预警处理 Worker
│ └── scheduler.py # 定时扫描账号并创建增量任务
├── collector-node/
│ └── src/ # Node.js OpenAPI Collector 和诊断工具
├── frontend/
│ └── src/
│ ├── pages/ # 工作台、关键词发现、账号、任务、内容、预警、规则、系统页面
│ ├── services/api.js # 前端 API 封装
│ ├── router.js # Vue Router
│ └── styles.css # 简洁后台样式
├── web-templates/ # 本地 cURL 请求模板,禁止公开提交真实 Cookie
├── docs/ # 架构说明、OpenAPI 配置、验证记录和简历口径
├── tests/fixtures/ # 脱敏响应样例
├── video/ # 项目演示视频
├── docker-compose.yml # 唯一部署架构
├── start.cmd # Windows 一键启动脚本
├── VERSION
└── README.md
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health |
Docker 健康检查 |
| GET | /api/system/version |
应用名称与版本 |
| GET | /api/system/health |
API、MySQL、Redis、RabbitMQ 健康状态 |
| GET | /api/system/collection-config |
当前采集配置 |
| GET | /api/dashboard/summary |
工作台统计数据 |
| POST | /api/discovery/run |
创建关键词发现批次,并可自动创建采集任务 |
| GET | /api/discovery/latest |
获取最近一次关键词发现结果 |
| GET | /api/discovery/runs/{run_id} |
获取指定发现批次 |
| GET | /api/accounts |
查询监控账号 |
| POST | /api/accounts/web |
添加公开 Web 监控账号 |
| PATCH | /api/accounts/{account_id} |
修改账号备注、同步间隔和状态 |
| DELETE | /api/accounts/{account_id} |
删除账号 |
| GET | /api/tasks |
查询采集任务 |
| POST | /api/tasks |
创建采集任务 |
| POST | /api/tasks/{task_id}/cancel |
取消任务 |
| DELETE | /api/tasks/{task_id} |
删除任务记录 |
| GET | /api/content/videos |
查询本地作品 |
| DELETE | /api/content/videos/{video_id} |
删除本地作品记录 |
| GET | /api/alerts |
查询预警 |
| POST | /api/alerts/{alert_id}/close |
关闭单条预警 |
| POST | /api/alerts/close-all |
批量关闭预警 |
| DELETE | /api/alerts/{alert_id} |
删除预警 |
| GET | /api/rules |
查询预警规则 |
| POST | /api/rules |
新增预警规则 |
| PATCH | /api/rules/{rule_id} |
修改预警规则 |
| DELETE | /api/rules/{rule_id} |
删除预警规则 |
自动接口文档:
http://localhost:8000/docs
| 版本 | 定位 | 主要变化 | 状态 |
|---|---|---|---|
| v4.0 | 基础监控平台 | 建立账号、任务、作品、评论、预警和系统状态的基础后台 | 已合并 |
| v4.1 WebCollector | 公开 Web 采集 | 合入 PC Web Collector,支持 cURL 模板、a_bogus、主页作品和评论采集 |
已合并 |
| v4.2 UI CRUD | 后台工程化 | 重构前端页面,补齐账号、任务、内容、预警、规则等 CRUD 能力 | 已合并 |
| v4.3 Keyword Discovery | 关键词发现 | 新增关键词发现页面,支持搜索前 N 个不同账号、去重建档和自动创建采集任务 | 已合并 |
| v4.3.1 Discovery Progress | 当前版本 | 将发现批次和发现结果持久化,切换页面后仍可查看发现进度和去重账号列表 | 当前版本 |