2025-10-17 16:09:17 +08:00

102 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 排名系统Rankings说明大纲
## 1. 项目概览
- 提供抖音收藏合集真实播放量数据采集与API服务
- 抓取脚本写入 MongoDBAPI 按播放量与增长榜返回数据
## 2. 目录速览(关键)
- `handlers/Rankings/rank_data_scraper.py` 数据抓取脚本Selenium+CDP
- `routers/rank_api_routes.py` 小程序 API 数据访问/逻辑模块(由 `app.py` 调用,不独立运行)
- `app.py` 主服务入口Flask应用注册所有 API 路由)
- `Timer_worker.py` 定时任务,每日自动运行抓取
### 项目结构(简版)
```
项目根/
├── app.py # 主服务入口5000
├── Timer_worker.py # 定时抓取任务
├── config.py # 全局配置
├── database.py # 数据库封装
├── routers/
│ └── rank_api_routes.py # 小程序API逻辑模块
├── handlers/
│ └── Rankings/
│ ├── rank_data_scraper.py # 抓取脚本Selenium+CDP
│ ├── config/
│ │ └── chrome_profile/
│ │ └── douyin_persistent/ # 持久化Chrome用户目录登录态
│ ├── data/ # 数据导出/缓存(可选)
│ ├── docs/ # 使用说明与文档
│ ├── drivers/ # 浏览器驱动等
│ └── logs/ # 运行日志
└── 项目启动说明.md
```
- 核心数据表:`Rankings/Rankings_list`
- 日志示例:`handlers/Rankings/logs/douyin_scraper.log`
## 3. 服务与端口
- 单一服务:`app.py`(默认端口 `5000`,包含小程序 API 路由)
## 4. 一键启动
- 启动主服务:
```bash
python app.py
```
- 启动定时任务(每日 9:35 自动抓取):
```bash
python Timer_worker.py
```
## 5. 使用步骤(首次登录与日常)
- 安装依赖:
```bash
pip install -r handlers/Rankings/docs/requirements.txt
```
- 第一次使用(登录抖音):
- 运行抓取脚本:`python handlers/Rankings/rank_data_scraper.py`
- 弹出 Chrome 后,完成抖音登录(扫码/账号均可)。
- 登录完成后,回到终端提示界面按回车继续抓取。
- 后续运行会复用已登录的浏览器配置,免重复登录。
- 日常流程:
- 抓取:`python handlers/Rankings/rank_data_scraper.py`
- 服务:`python app.py`(端口 `5000`
- 定时:`python Timer_worker.py`(每日 9:35 自动执行)
- 验证数据:
- MongoDB数据库 `Rankings`,集合 `Rankings_list`
- API 检查:
- `http://localhost:5000/api/health`
- `http://localhost:5000/api/videos?page=1&limit=20&sort_by=playcount`
- 增长榜:`http://localhost:5000/api/videos?sort_by=growth&page=1&limit=20`
## 6. 数据抓取流程(简版)
- 复用已登录的 Chrome 配置,滚动/刷新触发请求
- 通过 CDP 捕获响应,解析 `play_vv` 与 SSR 数据
- 按合集聚合视频,写入 MongoDB 指定集合
## 7. 数据库与集合
- 数据库:`Rankings`
- 集合:`Rankings_list`
- 连接:`mongodb://localhost:27017/`(可通过环境变量覆盖)
## 8. API 功能摘要
- 视频列表(分页、按播放量/时间排序,仅当日最新数据)
- 增长榜(按指定日期区间对比增长量,分页返回)
## 9. 配置项(环境变量)
- `MONGO_HOST` 默认 `localhost`
- `MONGO_PORT` 默认 `27017`
- `MONGO_DB` 默认 `Rankings`
- `MONGO_COLLECTION` 默认 `Rankings_list`
## 10. 快速排错
- MongoDB 连接失败:抓取脚本将仅保存本地文件日志
- Chrome 配置:`handlers/Rankings/config/chrome_profile/`
- 日志位置:`handlers/Rankings/logs/`
## 11. 你需要知道的
- 当前架构下没有独立的 `5001` 端口;`routers/rank_api_routes.py` 提供逻辑模块,由 `app.py` 注册路由并统一对外服务(`5000`)。
- 抓取脚本与 API 使用同一集合,数据结构一致
- 小程序 API 专注返回易用字段(封面、播放量、时间、链接)
- 可直接在现有数据上新增排序或过滤,保持接口向后兼容