mirror of
https://github.com/jiji262/douyin-downloader.git
synced 2026-06-05 21:07:05 +08:00
4.7 KiB
4.7 KiB
项目实现总结(dy-downloader)
1. 项目概览
- 项目名称: Douyin Downloader (
dy-downloader) - 版本:
2.0.0 - 更新时间:
2026-02-18 - 当前状态: ✅ 核心功能可用,自动化测试通过
2. 当前实现能力(按代码现状)
2.1 已支持
- 单个视频下载(
/video/{aweme_id}) - 单个图文下载(
/note/{note_id}) - 抖音短链下载(
https://v.douyin.com/...,会先解析后下载) - 用户主页发布作品批量下载(
/user/{sec_uid}+mode: [post]) - 无水印优先下载,支持封面/音乐/头像/原始 JSON
- 并发下载、重试、速率限制
- 基于作品发布时间(
create_time)生成文件名/目录日期前缀(YYYY-MM-DD_...) - 生成独立下载清单文件
download_manifest.jsonl - 时间过滤(
start_time/end_time) - 数量限制(当前对
number.post生效) - SQLite 去重与增量下载(当前对
increase.post生效) - 翻页受限时的浏览器兜底(采集
aweme_id并补全详情)
2.2 已新增(本次实现)
- 用户点赞下载(
mode: [like]) - 用户合集下载(
mode: [mix])与单合集链接(/collection/{mix_id}、/mix/{mix_id}) - 用户音乐模式下载(
mode: [music])与单音乐链接(/music/{music_id}) number.like/number.mix/number.music与increase.like/increase.mix/increase.music生效number.allmix/increase.allmix兼容保留,并在加载时归一化到mix
3. 架构与模块
dy-downloader/
├── cli/ # CLI 入口与展示
├── core/ # 下载主流程、URL解析、API客户端
├── storage/ # 文件、元数据、数据库
├── auth/ # Cookie / token 管理
├── control/ # 限速、重试、并发队列
├── config/ # 配置加载与默认配置
└── utils/ # 日志与通用工具
4. 下载数据落盘策略
4.1 文件系统(主数据)
默认目录结构(folderstyle: true):
Downloaded/
├── download_manifest.jsonl
└── 作者名/
└── post/
└── 2024-02-07_作品标题_aweme_id/
├── 2024-02-07_作品标题_aweme_id.mp4
├── 2024-02-07_作品标题_aweme_id_cover.jpg
├── 2024-02-07_作品标题_aweme_id_music.mp3
├── 2024-02-07_作品标题_aweme_id_avatar.jpg
└── 2024-02-07_作品标题_aweme_id_data.json
命名日期优先使用作品发布时间 create_time;若缺失或非法,会回退到当前日期并记录告警。
4.2 独立下载清单(新增)
- 文件:
{path}/download_manifest.jsonl - 形式:每行一条 JSON(append-only)
- 典型字段:
date(作品发布日期)aweme_idauthor_namedescmedia_typetags(来自text_extra、cha_list、desc中#)file_namesfile_pathspublish_timestamp(若可解析)recorded_at(写入时间)
4.3 SQLite 数据库(可开关)
- 默认开关:
database: true - 默认库文件:
dy_downloader.db - 表结构:
aweme:作品明细、作者、发布时间、下载时间、保存路径、原始 metadatadownload_history:每次任务 URL、类型、总数、成功数、配置快照
当
database: false时,不写 SQLite,但仍会写媒体文件和download_manifest.jsonl。
5. 关键流程(简版)
- 读取配置(命令行 > 环境变量 > 配置文件 > 默认配置)
- 初始化 Cookie 与 API 客户端
- 解析链接类型(视频 / 图文 / 用户)
- 拉取作品数据并应用时间/数量/增量规则
- 并发下载媒体文件
- 写入可选 JSON 元数据
- 追加写入
download_manifest.jsonl - 若开启数据库,写入
aweme与download_history
6. 近期更新(2026-02-18)
- ✅ 文件名和目录日期从“下载时间”改为“作品发布时间(
create_time)” - ✅ 新增独立下载清单
download_manifest.jsonl - ✅ 清单中补充
date/file_names/tags等可追溯字段 - ✅ 增加对应测试,确保发布时间命名与清单写入行为
7. 测试与验证
执行命令:
PYTHONPATH=. pytest -q
结果:
71 passed
说明:当前有 pytest-asyncio 的 deprecation warning(事件循环 scope 配置),不影响功能正确性。
8. 后续建议
- 为
like/mix/music增加浏览器兜底,降低 API 分页受限影响。 - 为
download_manifest.jsonl增加轮转或归档策略(长期运行场景)。 - 补充数据库查询 CLI(例如按作者/日期/标签检索)。