947 lines
20 KiB
Markdown
947 lines
20 KiB
Markdown
# 抖音下载器 - 功能需求文档
|
||
|
||
## 1. 产品概述
|
||
|
||
### 1.1 产品定义
|
||
|
||
抖音批量下载器是一个基于Python的命令行工具,提供抖音平台内容的批量下载能力,支持视频、图集、音乐、直播等多种内容类型的无水印下载。
|
||
|
||
### 1.2 核心价值
|
||
|
||
- **无水印下载** - 去除抖音水印,获得原始高清内容
|
||
- **批量处理** - 支持用户主页、合集等批量下载
|
||
- **完整元数据** - 保存作品完整信息(标题、作者、发布时间等)
|
||
- **自动化管理** - 自动Cookie获取、智能重试、增量更新
|
||
- **灵活配置** - 支持多种配置方式和自定义选项
|
||
|
||
---
|
||
|
||
## 2. 核心功能列表
|
||
|
||
### 2.1 功能模块总览
|
||
|
||
```
|
||
抖音下载器功能架构
|
||
│
|
||
├── 📥 内容下载功能
|
||
│ ├── 单个视频下载
|
||
│ ├── 批量视频下载
|
||
│ ├── 图集下载
|
||
│ ├── 用户主页下载
|
||
│ ├── 合集下载
|
||
│ ├── 音乐集合下载
|
||
│ └── 直播下载
|
||
│
|
||
├── 🍪 认证管理功能
|
||
│ ├── 自动获取Cookie
|
||
│ ├── 手动配置Cookie
|
||
│ ├── Cookie验证
|
||
│ └── Cookie刷新
|
||
│
|
||
├── ⚙️ 下载控制功能
|
||
│ ├── 并发下载控制
|
||
│ ├── 智能重试机制
|
||
│ ├── 速率限制
|
||
│ ├── 增量下载
|
||
│ ├── 时间范围过滤
|
||
│ └── 数量限制
|
||
│
|
||
├── 💾 数据管理功能
|
||
│
|
||
└── 🔧 配置管理功能
|
||
```
|
||
|
||
### 2.2 功能优先级
|
||
|
||
| 优先级 | 功能模块 | 包含功能 |
|
||
|--------|---------|---------|
|
||
| **P0 核心** | 单个视频下载 | 单个视频无水印下载 |
|
||
| **P0 核心** | 批量下载 | 用户主页批量下载 |
|
||
| **P0 核心** | Cookie管理 | 自动/手动获取Cookie |
|
||
| **P1 重要** | 多类型下载 | 图集、合集、音乐下载 |
|
||
| **P1 重要** | 增量更新 | 只下载新增内容 |
|
||
| **P1 重要** | 元数据保存 | JSON格式完整信息 |
|
||
| **P2 优化** | 附加内容 | 封面、头像、音乐下载 |
|
||
| **P2 优化** | 下载控制 | 重试、速率限制、数量控制 |
|
||
| **P3 扩展** | 时间过滤 | 按时间范围筛选内容 |
|
||
| **P3 扩展** | 直播下载 | 实时直播流录制 |
|
||
|
||
---
|
||
|
||
## 3. 下载功能详细说明
|
||
|
||
### 3.1 单个视频下载
|
||
|
||
#### 功能描述
|
||
下载单个抖音视频,支持短链接和直链两种格式。
|
||
|
||
#### 支持链接
|
||
- 分享短链接:`https://v.douyin.com/xxxxx/`
|
||
- 网页直链:`https://www.douyin.com/video/1234567890123456789`
|
||
|
||
#### 下载内容
|
||
| 内容项 | 格式 | 是否必需 | 说明 |
|
||
|-------|------|---------|------|
|
||
| 视频文件 | MP4 | ✅ 必需 | 无水印视频 |
|
||
| 视频封面 | JPG | ⚪ 可选 | 作品封面图 |
|
||
| 背景音乐 | MP3 | ⚪ 可选 | 原声音频 |
|
||
| 作者头像 | JPG | ⚪ 可选 | 作者头像图片 |
|
||
| 元数据 | JSON | ⚪ 可选 | 完整作品信息 |
|
||
|
||
#### 配置示例
|
||
```yaml
|
||
link:
|
||
- https://v.douyin.com/xxxxx/
|
||
music: true # 是否下载音乐
|
||
cover: true # 是否下载封面
|
||
avatar: true # 是否下载头像
|
||
json: true # 是否保存元数据
|
||
```
|
||
|
||
#### 文件命名规则
|
||
```
|
||
[作品标题]_[作品ID].mp4
|
||
[作品标题]_[作品ID]_cover.jpg
|
||
[作品标题]_[作品ID]_music.mp3
|
||
[作品标题]_[作品ID]_data.json
|
||
```
|
||
|
||
---
|
||
|
||
### 3.2 批量视频下载
|
||
|
||
#### 功能描述
|
||
支持多个链接批量下载,可同时处理多个单独的视频链接。
|
||
|
||
#### 配置示例
|
||
```yaml
|
||
link:
|
||
- https://v.douyin.com/xxxxx1/
|
||
- https://v.douyin.com/xxxxx2/
|
||
- https://www.douyin.com/video/1234567890123456789
|
||
- https://www.douyin.com/video/9876543210987654321
|
||
thread: 5 # 并发下载数量
|
||
```
|
||
|
||
#### 批量处理特性
|
||
- 支持任意数量视频链接
|
||
- 并发下载提升效率
|
||
- 单个失败不影响其他
|
||
- 实时进度显示
|
||
- 统计下载成功/失败数量
|
||
|
||
---
|
||
|
||
### 3.3 图集下载
|
||
|
||
#### 功能描述
|
||
下载抖音图文作品(图集),支持多图作品的完整下载。
|
||
|
||
#### 支持链接
|
||
- `https://www.douyin.com/note/xxxxx`
|
||
|
||
#### 下载内容
|
||
| 内容项 | 说明 |
|
||
|-------|------|
|
||
| 所有图片 | JPG格式,无水印 |
|
||
| 背景音乐 | MP3格式 |
|
||
| 作者头像 | JPG格式 |
|
||
| 元数据 | JSON格式,包含图片列表 |
|
||
|
||
#### 文件组织结构
|
||
```
|
||
Downloaded/
|
||
└── [作者昵称]/
|
||
└── [作品标题]_[作品ID]/
|
||
├── [作品标题]_1.jpg
|
||
├── [作品标题]_2.jpg
|
||
├── [作品标题]_3.jpg
|
||
├── [作品标题]_music.mp3
|
||
├── avatar.jpg
|
||
└── data.json
|
||
```
|
||
|
||
---
|
||
|
||
### 3.4 用户主页下载
|
||
|
||
#### 功能描述
|
||
批量下载指定用户主页的所有作品,支持多种下载模式。
|
||
|
||
#### 支持链接
|
||
- `https://www.douyin.com/user/MS4wLjABAAAA...`
|
||
|
||
#### 下载模式
|
||
|
||
##### 模式1:发布的作品 (post)
|
||
下载用户发布的所有作品(包括视频和图集)
|
||
|
||
```yaml
|
||
link:
|
||
- https://www.douyin.com/user/xxxxx
|
||
mode:
|
||
- post
|
||
number:
|
||
post: 0 # 0表示全部,>0表示最新N个
|
||
increase:
|
||
post: false # 是否增量下载
|
||
```
|
||
|
||
##### 模式2:喜欢的作品 (like)
|
||
下载用户喜欢/收藏的作品(需要Cookie权限)
|
||
|
||
```yaml
|
||
mode:
|
||
- like
|
||
number:
|
||
like: 50 # 下载最近喜欢的50个作品
|
||
increase:
|
||
like: true # 启用增量更新
|
||
```
|
||
|
||
##### 模式3:所有合集 (mix)
|
||
下载用户创建的所有合集
|
||
|
||
```yaml
|
||
mode:
|
||
- mix
|
||
number:
|
||
allmix: 0 # 合集数量,0表示全部
|
||
mix: 0 # 每个合集内作品数量
|
||
increase:
|
||
allmix: false
|
||
mix: false
|
||
```
|
||
|
||
##### 混合模式
|
||
同时下载多种类型的内容
|
||
|
||
```yaml
|
||
mode:
|
||
- post # 发布的作品
|
||
- like # 喜欢的作品
|
||
- mix # 所有合集
|
||
```
|
||
|
||
#### 文件组织结构
|
||
```
|
||
Downloaded/
|
||
└── [作者昵称]_[用户ID]/
|
||
├── post/ # 发布的作品
|
||
│ ├── [作品1]/
|
||
│ ├── [作品2]/
|
||
│ └── ...
|
||
├── like/ # 喜欢的作品
|
||
│ ├── [作品1]/
|
||
│ └── ...
|
||
└── mix/ # 合集
|
||
├── [合集1名称]/
|
||
│ ├── [作品1]/
|
||
│ └── ...
|
||
└── [合集2名称]/
|
||
└── ...
|
||
```
|
||
|
||
---
|
||
|
||
### 3.5 合集下载
|
||
|
||
#### 功能描述
|
||
下载单个合集(专辑)内的所有作品。
|
||
|
||
#### 支持链接
|
||
- `https://www.douyin.com/collection/xxxxx`
|
||
|
||
#### 配置示例
|
||
```yaml
|
||
link:
|
||
- https://www.douyin.com/collection/7123456789012345678
|
||
number:
|
||
mix: 0 # 下载数量,0=全部
|
||
increase:
|
||
mix: false # 增量更新
|
||
```
|
||
|
||
#### 下载内容
|
||
- 合集内所有作品(视频/图集)
|
||
- 每个作品的完整信息
|
||
- 合集元数据(JSON)
|
||
|
||
---
|
||
|
||
### 3.6 音乐集合下载
|
||
|
||
#### 功能描述
|
||
下载使用特定背景音乐的所有作品。
|
||
|
||
#### 支持链接
|
||
- `https://www.douyin.com/music/xxxxx`
|
||
|
||
#### 配置示例
|
||
```yaml
|
||
link:
|
||
- https://www.douyin.com/music/7123456789012345678
|
||
number:
|
||
music: 20 # 下载前20个使用该音乐的作品
|
||
increase:
|
||
music: false
|
||
```
|
||
|
||
#### 应用场景
|
||
- 收集热门音乐相关作品
|
||
- 研究音乐使用趋势
|
||
- 素材收集
|
||
|
||
---
|
||
|
||
### 3.7 直播下载
|
||
|
||
#### 功能描述
|
||
录制正在进行的直播流(实验性功能)。
|
||
|
||
#### 支持链接
|
||
- `https://live.douyin.com/xxxxx`
|
||
|
||
#### 功能特性
|
||
- 实时直播流录制
|
||
- 自动检测直播状态
|
||
- 断线自动重连
|
||
- 分段保存直播文件
|
||
|
||
#### 注意事项
|
||
- 需要主播开播状态
|
||
- 录制质量取决于直播质量
|
||
- 文件大小较大,注意磁盘空间
|
||
|
||
---
|
||
|
||
## 4. Cookie管理功能
|
||
|
||
### 4.1 为什么需要Cookie
|
||
|
||
抖音API需要用户登录状态才能访问内容,Cookie包含登录凭证:
|
||
- 访问用户主页内容
|
||
- 下载喜欢的作品
|
||
- 获取完整视频信息
|
||
- 避免访问限制
|
||
|
||
### 4.2 自动获取Cookie(推荐)
|
||
|
||
#### 功能描述
|
||
使用Playwright自动化工具,打开浏览器自动获取Cookie。
|
||
|
||
#### 工具名称
|
||
`cookie_extractor.py`
|
||
|
||
#### 使用步骤
|
||
|
||
**步骤1:安装Playwright**
|
||
```bash
|
||
pip install playwright
|
||
playwright install chromium
|
||
```
|
||
|
||
**步骤2:运行工具**
|
||
```bash
|
||
python cookie_extractor.py
|
||
```
|
||
|
||
**步骤3:选择提取方式**
|
||
```
|
||
请选择Cookie提取方式:
|
||
1. 使用浏览器自动提取(推荐)
|
||
2. 从已有浏览器复制Cookie
|
||
请输入选项 (1-2): 1
|
||
```
|
||
|
||
**步骤4:完成登录**
|
||
- 工具自动打开浏览器
|
||
- 在浏览器中扫码/输入手机号登录
|
||
- 登录成功后工具自动提取Cookie
|
||
- Cookie自动保存到配置文件
|
||
|
||
#### 提取模式
|
||
|
||
| 模式 | 说明 | 适用场景 |
|
||
|-----|------|---------|
|
||
| 可视模式 | 显示浏览器窗口 | 首次使用、调试 |
|
||
| 无头模式 | 后台运行 | 自动化脚本 |
|
||
|
||
#### 配置方式
|
||
```yaml
|
||
# 方式1:配置文件指定自动获取
|
||
cookies: auto
|
||
|
||
# 方式2:配置选项指定
|
||
auto_cookie: true
|
||
```
|
||
|
||
---
|
||
|
||
### 4.3 手动获取Cookie
|
||
|
||
#### 功能描述
|
||
通过浏览器开发者工具手动复制Cookie。
|
||
|
||
#### 工具名称
|
||
`get_cookies_manual.py`
|
||
|
||
#### 使用步骤
|
||
|
||
**步骤1:运行工具**
|
||
```bash
|
||
python get_cookies_manual.py
|
||
```
|
||
|
||
**步骤2:选择功能**
|
||
```
|
||
Cookie管理工具
|
||
1. 获取新的Cookie
|
||
2. 查看当前Cookie
|
||
3. 备份Cookie
|
||
4. 恢复Cookie
|
||
5. 退出
|
||
请选择 (1-5): 1
|
||
```
|
||
|
||
**步骤3:获取Cookie**
|
||
|
||
1. 打开浏览器访问 https://www.douyin.com
|
||
2. 登录你的抖音账号
|
||
3. 按 `F12` 打开开发者工具
|
||
4. 切换到 `Network` 标签
|
||
5. 刷新页面(F5)
|
||
6. 点击任意请求
|
||
7. 在请求头中找到 `Cookie` 字段
|
||
8. 复制整个Cookie字符串
|
||
|
||
**步骤4:粘贴Cookie**
|
||
```
|
||
请粘贴Cookie内容:
|
||
[粘贴你复制的Cookie]
|
||
```
|
||
|
||
**步骤5:自动保存**
|
||
- 工具自动解析Cookie
|
||
- 验证Cookie有效性
|
||
- 保存到配置文件
|
||
|
||
#### 关键Cookie字段
|
||
|
||
| 字段名 | 必需性 | 说明 |
|
||
|-------|--------|------|
|
||
| msToken | ✅ 必需 | 主要认证令牌 |
|
||
| ttwid | ✅ 必需 | 设备标识 |
|
||
| odin_tt | ✅ 必需 | 用户标识 |
|
||
| passport_csrf_token | ⚪ 可选 | CSRF保护 |
|
||
| sid_guard | ⚪ 可选 | 会话保护 |
|
||
|
||
---
|
||
|
||
### 4.4 Cookie配置方式
|
||
|
||
#### 方式1:自动获取(最简单)
|
||
```yaml
|
||
cookies: auto
|
||
```
|
||
|
||
#### 方式2:整串Cookie
|
||
```yaml
|
||
cookies: "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;"
|
||
```
|
||
|
||
#### 方式3:键值对方式
|
||
```yaml
|
||
cookies:
|
||
msToken: YOUR_MS_TOKEN_HERE
|
||
ttwid: YOUR_TTWID_HERE
|
||
odin_tt: YOUR_ODIN_TT_HERE
|
||
passport_csrf_token: YOUR_CSRF_TOKEN_HERE
|
||
sid_guard: YOUR_SID_GUARD_HERE
|
||
```
|
||
|
||
#### 方式4:环境变量
|
||
```bash
|
||
export DOUYIN_COOKIE="msToken=xxx; ttwid=xxx; ..."
|
||
python downloader.py -u "链接"
|
||
```
|
||
|
||
---
|
||
|
||
### 4.5 Cookie管理功能
|
||
|
||
#### Cookie验证
|
||
自动验证Cookie是否有效:
|
||
- 检查必需字段
|
||
- 测试API访问
|
||
- 显示验证结果
|
||
|
||
#### Cookie刷新
|
||
定期刷新Cookie保持有效性:
|
||
- 检测Cookie即将过期
|
||
- 自动重新获取
|
||
- 无缝更新配置
|
||
|
||
#### Cookie备份与恢复
|
||
```bash
|
||
# 备份
|
||
python get_cookies_manual.py
|
||
选择: 3. 备份Cookie
|
||
|
||
# 恢复
|
||
python get_cookies_manual.py
|
||
选择: 4. 恢复Cookie
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 下载控制功能
|
||
|
||
### 5.1 并发下载控制
|
||
|
||
#### 功能描述
|
||
控制同时下载的文件数量,提升下载效率。
|
||
|
||
#### 配置参数
|
||
```yaml
|
||
thread: 5 # 并发数量:1-20
|
||
```
|
||
|
||
#### 并发策略
|
||
- **低并发 (1-3)**:网络不稳定时使用
|
||
- **中并发 (5-10)**:默认推荐配置
|
||
- **高并发 (10-20)**:网络条件好时使用
|
||
|
||
#### 性能影响
|
||
| 并发数 | 速度 | CPU占用 | 网络占用 | 适用场景 |
|
||
|--------|------|---------|----------|---------|
|
||
| 1-3 | 慢 | 低 | 低 | 网络不稳定 |
|
||
| 5-10 | 快 | 中 | 中 | 日常使用 |
|
||
| 10-20 | 很快 | 高 | 高 | 批量下载 |
|
||
|
||
---
|
||
|
||
### 5.2 智能重试机制
|
||
|
||
#### 功能描述
|
||
下载失败时自动重试,提高下载成功率。
|
||
|
||
#### 配置参数
|
||
```yaml
|
||
retry_times: 3 # 重试次数:1-10
|
||
```
|
||
|
||
#### 重试策略
|
||
```
|
||
第1次失败 → 等待1秒 → 重试
|
||
第2次失败 → 等待2秒 → 重试
|
||
第3次失败 → 等待5秒 → 重试
|
||
第4次失败 → 标记失败,记录日志
|
||
```
|
||
|
||
#### 重试场景
|
||
- 网络连接超时
|
||
- HTTP 5xx 服务器错误
|
||
- HTTP 429 请求过多
|
||
- 临时网络故障
|
||
- 数据传输中断
|
||
|
||
#### 不重试场景
|
||
- HTTP 404 内容不存在
|
||
- HTTP 403 权限不足
|
||
- Cookie失效
|
||
- 链接格式错误
|
||
|
||
---
|
||
|
||
### 5.3 速率限制
|
||
|
||
#### 功能描述
|
||
控制请求频率,避免触发反爬虫机制。
|
||
|
||
#### 限制策略
|
||
```python
|
||
max_per_second: 2 # 每秒最多2个请求
|
||
min_interval: 0.5 # 最小请求间隔500ms
|
||
```
|
||
|
||
#### 保护机制
|
||
- 自动控制请求速度
|
||
- 避免账号被封禁
|
||
- 避免IP被限制
|
||
- 符合平台使用规范
|
||
|
||
#### 适用场景
|
||
- 大量批量下载
|
||
- 长时间运行
|
||
- 多用户主页下载
|
||
- 合集批量下载
|
||
|
||
---
|
||
|
||
### 5.4 增量下载
|
||
|
||
#### 功能描述
|
||
只下载新增内容,避免重复下载已有文件。
|
||
|
||
#### 启用条件
|
||
```yaml
|
||
database: true # 必须启用数据库
|
||
increase:
|
||
post: true # 对应模式启用增量
|
||
like: true
|
||
mix: true
|
||
```
|
||
|
||
#### 工作原理
|
||
1. 数据库记录已下载作品ID
|
||
2. 获取内容列表时查询数据库
|
||
3. 跳过已下载的作品
|
||
4. 只下载新增作品
|
||
5. 下载完成后更新数据库
|
||
|
||
#### 数据库表结构
|
||
```sql
|
||
CREATE TABLE aweme (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
aweme_id TEXT UNIQUE NOT NULL,
|
||
desc TEXT,
|
||
create_time INTEGER,
|
||
download_time INTEGER,
|
||
author_id TEXT,
|
||
author_name TEXT
|
||
);
|
||
```
|
||
|
||
#### 应用场景
|
||
- **定期备份**:每天/每周备份新作品
|
||
- **持续监控**:跟踪用户更新
|
||
- **节省空间**:不重复下载
|
||
- **节省时间**:跳过已有内容
|
||
|
||
#### 示例使用
|
||
```yaml
|
||
# 首次下载:下载所有作品
|
||
link:
|
||
- https://www.douyin.com/user/xxxxx
|
||
mode:
|
||
- post
|
||
increase:
|
||
post: false
|
||
database: true
|
||
|
||
# 后续更新:只下载新作品
|
||
increase:
|
||
post: true # 改为true启用增量
|
||
```
|
||
|
||
---
|
||
|
||
### 5.5 时间范围过滤
|
||
|
||
#### 功能描述
|
||
根据发布时间筛选要下载的内容。
|
||
|
||
#### 配置参数
|
||
```yaml
|
||
start_time: "2024-01-01" # 开始时间
|
||
end_time: "2024-12-31" # 结束时间
|
||
```
|
||
|
||
#### 时间格式
|
||
- 标准格式:`YYYY-MM-DD`
|
||
- 例如:`2024-01-01`、`2024-12-31`
|
||
- 留空表示不限制
|
||
|
||
#### 过滤规则
|
||
| 配置 | 含义 |
|
||
|-----|------|
|
||
| start_time: "2024-01-01"<br>end_time: "" | 2024年1月1日之后的作品 |
|
||
| start_time: ""<br>end_time: "2024-12-31" | 2024年12月31日之前的作品 |
|
||
| start_time: "2024-01-01"<br>end_time: "2024-12-31" | 2024年全年的作品 |
|
||
| start_time: ""<br>end_time: "" | 不限制时间 |
|
||
|
||
#### 应用场景
|
||
- 下载特定时期的作品
|
||
- 限定活动期间的内容
|
||
- 只要最新的N天内容
|
||
- 排除旧内容
|
||
|
||
---
|
||
|
||
### 5.6 数量限制
|
||
|
||
#### 功能描述
|
||
限制各类内容的下载数量。
|
||
|
||
#### 配置参数
|
||
```yaml
|
||
number:
|
||
post: 50 # 用户发布的作品数量
|
||
like: 30 # 用户喜欢的作品数量
|
||
allmix: 5 # 下载的合集数量
|
||
mix: 20 # 单个合集内作品数量
|
||
music: 10 # 音乐集合作品数量
|
||
```
|
||
|
||
#### 数量规则
|
||
- `0` = 下载全部
|
||
- `> 0` = 下载指定数量(最新的N个)
|
||
|
||
#### 示例配置
|
||
|
||
**场景1:只要最新内容**
|
||
```yaml
|
||
number:
|
||
post: 10 # 只下载最新10个作品
|
||
```
|
||
|
||
**场景2:全部下载**
|
||
```yaml
|
||
number:
|
||
post: 0 # 下载所有作品
|
||
```
|
||
|
||
**场景3:混合配置**
|
||
```yaml
|
||
number:
|
||
post: 0 # 发布的全部下载
|
||
like: 50 # 喜欢的只要50个
|
||
allmix: 0 # 所有合集
|
||
mix: 10 # 但每个合集只要10个作品
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 数据管理功能
|
||
|
||
### 6.1 元数据保存
|
||
|
||
#### 功能描述
|
||
以JSON格式保存作品的完整信息。
|
||
|
||
#### 启用配置
|
||
```yaml
|
||
json: true # 启用元数据保存
|
||
```
|
||
|
||
#### 保存内容
|
||
|
||
**视频作品元数据**
|
||
```json
|
||
{
|
||
"aweme_id": "7123456789012345678",
|
||
"desc": "作品标题/描述",
|
||
"create_time": 1704038400,
|
||
"author": {
|
||
"uid": "MS4wLjABAAAA...",
|
||
"nickname": "作者昵称",
|
||
"avatar_url": "https://..."
|
||
},
|
||
"video": {
|
||
"play_url": "https://...",
|
||
"cover_url": "https://...",
|
||
"duration": 15,
|
||
"ratio": "720p"
|
||
},
|
||
"music": {
|
||
"title": "音乐名称",
|
||
"author": "音乐作者",
|
||
"play_url": "https://..."
|
||
},
|
||
"statistics": {
|
||
"digg_count": 1234,
|
||
"comment_count": 567,
|
||
"share_count": 89,
|
||
"play_count": 12345
|
||
}
|
||
}
|
||
```
|
||
|
||
**图集作品元数据**
|
||
```json
|
||
{
|
||
"aweme_id": "7123456789012345678",
|
||
"desc": "图集标题",
|
||
"images": [
|
||
{
|
||
"url": "https://...",
|
||
"width": 1080,
|
||
"height": 1440
|
||
},
|
||
...
|
||
],
|
||
"music": {...},
|
||
"statistics": {...}
|
||
}
|
||
```
|
||
|
||
#### 应用场景
|
||
- 数据分析和研究
|
||
- 内容管理和检索
|
||
- 批量处理和编辑
|
||
- 信息备份和归档
|
||
|
||
---
|
||
|
||
### 6.2 数据库记录
|
||
|
||
#### 功能描述
|
||
使用SQLite数据库记录下载历史和作品信息。
|
||
|
||
#### 启用配置
|
||
```yaml
|
||
database: true # 启用数据库
|
||
```
|
||
|
||
#### 数据库文件
|
||
- 文件名:`data.db`
|
||
- 格式:SQLite 3
|
||
- 位置:项目根目录
|
||
|
||
#### 表结构
|
||
|
||
**aweme表(作品记录)**
|
||
| 字段 | 类型 | 说明 |
|
||
|-----|------|------|
|
||
| id | INTEGER | 主键,自增 |
|
||
| aweme_id | TEXT | 作品唯一ID(唯一索引) |
|
||
| desc | TEXT | 作品描述 |
|
||
| create_time | INTEGER | 发布时间戳 |
|
||
| download_time | INTEGER | 下载时间戳 |
|
||
| author_id | TEXT | 作者ID |
|
||
| author_name | TEXT | 作者昵称 |
|
||
| aweme_type | TEXT | 作品类型(video/image) |
|
||
| file_path | TEXT | 文件保存路径 |
|
||
|
||
#### 功能特性
|
||
- 自动记录下载历史
|
||
- 支持增量下载判断
|
||
- 防止重复下载
|
||
- 下载统计和查询
|
||
- 数据持久化保存
|
||
|
||
#### 数据库操作
|
||
|
||
**查询下载历史**
|
||
```sql
|
||
SELECT * FROM aweme ORDER BY download_time DESC LIMIT 10;
|
||
```
|
||
|
||
**统计下载数量**
|
||
```sql
|
||
SELECT COUNT(*) FROM aweme;
|
||
```
|
||
|
||
**按作者统计**
|
||
```sql
|
||
SELECT author_name, COUNT(*) as count
|
||
FROM aweme
|
||
GROUP BY author_id
|
||
ORDER BY count DESC;
|
||
```
|
||
|
||
---
|
||
|
||
### 6.3 文件组织管理
|
||
|
||
#### 功能描述
|
||
自动组织下载的文件,建立清晰的目录结构。
|
||
|
||
#### 启用配置
|
||
```yaml
|
||
folderstyle: true # 启用文件夹组织
|
||
```
|
||
|
||
#### 组织结构
|
||
|
||
**标准组织方式**
|
||
```
|
||
Downloaded/
|
||
├── [作者昵称1]_[用户ID]/
|
||
│ ├── post/ # 发布的作品
|
||
│ │ ├── [作品标题1]_[ID]/
|
||
│ │ │ ├── [作品标题1].mp4
|
||
│ │ │ ├── [作品标题1]_cover.jpg
|
||
│ │ │ ├── [作品标题1]_music.mp3
|
||
│ │ │ ├── avatar.jpg
|
||
│ │ │ └── data.json
|
||
│ │ └── [作品标题2]_[ID]/
|
||
│ │ └── ...
|
||
│ ├── like/ # 喜欢的作品
|
||
│ │ └── ...
|
||
│ └── mix/ # 合集
|
||
│ ├── [合集名称1]/
|
||
│ │ └── ...
|
||
│ └── [合集名称2]/
|
||
│ └── ...
|
||
└── [作者昵称2]_[用户ID]/
|
||
└── ...
|
||
```
|
||
|
||
**简化组织方式**
|
||
```yaml
|
||
folderstyle: false # 禁用文件夹组织
|
||
```
|
||
|
||
```
|
||
Downloaded/
|
||
├── [作品标题1]_[ID].mp4
|
||
├── [作品标题1]_[ID]_cover.jpg
|
||
├── [作品标题2]_[ID].mp4
|
||
└── ...
|
||
```
|
||
|
||
#### 命名规则
|
||
|
||
**文件名安全处理**
|
||
- 移除特殊字符:`/ \ : * ? " < > |`
|
||
- 替换为下划线:`_`
|
||
- 限制长度:最多100字符
|
||
- 保留扩展名
|
||
|
||
**示例**
|
||
```
|
||
原标题:今天天气真好!#旅行 #vlog
|
||
文件名:今天天气真好_旅行_vlog_7123456789012345678.mp4
|
||
```
|
||
|
||
---
|
||
|
||
### 6.4 下载统计
|
||
|
||
#### 功能描述
|
||
实时显示下载进度和统计信息。
|
||
|
||
#### 统计信息
|
||
|
||
**下载过程中显示**
|
||
```
|
||
正在下载: [作品标题]
|
||
进度: [████████--] 80% (8/10)
|
||
成功: 7 | 失败: 1 | 跳过: 0
|
||
速度: 2.5 MB/s
|
||
剩余时间: 00:02:15
|
||
```
|
||
|
||
**下载完成后显示**
|
||
```
|
||
========================================
|
||
下载完成统计
|
||
========================================
|
||
总计: 100
|
||
成功: 95
|
||
失败: 3
|
||
跳过: 2
|
||
成功率: 95.0%
|
||
耗时: 00:15:32
|
||
========================================
|
||
```
|
||
|
||
#### 实时进度条
|
||
使用Rich库显示美观的进度条:
|
||
- 实时更新进度百分比
|
||
- 显示当前下载速度
|
||
- 预估剩余时间
|
||
- 彩色状态标识
|