Code Monkey home page Code Monkey logo

joeanamier / tiktokdownloader Goto Github PK

View Code? Open in Web Editor NEW
6.0K 38.0 954.0 17.57 MB

完全免费开源,基于 AIOHTTP 模块实现:TikTok 主页/视频/图集/原声;抖音主页/视频/图集/收藏/直播/原声/合集/评论/账号/搜索/热榜数据采集工具

Home Page: https://github.com/JoeanAmier/TikTokDownloader/wiki/Documentation

License: GNU General Public License v3.0

Python 61.37% CSS 12.15% JavaScript 12.39% SCSS 9.99% HTML 4.10%
douyin python tiktok css html javascript api csv sqlite xlsx

tiktokdownloader's Issues

Windows EXE 可执行文件

发布 Windows EXE 可执行文件,开箱即用!


编译版本:4.1 beta
编译日期:2023/8/26
系统要求:Windows 10,Windows 11
编译文件:TikTokDownloader_V4.1_Beta_EXE.zip


下载压缩包并解压,双击打开 TikTokDownloader_V4.1_Beta\main.exe 即可使用。

未来将会随版本更新在 Releases 发布!

基于其他成熟的下载项目提一点建议。

我来对作者指手画脚提建议了,首先感谢JA对我等抖音用户提供的这个项目,试了一下完美运行,很赞!

居然连网络问题都考虑到了,非常nice。

image


首先介绍一下,我是重度YouTube用户,在YouTube下载这块,有一个大名鼎鼎的项目叫youtube-dl

image

还有一个叫yt-dlp的fork
image

参与者众多,用户巨多,程序健壮性……我没有遇到一次bug,Google拿它无可奈何,非常健壮而且强壮!

基于使用yd的经验,借鉴于yd的做法,我想给咱们作者提点建议:


我下载了某个博主的视频,但是并不是所有视频都是我想要收藏的,所以我删除了一部分,并且不想再次下载。
我看到咱们项目里是用文件存在做判断的,也就是还实现不了。
image

希望作者借鉴一下yd,把下载过的视频id存在一个文本里,

image
image
image

可以看到这个文件仅仅1980K,但是已经保存了近10万id,在程序启动的时候读到内存里,以这里的id为唯一标识,判断id已经存在就跳过。

这样,判断是否下载不再依赖于文件夹的文件,而视频文件我想删除就删除,想移走就移走。

我相信这不是我一个人的需求,而是很多人的痛点。


然后,我看到了我下载过的一个视频,我想找到它,看评论或者举报点赞什么的,然后懵逼的发现作者改名了,或者没改名但是她居然有好几千视频,完全找不到是哪个!
所以希望能把作品ID附带在文件名末尾,至少留给我找到它的一条路。

image


我看到作者已经有未完成文件的应对机制了,但有没有试过突然断电?拔掉硬盘?测试也不带这么测的啊!

所以希望加一个临时文件夹,先下载到临时文件夹,下载完成后move到目标文件夹,这样确保目标文件夹里面一定是成功的视频。

就算不为损坏的视频考虑,也有另一个好处:我运行程序是在SSD,存储视频是在机械硬盘(阵列、NAS之类的),SSD跑程序是为了响应快而且不介意它碎片化读写,但是不想要机械硬盘过多的碎片读写,更要命的是我的SSD不够大,下视频随随便便好几个T根本放不下。


yd也是基于python的,以上功能都可以瞄一眼它的代码。

预祝本项目大红大紫!

程序代码修改指引

程序代码修改指引

本指引适合不熟悉 Python 编程语言或者不熟悉本项目的使用者查阅。

修改代码时请注意代码缩进。

调整请求数据间隔

修改 src/DataAcquirer.py21 行代码。

  • 如果想要取消间隔,请将第 21 行代码修改为 pass
  • 如果想要固定间隔,请将第 21 行代码修改为 time.sleep(秒数)
  • 如果想要调整间隔,请将第 21 行代码修改为 time.sleep(randrange(最小间隔秒数×10, 最大间隔秒数×10, 5) * 0.1)

批量下载账号作品-无人值守

修改 src/main_complete.py188~190 行和第 213~215 行代码。

  • 如果想要程序遇到异常时停止获取,请将第 188~189 行和第 213~214 行代码转换为注释(在整行代码前添加 #)
  • 如果想要程序遇到异常时继续获取,请将第 188~189 行和第 213~214 行代码转换为注释,并将第 190215 行代码修改为 continue

TikTok.account_download() missing 1 required positional argument: 'params'

File "D:\PycharmProjects\TikTokDownloader\src\main_complete.py", line 284, in run
self.batch_acquisition()
File "D:\PycharmProjects\TikTokDownloader\src\main_complete.py", line 79, in batch_acquisition
self.account_download(
TypeError: TikTok.account_download() missing 1 required positional argument: 'params'

关于程序功能的详细说明

基础概念

链接类型:

  • 长链接:使用浏览器打开抖音链接时,地址栏所显示的 URL 地址。
  • 短链接:点击 APP 或网页版的分享按钮得到的 URL 地址,抖音平台以 https://v. 开头,并且前后掺杂中文;TikTok 平台以 https://vm 开头,不掺杂其他字符。

链接输入:

  • 输入 settings.json 时,需要手动去除中文,仅输入 URL 链接。
  • 程序运行输入时,可直接粘贴内容后回车,程序会自动提取 URL 地址。

数据储存:

  • settings.jsonsave 参数可设置数据储存格式类型。
  • 采集作品评论数据批量采集账号数据采集搜索结果数据 模式必须设置 save 参数才可正常使用。
  • 程序所有数据均储存至 root 参数路径下的 Data 文件夹。

终端命令行模式

功能最全面的模式,支持全部功能。

批量下载账号作品

使用 settings.jsonaccounts 参数中的账号主页链接。

支持链接格式:

  • https://v.douyin.com/分享码/
  • https://www.douyin.com/user/账号ID
  • https://www.douyin.com/user/账号ID?modal_id=作品ID

每个账号的作品会下载至 root 参数路径下的账号文件夹,账号文件夹格式为 UID123456789_mark 或者 UID123456789_账号昵称

单独下载链接作品

输入作品链接;目前仅该模式支持 TikTok 平台。

支持链接格式:

  • https://v.douyin.com/分享码/
  • https://vm.tiktok.com/分享码/
  • https://www.douyin.com/note/作品ID
  • https://www.douyin.com/video/作品ID
  • https://www.douyin.com/user/账号ID?modal_id=作品ID
  • https://www.tiktok.com/@账号昵称/video/作品ID

作品会下载至 root 参数和 folder 参数拼接成的文件夹。

获取直播推流地址

输入直播链接,不支持已结束的直播。

支持链接格式:

  • https://live.douyin.com/直播ID

目前不支持直播分享短链接!

下载说明:

  • 单次输入一个直播链接时,程序会询问用户是否下载直播视频,如果使用本程序下载,需要保持程序运行直到直播结束。
  • 单次输入多个直播链接时,程序不会询问用户是否下载视频。
  • 建议复制直播推流地址到其他下载工具进行下载。

采集作品评论数据

输入作品链接。

支持链接格式:

  • https://v.douyin.com/分享码/
  • https://www.douyin.com/note/作品ID
  • https://www.douyin.com/video/作品ID
  • https://www.douyin.com/user/账号ID?modal_id=作品ID

支持采集评论回复、评论表情、评论图片。

批量下载合集作品

  1. 使用 settings.jsonmix 参数中的合集链接或作品链接。
  2. 输入合集链接,或者属于合集的任意一个作品链接。

支持链接格式:

  • https://v.douyin.com/分享码/
  • https://www.douyin.com/note/作品ID
  • https://www.douyin.com/video/作品ID
  • https://www.douyin.com/user/账号ID?modal_id=作品ID
  • https://www.douyin.com/collection/合集ID

每个合集的作品会下载至 root 参数路径下的合集文件夹,合集文件夹格式为 MIX123456789_mark 或者 MIX123456789_合集标题

批量采集账号数据

  1. 使用 settings.jsonaccounts 参数中的账号主页链接。
  2. 输入账号主页链接。

支持链接格式:

  • https://v.douyin.com/分享码/
  • https://www.douyin.com/user/账号ID
  • https://www.douyin.com/user/账号ID?modal_id=作品ID

采集搜索结果数据

格式规则 输入搜索条件。

来自未来的新模式

功能待定,欢迎提出需求和建议。

Web UI 模式

提供浏览器可视化交互界面,支持单独下载链接作品功能和获取直播推流地址功能,支持局域网远程访问,可以部署至私有服务器,不可直接部署至公开服务器。

服务器部署模式

提供浏览器可视化交互界面,支持单独下载链接作品功能,用于部署至公开服务器,为网站访客提供作品下载服务。

为保护访客隐私,服务器部署模式 禁用了日志记录和数据存储功能,不会记录任何作品提取数据。

关于账号标识和昵称修改的说明

标识设置规则

  • name 参数中没有使用 nickname 时,mark 设置没有限制。
  • name 参数中使用了 nickname 时,marknickname 不能设置为包含关系的字符串。

示例:

  • ✔️ nickname:ABC,mark:DEF
  • ✔️ nickname:ABC,mark:BCD
  • nickname:ABC,mark:AB
  • nickname:BC,mark:ABC

账号标识说明

  • 账号标识 mark 参数相当于账号备注,便于用户识别账号作品文件夹,避免账号昵称修改导致无法识别已下载作品问题。

  • 批量下载账号作品 模式下,如果设置了 mark 参数,下载的作品将会保存至 UID123456789_mark参数UID123456789_mark参数_喜欢页 文件夹内。

  • 批量下载账号作品 模式下,如果 mark 参数设置为空字符串,程序将会使用账号昵称作为账号标识,下载的作品将会保存至 UID123456789_账号昵称UID123456789_账号昵称_喜欢页 文件夹内。

合集标识说明

与账号标识作用一致。

如何修改标识

修改账号标识: 修改 accountsmark 参数,再次运行 批量下载账号作品 模式,程序会自动应用新的账号标识。

修改合集标识: 修改 mixmark 参数,再次运行 批量下载合集作品 模式,程序会自动应用新的账号标识;或者手动输入合集链接,根据程序提示进行设置。

账户昵称修改

批量下载账号作品批量下载合集作品 模式下,程序会判断账号昵称是否有修改,如果有修改,程序会自动识别已下载作品文件名称中的账户昵称,并修改至最新账户昵称。

FileCache.json

缓存文件,用于记录账号/合集标识和账号昵称,当账号/合集标识或账号昵称发生变化时,程序会读取文件内容,并对相应的文件夹和文件进行重命名更新处理,如果该文件不存在或者删除该文件,程序首次运行不会判断账号/合集标识和账号昵称是否发生变化,程序运行结束后会生成新的缓存文件,之后程序才能监控账号/合集标识和账号昵称变化。

缓存文件仅供程序读取和写入,不建议手动编辑文件内容。

初始化错误

PS G:\1temp\TikTokDownloader> python .\main.py
File "G:\1temp\TikTokDownloader\main.py", line 16
match mode:
^
SyntaxError: invalid syntax

啊,clone到本地后打开main.py 报错。

关于配置文件的说明

📄 配置文件示例

{
  "accounts": [
    [
      "账号标注1",
      "账号主页链接, 支持长链接与短链接",
      "post",
      "2023/7/1",
      ""
    ],
    [
      "账号标注2",
      "账号主页链接, 支持长链接与短链接",
      "favorite",
      "",
      "2023/8/1"
    ]
  ],
  "mix": [
    [
      "合集标识1",
      "https://www.douyin.com/collection/123, 支持合集链接与作品链接"
    ],
    [
      "合集标识2",
      "https://www.douyin.com/video/123, 支持长链接与短链接"
    ]
  ],
  "root": "./",
  "folder": "Download",
  "name": "create_time nickname id desc",
  "time": "%Y-%m-%d %H.%M.%S",
  "split": "-",
  "music": [
    false,
    true
  ],
  "save": "sql",
  "cookie": [
    {
      "passport_csrf_token": "111",
      "passport_csrf_token_default": "111",
      "odin_tt": "111"
    },
    {
      "passport_csrf_token": "222",
      "passport_csrf_token_default": "222",
      "odin_tt": "222"
    }
  ],
  "dynamic": [
    false,
    true
  ],
  "original": [
    false,
    false
  ],
  "proxies": [
    "",
    "http://127.0.0.1:9999"
  ],
  "log": false,
  "download": [
    true,
    false
  ],
  "chunk": 1048576,
  "retry": 20
}

单进程终端模式、Web UI 模式:musiccookiedynamicoriginalproxiesdownload 参数仅第一个值生效,下载多个账号的作品均使用false(不下载音乐), cookie-1, false(不下载动态封面图), false(不下载静态封面图), ""(不使用代理), true(下载文件) 参数

多进程终端模式(未完成):accountsmusiccookiedynamicoriginalproxiesdownload 的元素个数必须相同,下载账号1 的作品使用false(不下载音乐), cookie-1, false(不下载动态封面图), false(不下载静态封面图), ""(不使用代理), true(下载文件) 参数,下载账号2 的作品使用true(下载音乐), cookie-2, true(下载动态封面图), false(不下载静态封面图), http://127.0.0.1:9999(使用代理), false(不下载文件) 参数,每个账号按照索引对应的参数单独生效

服务器部署模式:cookieproxies参数仅第一个值生效,retry 参数生效,其余参数均不生效,但仍需正确编辑配置文件

其余参数为全局参数

🏷 部分参数详解

{
  "root": "C:\\TikTokDownloader",
  "folder": "SOLO"
}

代表程序会将下载的文件和记录的数据储存至 C:\TikTokDownloader 文件夹内,单独下载的作品文件会储存至 C:\TikTokDownloader\SOLO 文件夹内。

{
  "name": "create_time uid id",
  "split": "#"
}

代表作品文件名称格式为: 发布时间#作者UID#作品ID

修改命名格式会导致已下载的文件无法正常识别,建议慎重设置,避免后续修改。

{
  "time": "%Y-%m-%d"
}

代表发布时间格式为: XXXX年-XX月-XX日,详细设置规则可以查看文档

{
  "save": "xlsx"
}

代表使用 XLSX 格式储存程序采集数据;采集作品评论数据批量采集账号数据采集搜索结果数据 必须设置 save 参数,否则程序不会保存任何数据至文件。

{
  "chunk": 1048576
}

代表下载文件时每次从服务器接收 1048576 字节 (1 MB)大小的数据块。

  • 影响下载速度:较大的 chunk 会增加每次下载的数据量,从而提高下载速度。相反,较小的 chunk 会降低每次下载的数据量,可能导致下载速度稍慢。
  • 影响内存占用:较大的 chunk 会一次性加载更多的数据到内存中,可能导致内存占用增加。相反,较小的 chunk 会减少每次加载的数据量,从而降低内存占用。

关于Python及第三方模块版本的说明

Python 版本

作者开发使用的是 3.11 最新版本的 Python,使用了部分新语法,对于旧版本的 Python 会产生报错。
如果使用 3.9 及以上版本的 Python,安装运行所需第三方模块之后即可正常使用。
如果使用 3.9 以下版本的 Python,请将 src/StringCleaner.py 文件内容改为以下代码,即可正常使用。

from platform import system
from string import whitespace


class Cleaner:
    def __init__(self):
        """
        替换字符串中包含的非法字符,默认根据系统类型生成对应的非法字符字典,也可以自行设置非法字符字典
        """
        self.rule = self.default_rule()  # 默认非法字符字典

    @staticmethod
    def default_rule():
        """根据系统类型生成默认非法字符字典"""
        if (s := system()) in ("Windows", "Darwin"):
            rule = {
                "/": "",
                "\\": "",
                "|": "",
                "<": "",
                ">": "",
                "\"": "",
                "?": "",
                ":": "",
                "*": "",
                "\x00": "",
            }  # Windows 系统和 Mac 系统
        elif s == "Linux":
            rule = {
                "/": "",
                "\x00": "",
            }  # Linux 系统
        else:
            print("不受支持的操作系统类型,可能无法正常去除非法字符!")
            rule = {}
        cache = {i: "" for i in whitespace[1:]}  # 补充换行符等非法字符
        return {**rule, **cache}

    def set_rule(self, rule: dict[str, str], update=False):
        """
        设置非法字符字典

        :param rule: 替换规则,字典格式,键为非法字符,值为替换后的内容
        :param update: 如果是 True,则与原有规则字典合并,否则替换原有规则字典
        """
        self.rule = {**self.rule, **rule} if update else rule

    def filter(self, text: str) -> str:
        """
        去除非法字符

        :param text: 待处理的字符串
        :return: 替换后的字符串,如果替换后字符串为空,则返回 None
        """
        if not text:
            return text
        for i in self.rule:
            text = text.replace(i, self.rule[i])
        return text or None

第三方模块版本

作者使用的第三方模块版本均为最新版本:Flask 2.3.2, requests 2.31.0, openpyxl 3.1.2, PyExecJS2 1.6.1,可使用以下命令安装。

pip install requests
pip install openpyxl
pip install Flask
pip install PyExecJS2

where is my mistake?

did i do something wrong? please correct me because I don't understand much about coding

image_924
image_926

Connection broken: IncompleteRead

File "D:\PycharmProjects\TikTokDownloader\src\DataAcquirer.py", line 64, in execute
if result := function(self, *args, **kwargs):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PycharmProjects\TikTokDownloader\src\DataDownloader.py", line 369, in request_file
if response.content == b"":
^^^^^^^^^^^^^^^^
File "D:\PycharmProjects\TikTokDownloader\venv\Lib\site-packages\requests\models.py", line 899, in content
self._content = b"".join(self.iter_content(CONTENT_CHUNK_SIZE)) or b""
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PycharmProjects\TikTokDownloader\venv\Lib\site-packages\requests\models.py", line 818, in generate
raise ChunkedEncodingError(e)
requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(3668523 bytes read, 612217 more expected)', IncompleteRead(3668523 bytes read, 612217 more expected))

关于服务器部署模式二次开发的说明

API 文档

请求URL:/solo/

请求类型:POST

请求格式:JSON

请求内容:

{
  "url": "抖音作品链接或 TikTok 作品链接"
}

后端会自动处理 url 参数中的作品链接,可以不在前端对 url 参数进行额外处理。

支持链接:

  • https://v.douyin.com/分享码/
  • https://vm.tiktok.com/分享码/
  • https://www.douyin.com/note/作品ID
  • https://www.douyin.com/video/作品ID
  • https://www.douyin.com/user/账号ID?modal_id=作品ID
  • https://www.tiktok.com/@账号昵称/video/作品ID

响应格式:JSON

响应内容:

{
  "text": "解析结果提示, 字符串",
  "author": "作者昵称, 字符串; 失败时返回 null",
  "describe": "作品描述, 字符串; 失败时返回 null",
  "download": "作品下载地址, 视频返回字符串, 图集返回由下载地址成的数组; 失败时返回 false",
  "music": "原声下载地址, 字符串, 失败时返回 false",
  "origin": "静态封面图地址, 字符串; 失败时返回 false",
  "dynamic": "动态封面图地址, 字符串; 失败时返回 false",
  "preview": "作品预览图地址, 字符串, 视频返回静态封面图, 图集返回首张图片; 失败时返回空白预览图地址"
}

fastapi调用的模式

非常感谢您开发这么方便的工具。我想提出一些建议,希望能够增加更多功能。

首先,我建议您考虑一个在本地运行Fastapi的模式,而不需要修改原始码。这样使用者可以通过API来调用您的工具。

另外,我还希望您能够提供一个API,让使用者可以输入抖音号,然后返回相关的视频列表和发布日期等参数。这将使使用者更方便地获取他们需要的信息。

同样地,如果您能够提供另一个API,让使用者输入抖音号并返回最新的视频列表和发布日期等参数,那将是非常有用的功能。

非常感谢您的时间,希望这些建议能对您有所帮助。我期待能够看到这些新功能的实现。

谢谢您!

关于单次输入多个链接的说明

单次输入多个链接

单独下载链接作品获取直播推流地址采集作品评论数据批量下载合集作品批量采集账号数据3.1 版本起开始支持单次输入多个链接,实现批量下载 / 提取功能;单次输入多个链接时,链接类型需要保持一致,不支持短链接与长链接混合输入。

输入示例

实际输入时不需要刻意添加分隔符,此处示例使用空格分隔仅仅便于观察区分链接。
提取账号数据模式 输入多个长链接时,需要使用空格分隔,其余模式不需要分隔字符。
无需对复制的链接进行处理,程序会自动提取输入文本中的有效链接。

  • 支持:https://v.douyin.com/abc/ https://v.douyin.com/abc/
  • 支持:https://www.douyin.com/video/123456789 https://www.douyin.com/note/123456789
  • 支持:https://www.douyin.com/collection/123456789 https://www.douyin.com/collection/123456789
  • 支持:https://www.douyin.com/user/ABC?modal_id=123456789 https://www.douyin.com/note/123456789
  • 不支持:https://v.douyin.com/abc/ https://www.douyin.com/video/123456789
  • 不支持:https://www.douyin.com/collection/123456789 https://www.douyin.com/video/123456789
  • 不支持:https://www.douyin.com/video/123456789 https://www.tiktok.com/@ABC/video/123456789

[BUG]运行脚本发现问题

Traceback (most recent call last):
File "D:\Media\TikTokDownloader-2.3\main.py", line 4, in
from src.main_complete import TikTok
File "D:\Media\TikTokDownloader-2.3\src\main_complete.py", line 2, in
from src.DataAcquirer import UserData
File "D:\Media\TikTokDownloader-2.3\src\DataAcquirer.py", line 14, in
from src.Recorder import LoggerManager
File "D:\Media\TikTokDownloader-2.3\src\Recorder.py", line 10, in
from src.StringCleaner import Cleaner
File "D:\Media\TikTokDownloader-2.3\src\StringCleaner.py", line 16
match system:
^
SyntaxError: invalid syntax

博主的作品数量不对

博主的内容全都是视频,没有图文。
地址是

https://www.douyin.com/user/MS4wLjABAAAAvc-D-qB6X9O41NM3duVF1oAfG54Ear9_dFv385XuTy1F2-IhHlOlY2T1oOIZKlFy

image

后台显示

image

结果也是只下载了23个。
image

运行代码报错 TypeError: 'type' object is not subscriptable

Traceback (most recent call last):
File "C:\Users\ThinkPad\Downloads\TikTokDownloader-3.6\main.py", line 12, in
from src.StringCleaner import Colour
File "C:\Users\ThinkPad\Downloads\TikTokDownloader-3.6\src\StringCleaner.py", line 5, in
class Cleaner:
File "C:\Users\ThinkPad\Downloads\TikTokDownloader-3.6\src\StringCleaner.py", line 39, in Cleaner
def set_rule(self, rule: dict[str, str], update=False):
TypeError: 'type' object is not subscriptable

关于异常反馈和优化建议

异常反馈

建议仔细阅读 README.mdDocumentation 了解项目使用方法和功能介绍,如果遇到无法解决的问题,可以创建 issue 寻求解决方案,或者 加入群聊 进行问题反馈。

建议在 issue 中提交以下信息:

  • 发生异常时程序的运行模式
  • 发生异常时所用的链接
  • 程序运行日志文件或部分日志内容
  • 发生问题时的错误代码
  • 程序源码的版本号
  • Python 版本号
  • 其他必要说明

优化建议

可以创建 issue 描述你认为较为实用的建议或优化方案,或者 加入群聊 进行讨论交流。

作者会优先考虑需求量大或者实用性高的优化建议!

提示警告:该模式正在开发中,功能可能无法正常使用!

你好,Web API 接口模式报405,请求dy接口貌似必需携带s_v_web_id吧,没有s_v_web_id获取不到数据。每请求几次会触发点选验证,建议加个验证模块,ddddocr不错就是识别成功效率不高。滑块验证过了,到旋转验证,再到中文点选,然后是物体点选, 估计更变态的防御风控机制还在后面

视频分辨率低和同分辨率下码流异常

博主

image

地址

https://www.douyin.com/user/MS4wLjABAAAAJ6Lr2yJ-SAFg7GjMu7E2nHZd1nhGhzsygP7_uqQXlI0

下面截图的视频ID为7214153200159558973

image

左边是 本项目下载的
右边是 TikTokDownload下载的,下同

由于分辨率低了一些,所以文件体积也小一些。


然后下面的视频ID为7198388067944631610

在相同分辨率下文件体积不一样,

image

检查发现是码流小了。

image


还有一个是会下载到0K的文件,视频是可以正常播放的,地址https://www.douyin.com/video/7020014643720539429

image

console中没有报错。


分辨率低的问题,不是个例,一百多视频超过一半。

image

大概下载三四个博主会出现一个0k问题。

提示:网络异常: [SSL: DECRYPTION_FAILED_

大佬,您好,我在使用中遇到了以下问题。网络异常: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2578)
image
请问怎么解决呢

【BUG】接口失效

2023-07-01 11:34:34[ERROR]: 数据接口返回内容异常!疑似接口失效
2023-07-01 11:34:37[ERROR]: 数据接口返回内容异常!疑似接口失效
2023-07-01 11:34:40[ERROR]: 数据接口返回内容异常!疑似接口失效
2023-07-01 11:34:50[ERROR]: 数据接口返回内容异常!疑似接口失效
2023-07-01 11:34:55[ERROR]: 数据接口返回内容异常!疑似接口失效

关于检测新版本功能的说明

检测新版本

程序从 3.3 版本起支持检测新版本功能,启用检测新版本功能后,运行程序时会向 https://github.com/JoeanAmier/TikTokDownloader/releases/latest 发送请求获取最新 Releases 版本号,并提示是否存在新版本。

如果存在新版本会输出新版本的 URL 地址,不会自动下载更新。

报错反馈

感谢开源!项目配置好之后能够启动,但在收集完账号中的视频信息之后报出了字典错误,跟现在open的那个issue差不多,如下:
File "F:\XXX\XXX\TikTokDownloader-2.0\TikTokDownloader-2.0\src\DataDownloader.py", line 281, in get_info
music_name = f'{item["music"]["author"]}-{item["music"]["title"]}'
KeyError: 'music'

账号链接是“https://www.douyin.com/user/MS4wLjABAAAA0hKPSklbRqN0zl1Iyb3g93Tgvxh2QuBPQ5-x1KFFruQ”

报错的日志如下:
2023-06-29 17.02.14.log

关于抖音搜索结果采集功能的说明

输入格式

格式:关键词 类型 页数 排序规则 时间筛选

  • 类型:综合搜索 视频搜索 用户搜索
  • 排序规则:综合排序 最新发布 最多点赞
  • 时间筛选:0:不限;1:一天内;7:一周内;182:半年内

参数之间使用空格分隔,类型排序规则 支持输入中文或者对应索引,页数时间筛选 仅支持输入整数。

程序采集的抖音搜索结果会储存至文件,不支持直接下载搜索结果作品;必须设置 save 参数,否则程序不会储存任何数据。

输入示例

输入:猫咪

含义: 关键词:猫咪;类型:综合搜索;页数:1;排序规则:综合排序;时间筛选:不限


输入:猫咪 1 2 1 等效于 猫咪 视频搜索 2 最新发布

含义: 关键词:猫咪;类型:视频搜索;页数:2;排序规则:最新发布;时间筛选:不限


输入:猫咪 0 10 0 7 等效于 猫咪 综合搜索 10 综合排序 7

含义: 关键词:猫咪;类型:综合搜索;页数:10;排序规则:综合排序;时间筛选:一周内


输入:猫咪 1 5 2 182 等效于 猫咪 视频搜索 5 最多点赞 182

含义: 关键词:猫咪;类型:视频搜索;页数:5;排序规则:最多点赞;时间筛选:半年内


输入:猫咪 2 2 等效于 猫咪 用户搜索 2

含义: 关键词:猫咪;类型:用户搜索;页数:2

好像接口又换了

下载单个视频 最近的这个只尝试一次返回403 item_list失败 我用的作者之前的版本会尝试几次 然后成功
批量下载 返回空json
用习惯这个了了,作者有空改一下吧

运行main.py报错

F:\TikTokDownloader-3.2>py main.py
Traceback (most recent call last):
File "main.py", line 1, in
from flask import Flask
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\flask_init_.py", line 19, in
from jinja2 import Markup, escape
ImportError: cannot import name 'Markup' from 'jinja2' (C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\jinja2_init_.py)

运行main.py报错

win11系统。之前装的python3.9 报错后安装了3.11,还是保持。日志如下: 文件放C:盘和D:盘都是一样的错误。
C:\envs\TikTokDownloader-4.0\Scripts\python.exe D:\TikTokDownloader\main.py
Traceback (most recent call last):
File "D:\TikTokDownloader\main.py", line 210, in
Master().run()
File "D:\TikTokDownloader\main.py", line 197, in run
self.check_config()
File "D:\TikTokDownloader\main.py", line 68, in check_config
c.mkdir()
File "C:\Python\Python311\Lib\pathlib.py", line 1116, in mkdir
os.mkdir(self, mode)
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'src\config'

TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'

执行报错 : 报错的完整日志如下 :
E:\other\amemv-crawler\douyin\TikTokDownloader-4.0\TikTokDownloader-4.0>python main.py
Traceback (most recent call last):
File "E:\other\amemv-crawler\douyin\TikTokDownloader-4.0\TikTokDownloader-4.0\main.py", line 10, in
from src.CookieTool import Cookie
File "E:\other\amemv-crawler\douyin\TikTokDownloader-4.0\TikTokDownloader-4.0\src\CookieTool.py", line 9, in
from src.Parameter import TtWid
File "E:\other\amemv-crawler\douyin\TikTokDownloader-4.0\TikTokDownloader-4.0\src\Parameter.py", line 328, in
class TtWid:
File "E:\other\amemv-crawler\douyin\TikTokDownloader-4.0\TikTokDownloader-4.0\src\Parameter.py", line 332, in TtWid
def get_tt_wid() -> dict | None:
TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'

请问一下,是什么原因呢,下载的是release最新版本

KeyError: 55

File "D:\PycharmProjects\TikTokDownloader\src\DataDownloader.py", line 469, in run
self.get_info(video, "Video")
File "D:\PycharmProjects\TikTokDownloader\src\DataDownloader.py", line 271, in get_info
type_ = {68: "Image", 0: "Video"}[item["aweme_type"]]
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
KeyError: 55

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.