1

我昨天在 GitHub 支持页面上发布了一个关于此的问题,它被标记为重复 - 原始答案在这里。此问题不会像该用户那样自动修复。相反,它似乎来来去去没有模式,所以我没有复制它的好方法。有些歌曲会在某个时间点播放,但几分钟后就不会播放了。

错误:

[debug] Encodings: locale cp1252, fs utf-8, out UTF-8, pref cp1252
[debug] youtube-dl version 2020.09.20
[debug] Python version 3.7.8 (CPython) - Windows-10-10.0.19041-SP0
[youtube:search] query "iron man 3 song": Downloading page 1
[debug] exe versions: none
[debug] Proxy map: {}
ERROR: query "song name": Failed to parse JSON  caused by JSONDecodeError('Expecting value: line 1 column 1 (char 0)')); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

尝试从视频中提取数据时遇到问题。这是我正在使用的代码片段:

ydlOps = {
    'format': 'bestaudio/best',
    'outtmpl': './%(title)s.webm',
    'noplaylist': True,
    'extractaudio': True,
    'audioformat': 'webm',
    'default_search': 'ytsearch1',
    'quite': True,
    'verbose':True,
    'version': True
}
        with youtube_dl.YoutubeDL(ydlOps) as downloader:
            songData = downloader.extract_info(url, download=download)

我已经更改了选项,尝试了其他据说有效的选项,但似乎没有任何改变。有些会起作用,然后不会,然后它们会再次起作用。

4

1 回答 1

1

我认为这是一个 youtube-dl 错误。我为 youtube 搜索写了一个解析器,它也坏了。之前查看 youtube 的响应时,所有 JSON 数据的存储方式如下:

window["ytInitialData"] = {...}

因此,您只需在服务器的响应中搜索字符串 'window["ytInitialData"]' 即可找到相关的 JSON 并提取它。但是现在,youtube 将这样的 JSON 存储在服务器发送的 html 文件中

var ytInitialData = {...}

在解析结果时,需要在 youtube-dl 方面进行更改。

奇怪的是,有时 youtube 使用以前的版本,有时它使用当前版本。我认为这是因为 javascript 的变化正在逐步在所有 youtube 服务器上推出。

另请注意,现在包含所有 JSON 的行以 '; 结尾。' 而不仅仅是 ';'。这可能还需要从 youtube-dl 进行更改。

您需要向 youtube-dl 提交拉取请求或等待有人修复它。

于 2020-10-18T10:29:29.820 回答