youtube-dl:无法解析JSON

问题描述

我昨天在GitHub支持页面上对此发布了一个问题,并将其标记为重复-原始答案为here。此问题不会像针对该用户那样自动修复。取而代之的是,它似乎来来往往没有模式,因此我没有很好的方法来复制它。有些歌曲会在某个时间点播放,然后几分钟后它们就会消失。

错误

[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)

我更改了选项,尝试了其他可行的选项,似乎没有什么不同。有些会起作用,然后不会,然后又会起作用。

解决方法

我认为这是一个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提交拉取请求,或者等待其他人对其进行修复。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...