From 54e50598def091c0270db125b648a223ee01fa17 Mon Sep 17 00:00:00 2001 From: imgyh <1974355683@qq.com> Date: Sun, 21 May 2023 16:23:55 +0800 Subject: [PATCH] =?UTF-8?q?docs(readme):=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit re #36 --- README.md | 220 ++++++------------ config.yml | 19 ++ ...{tiktokcommand1.jpg => DouYinCommand1.jpg} | Bin ...{tiktokcommand2.jpg => DouYinCommand2.jpg} | Bin ...download.jpg => DouYinCommanddownload.jpg} | Bin ...il.jpg => DouYinCommanddownloaddetail.jpg} | Bin ...kcommandlive.jpg => DouYinCommandlive.jpg} | Bin img/{tiktokweb.jpg => WebApi.jpg} | Bin img/{tiktokwebimage.jpg => WebApiimage.jpg} | Bin ...reviewimage.jpg => WebApipreviewimage.jpg} | Bin ...reviewvideo.jpg => WebApipreviewvideo.jpg} | Bin img/{tiktokwebvideo.jpg => WebApivideo.jpg} | Bin img/alipay.jpg | Bin 0 -> 33490 bytes img/wechat.jpg | Bin 0 -> 29704 bytes 14 files changed, 84 insertions(+), 155 deletions(-) rename img/{tiktokcommand1.jpg => DouYinCommand1.jpg} (100%) rename img/{tiktokcommand2.jpg => DouYinCommand2.jpg} (100%) rename img/{tiktokcommanddownload.jpg => DouYinCommanddownload.jpg} (100%) rename img/{tiktokcommanddownloaddetail.jpg => DouYinCommanddownloaddetail.jpg} (100%) rename img/{tiktokcommandlive.jpg => DouYinCommandlive.jpg} (100%) rename img/{tiktokweb.jpg => WebApi.jpg} (100%) rename img/{tiktokwebimage.jpg => WebApiimage.jpg} (100%) rename img/{tiktokwebpreviewimage.jpg => WebApipreviewimage.jpg} (100%) rename img/{tiktokwebpreviewvideo.jpg => WebApipreviewvideo.jpg} (100%) rename img/{tiktokwebvideo.jpg => WebApivideo.jpg} (100%) create mode 100644 img/alipay.jpg create mode 100644 img/wechat.jpg diff --git a/README.md b/README.md index 4f75500..b3ff7f0 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ 代码已经开源在我的GitHub上,欢迎大家star。 开源地址:https://github.com/imgyh/tiktok +博客文档:https://www.imgyh.com/archives/41.html 抖音去水印工具Web demo:https://dy.gyh.im/ @@ -15,6 +16,7 @@ > [TG](https://t.me/gyh9527) > [TG群组](https://t.me/GYHgroup) > [Email](mailto:admin@imgyh.com) +> [Blog](htts://www.imgyh.com) ## 抖音去水印工具 Feature @@ -24,11 +26,11 @@ * 基于Flask实现 Web 交互界面 * 提供相关接口,支持单个作品、直播、主页喜欢、主页作品、主页合集、合集、音乐(原声)通过接口获取 -![tiktokweb](img/tiktokweb.jpg) -![tiktokweb video](img/tiktokwebvideo.jpg) -![tiktokweb preview video](img/tiktokwebpreviewvideo.jpg) -![tiktokweb image](img/tiktokwebimage.jpg) -![tiktokweb preview image](img/tiktokwebpreviewimage.jpg) +![WebApi](img/WebApi.jpg) +![WebApi video](img/WebApivideo.jpg) +![WebApi preview video](img/WebApipreviewvideo.jpg) +![WebApi image](img/WebApiimage.jpg) +![WebApi preview image](img/WebApipreviewimage.jpg) ## 抖音批量下载工具 Feature @@ -42,11 +44,11 @@ * 支持多链接下载 * 增量更新与数据持久化到数据库, 保存每条作品信息到数据库, 并根据数据库是否存在来增量请求下载 -![](img/tiktokcommand1.jpg) -![](img/tiktokcommand2.jpg) -![tiktokcommandl ive](img/tiktokcommandlive.jpg) -![tiktokcommand download](img/tiktokcommanddownload.jpg) -![tiktokcommand download detail](img/tiktokcommanddownloaddetail.jpg) +![DouYinCommand1](img/DouYinCommand1.jpg) +![DouYinCommand2](img/DouYinCommand2.jpg) +![DouYinCommandl ive](img/DouYinCommandlive.jpg) +![DouYinCommand download](img/DouYinCommanddownload.jpg) +![DouYinCommand download detail](img/DouYinCommanddownloaddetail.jpg) # 使用方法 @@ -64,11 +66,6 @@ 7. 直播 https://live.douyin.com/759547612580 ``` -## 安装node.js环境(可选) - -> 为了快速获取X-Bogus加密参数, 推荐在本地安装node.js环境, 这样可以通过本地执行获取X-Bogus加密参数的js文件 -> 当然如果没有安装node.js环境, 程序会从我服务器上部署的接口获取X-Bogus加密参数 - ## 抖音去水印工具 ### 使用方式 @@ -88,17 +85,17 @@ docker run -d -p 5000:5000 --name tiktok --restart=always imgyh/tiktokweb ``` cd /path/to/tiktok python -m pip install -r requirements.txt -python TikTokWeb.py +python WebApi.py ``` -4. windows用户也可以下载 Releases 中的 [TikTokWeb.exe](https://github.com/imgyh/tiktok/releases) 文件双击运行 +4. windows用户也可以下载 Releases 中的 [WebApi.exe](https://github.com/imgyh/tiktok/releases) 文件双击运行 5. 指定端口运行 ``` # 指定端口运行 -python TikTokWeb.py -p 5001 -.\TikTokWeb.exe -p 5001 +python WebApi.py -p 5001 +.\WebApi.exe -p 5001 ``` 访问: http://localhost:5000 @@ -112,7 +109,7 @@ python TikTokWeb.py -p 5001 ### 安装依赖 -windows用户下载 Releases 中的 [TikTokCommand.exe](https://github.com/imgyh/tiktok/releases) 文件运行 +windows用户下载 Releases 中的 [DouYinCommand.exe](https://github.com/imgyh/tiktok/releases) 文件运行 windows用户本地有`python3.9`环境, 也可按照linux与mac用户的方式运行 linux与mac用户下载本项目, 在本地`python3.9`环境中运行, 首先需要安装依赖, 安装命令 @@ -133,111 +130,16 @@ python -m pip install -r requirements.txt docker run -d -p 5000:5000 --name tiktok --restart=always -v /path/to/tiktok:/app -v /path/to/downloads:/path/to/downloads imgyh/tiktokweb ``` -将所有用到 `python TikTokCommand.py` 替换成 `docker exec -it tiktok python3 TikTokCommand.py` +将所有用到 `python DouYinCommand.py` 替换成 `docker exec -it tiktok python3 DouYinCommand.py` ### 配置文件方式 -配置文件名必须叫 `config.yml`, 并将其放在TikTokCommand.py或者TikTokCommand.exe同一个目录下 +配置文件名必须叫 `config.yml`, 并将其放在DouYinCommand.py或者DouYinCommand.exe同一个目录下 -直接运行TikTokCommand.py或者TikTokCommand.exe, 无需在命令中加入任何参数, 所有参数都从配置文件中读取 +直接运行DouYinCommand.py或者DouYinCommand.exe, 无需在命令中加入任何参数, 所有参数都从配置文件中读取 -基本配置示例如下, 请自己登录网页版抖音后F12获取cookie +基本配置示例[config.yml](./config.yml), 请自己登录网页版抖音后F12获取cookie -```yaml -####################################### -# 说明: -# 1. 井号(#)为注释 -# 2. 缩进严格对齐,使用空格缩进, 注意有些冒号后面有一个空格, 有些没有空格 -# 3. 请使用英文字符 -# 4. 更多yaml语法请上网查看 -####################################### - - -# 作品(视频或图集)、直播、合集、音乐集合、个人主页的分享链接或者电脑浏览器网址 -# (删除文案, 保证只有URL, https://v.douyin.com/kcvMpuN/ 或者 https://www.douyin.com/开头的) -# 可以设置多个链接, 确保至少一个链接 -# 必选 -link: - - https://live.douyin.com/759547612580 - - https://v.douyin.com/BugmVVD/ - - https://v.douyin.com/BugrFTN/ - - https://v.douyin.com/B38oovu/ - - https://v.douyin.com/S6YMNXs/ - -# 下载保存位置, 默认当前文件位置 -# 必选 -path: C:\project\test333 - -# 是否下载视频中的音乐(True/False), 默认为True -# 可选 -music: True - -# 是否下载视频的封面(True/False), 默认为True, 当下载视频时有效 -# 可选 -cover: True - -# 是否下载作者的头像(True/False), 默认为True -# 可选 -avatar: True - -# 是否保存获取到的数据(True/False), 默认为True -# 可选 -json: True - -# link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为post, 可以设置多种模式 -# 可选 -mode: - - post - - like - - mix - -# 下载作品个数设置 -# 可选 -number: - post: 5 # 主页下作品下载个数设置, 默认为0 全部下载 - like: 5 # 主页下喜欢下载个数设置, 默认为0 全部下载 - allmix: 1 # 主页下合集下载个数设置, 默认为0 全部下载 - mix: 5 # 单个合集下作品下载个数设置, 默认为0 全部下载 - music: 5 # 音乐(原声)下作品下载个数设置, 默认为0 全部下载 - -# 增量下载, 下载作品范围: 抖音最新作品到本地的最新作品之间的作品, 如果本地没有该链接的任何视频则全部下载 -# 可配合 number 选项一起使用 -# 情况1: number(假如设置5) 和 increase(假如抖音博主更新了3条作品,本地并未下载) 则会获取5条数据并下载(已下载就跳过) -# 情况2: number(假如设置5) 和 increase(假如抖音博主更新了6条作品,本地并未下载) 则会获取6条数据并下载(已下载就跳过) -# 情况3: number(假如设置5) 和 increase(假如本地并未下载该博主视频) 则会获取所有的视频 -# 情况4: 当获取主页所有mix时(mode是mix模式)比较特殊, number(allmix) 控制下载多少个合集, increase(allmix) 对每个合集进行增量更新 -# 可选 -increase: - post: False # 是否开启主页作品增量下载(True/False), 默认为False - like: False # 是否开启主页喜欢增量下载(True/False), 默认为False - allmix: False # 是否开启主页合集增量下载(True/False), 默认为False - mix: False # 是否开启单个合集下作品增量下载(True/False), 默认为False - music: False # 是否开启音乐(原声)下作品增量下载(True/False), 默认为False - -# 设置线程数, 默认5个线程 -# 可选 -thread: 5 - -# cookie 请登录网页抖音后F12查看 -# cookies 和 cookie 二选一, 要使用这种形式, 请注释下面的cookie -# 目前只需要msToken、ttwid、odin_tt、passport_csrf_token、sid_guard -# 可以动态添加, 程序会根据填的键查找,并没有写死, 如果抖音需要更多的cookie自己加上就行了 -cookies: - msToken: xxx - ttwid: xxx - odin_tt: xxx - passport_csrf_token: xxx - sid_guard: xxx - -# cookie 请登录网页抖音后F12查看 -# cookies 和 cookie 二选一, 要使用这种形式, 请注释上面的cookies及包含的所有键值对 -# 设置了这个后上面的cookies选项自动失效, 这个优先级更高 -# 格式: "name1=value1; name2=value2;" 注意要加冒号 -# 冒号中的内容包括不限于以下键值对, 如果抖音需要更多的cookie自己加上就行了 -#cookie: "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" - - -``` ### 命令行方式 @@ -247,15 +149,15 @@ cookies: ``` windows用户: -.\TikTokCommand.exe -h +.\DouYinCommand.exe -h linux与mac用户: -python TikTokCommand.py -h +python DouYinCommand.py -h ``` - 参数介绍 ``` --h, --help 展示帮助页 +-h, --help 展示帮助信息 --cmd CMD, -C CMD 使用命令行(True)或者配置文件(False), 默认为False --link LINK, -l LINK 作品(视频或图集)、直播、合集、音乐集合、个人主页的分享链接或者电脑浏览器网址, 可以设置多个链接 (删除文案, 保证只有URL, https://v.douyin.com/kcvMpuN/ 或者 https://www.douyin.com/开头的) @@ -264,12 +166,14 @@ python TikTokCommand.py -h --cover COVER, -c COVER 是否下载视频的封面(True/False), 默认为True, 当下载视频时有效 --avatar AVATAR, -a AVATAR 是否下载作者的头像(True/False), 默认为True --json JSON, -j JSON 是否保存获取到的数据(True/False), 默认为True ---mode MODE, -M MODE link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为post, 可以设置多种模式 +--folderstyle FOLDERSTYLE, -fs FOLDERSTYLE 文件保存风格, 默认为True +--mode MODE, -M MODE link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为post, 可以设置多种模式 --postnumber POSTNUMBER 主页下作品下载个数设置, 默认为0 全部下载 --likenumber LIKENUMBER 主页下喜欢下载个数设置, 默认为0 全部下载 --allmixnumber ALLMIXNUMBER 主页下合集下载个数设置, 默认为0 全部下载 --mixnumber MIXNUMBER 单个合集下作品下载个数设置, 默认为0 全部下载 --musicnumber MUSICNUMBER 音乐(原声)下作品下载个数设置, 默认为0 全部下载 +--database DATABASE, -d DATABASE 是否使用数据库, 默认为True 使用数据库; 如果不使用数据库, 增量更新不可用 --postincrease POSTINCREASE 是否开启主页作品增量下载(True/False), 默认为False --likeincrease LIKEINCREASE 是否开启主页喜欢增量下载(True/False), 默认为False --allmixincrease ALLMIXINCREASE 是否开启主页合集增量下载(True/False), 默认为False @@ -283,7 +187,7 @@ python TikTokCommand.py -h ``` windows用户: -.\TikTokCommand.exe -C True ` +.\DouYinCommand.exe -C True ` -l https://live.douyin.com/759547612580 ` -l https://v.douyin.com/BugmVVD/ ` -l https://v.douyin.com/BugrFTN/ ` @@ -304,7 +208,7 @@ windows用户: --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True \ +python DouYinCommand.py -C True \ -l https://live.douyin.com/759547612580 \ -l https://v.douyin.com/BugmVVD/ \ -l https://v.douyin.com/BugrFTN/ \ @@ -329,130 +233,130 @@ python TikTokCommand.py -C True \ ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvMpuN/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/kcvMpuN/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/kcvMpuN/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/kcvMpuN/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页全部作品 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页前n个作品 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test --postnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test --postnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir --postnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir --postnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页全部喜欢 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -M like --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -M like --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -M like --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -M like --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页前n个喜欢 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -M like --likenumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -M like --likenumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -M like --likenumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -M like --likenumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载单个合集全部作品 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/B3J63Le/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/B3J63Le/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/B3J63Le/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/B3J63Le/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载单个合集前n个作品 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/B3J63Le/ -p C:\project\test --mixnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/B3J63Le/ -p C:\project\test --mixnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/B3J63Le/ -p /path/to/downdir --mixnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/B3J63Le/ -p /path/to/downdir --mixnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页全部合集下所有作品 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/B38oovu/ -p C:\project\test -M mix --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/B38oovu/ -p C:\project\test -M mix --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/B38oovu/ -p /path/to/downdir -M mix --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/B38oovu/ -p /path/to/downdir -M mix --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页前n个合集下所有作品 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/B38oovu/ -p C:\project\test -M mix --allmixnumber 2 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/B38oovu/ -p C:\project\test -M mix --allmixnumber 2 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/B38oovu/ -p /path/to/downdir -M mix --allmixnumber 2 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/B38oovu/ -p /path/to/downdir -M mix --allmixnumber 2 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载音乐(原声)集合下所有作品 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/S6YMNXs/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/S6YMNXs/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/S6YMNXs/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/S6YMNXs/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载音乐(原声)集合下前n个作品 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/S6YMNXs/ -p C:\project\test --musicnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/S6YMNXs/ -p C:\project\test --musicnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/S6YMNXs/ -p /path/to/downdir --musicnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/S6YMNXs/ -p /path/to/downdir --musicnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 关闭头像下载, cover, music json数据也是一样的设置对应选项为 False ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -a False --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -a False --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -a False --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -a False --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 多线程设置, 默认5个线程, 可以自己调节线程数 ``` windows用户: -.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -t 8 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -t 8 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -t 8 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -t 8 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 直播推流地址解析 ``` windows用户: -.\TikTokCommand.exe -C True -l https://live.douyin.com/802939216127 -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://live.douyin.com/802939216127 -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" 或者 -.\TikTokCommand.exe -C True -l https://v.douyin.com/SnXMoh2/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +.\DouYinCommand.exe -C True -l https://v.douyin.com/SnXMoh2/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -C True -l https://live.douyin.com/802939216127 -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://live.douyin.com/802939216127 -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" 或者 -python TikTokCommand.py -C True -l https://v.douyin.com/SnXMoh2/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" +python DouYinCommand.py -C True -l https://v.douyin.com/SnXMoh2/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` @@ -578,6 +482,12 @@ python TikTokCommand.py -C True -l https://v.douyin.com/SnXMoh2/ -p /path/to/dow 本项目部分思路来自[TikTokDownload](https://github.com/Johnserf-Seed/TikTokDownload) +# 赞赏 +## 支付宝 +![alipay](./img/alipay.jpg) +## 微信 +![wechat](./img/wechat.jpg) + # 申明 本项目只作为学习用途, 切勿他用 diff --git a/config.yml b/config.yml index a60c9bf..02af4da 100644 --- a/config.yml +++ b/config.yml @@ -38,6 +38,21 @@ avatar: True # 可选 json: True +folderstyle: True # True -> 每个视频是一个单独的文件夹; False -> 所有视频共用一个文件夹 +# True +# user_xxx_xxx +# - like/post/mix +# - 2022-11-28 13.09.56_xxx +# - 2022-11-28 13.09.56_xxx.mp4 +# - 2022-11-29 12.09.56_xxx +# - 2022-11-29 12.09.56_xxx.mp4 + +# False +# user_xxx_xxx +# - like/post/mix +# - 2022-11-28 13.09.56_xxx.mp4 +# - 2022-11-29 12.09.56_xxx.mp4 + # link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为post, 可以设置多种模式 # 可选 mode: @@ -54,6 +69,10 @@ number: mix: 5 # 单个合集下作品下载个数设置, 默认为0 全部下载 music: 5 # 音乐(原声)下作品下载个数设置, 默认为0 全部下载 +database: True # 如果不使用数据库, 增量更新将不可用 + + + # 增量下载, 下载作品范围: 抖音最新作品到本地的最新作品之间的作品, 如果本地没有该链接的任何视频则全部下载 # 可配合 number 选项一起使用 # 情况1: number(假如设置5) 和 increase(假如抖音博主更新了3条作品,本地并未下载) 则会获取5条数据并下载 diff --git a/img/tiktokcommand1.jpg b/img/DouYinCommand1.jpg similarity index 100% rename from img/tiktokcommand1.jpg rename to img/DouYinCommand1.jpg diff --git a/img/tiktokcommand2.jpg b/img/DouYinCommand2.jpg similarity index 100% rename from img/tiktokcommand2.jpg rename to img/DouYinCommand2.jpg diff --git a/img/tiktokcommanddownload.jpg b/img/DouYinCommanddownload.jpg similarity index 100% rename from img/tiktokcommanddownload.jpg rename to img/DouYinCommanddownload.jpg diff --git a/img/tiktokcommanddownloaddetail.jpg b/img/DouYinCommanddownloaddetail.jpg similarity index 100% rename from img/tiktokcommanddownloaddetail.jpg rename to img/DouYinCommanddownloaddetail.jpg diff --git a/img/tiktokcommandlive.jpg b/img/DouYinCommandlive.jpg similarity index 100% rename from img/tiktokcommandlive.jpg rename to img/DouYinCommandlive.jpg diff --git a/img/tiktokweb.jpg b/img/WebApi.jpg similarity index 100% rename from img/tiktokweb.jpg rename to img/WebApi.jpg diff --git a/img/tiktokwebimage.jpg b/img/WebApiimage.jpg similarity index 100% rename from img/tiktokwebimage.jpg rename to img/WebApiimage.jpg diff --git a/img/tiktokwebpreviewimage.jpg b/img/WebApipreviewimage.jpg similarity index 100% rename from img/tiktokwebpreviewimage.jpg rename to img/WebApipreviewimage.jpg diff --git a/img/tiktokwebpreviewvideo.jpg b/img/WebApipreviewvideo.jpg similarity index 100% rename from img/tiktokwebpreviewvideo.jpg rename to img/WebApipreviewvideo.jpg diff --git a/img/tiktokwebvideo.jpg b/img/WebApivideo.jpg similarity index 100% rename from img/tiktokwebvideo.jpg rename to img/WebApivideo.jpg diff --git a/img/alipay.jpg b/img/alipay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1dddd8dc84172d68baab3684b80d2cbf71c3475d GIT binary patch literal 33490 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 F_+JVNXNmv- literal 0 HcmV?d00001 diff --git a/img/wechat.jpg b/img/wechat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f579b565370d87e1892a63764033ee9a7a489184 GIT binary patch literal 29704 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 literal 0 HcmV?d00001