#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.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)
Я изменил параметры, попробовал другие параметры, которые, как говорят, сработали, и, похоже, ничего не изменилось. Некоторые будут работать, затем нет, затем они будут снова.
Ответ №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 или подождать, пока кто-нибудь это исправит.