youtube dl:无法解析JSON

youtube dl:无法解析JSON,json,discord.py,youtube-dl,ytdl,Json,Discord.py,Youtube Dl,Ytdl,我昨天在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.

我昨天在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
}

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

我认为这是一个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提交拉取请求,或者等待某人修复它

var ytInitialData = {...}