# 排名系统（Rankings）说明大纲

## 1. 项目概览
- 提供抖音收藏合集真实播放量数据采集与API服务
- 抓取脚本写入 MongoDB；API 按播放量与增长榜返回数据

## 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 专注返回易用字段（封面、播放量、时间、链接）
- 可直接在现有数据上新增排序或过滤，保持接口向后兼容