Youtube-dl --dump-json возвращает другой вывод экстрактора для плейлиста при вызове из импорта из Python против CLI - PullRequest
0 голосов
/ 13 ноября 2018

У меня проблемы с репликацией точного вывода определенных - flat-playlist -j или - flat-playlist -J аргументов, предоставленных youtube-dl cli,но вместо этого используется прямой вызов Python.

Может быть, я не могу указать точные параметры, которые мне нужно представить, или, возможно, неправильную функцию / метод вообще?

Мне нравится эта команда, потому что она быстрая и дает мне только идентификаторы YouTube, без глубокого погружения в каждое видео (в качестве простого теста я могу выполнить 4000 примерно за 30 секунд против 4000 за 70 минутчерез обычное извлечение только для информации).

CLI-версия, обратите внимание, что cli каким-то образом повторяется, тогда как метод прямого вызова не ...

[root@tjds temp]# /usr/local/bin/youtube-dl --flat-playlist -J  https://www.youtube.com/channel/UC6RNSPFcqY4BblL2Jg9SUtw 
{"extractor": "youtube:playlist", "_type": "playlist", "uploader": "Patrick Best", "entries": [{"url": "IaNEfhPmhPM", "_type": "url", "ie_key": "Youtube", "id": "IaNEfhPmhPM", "title": "Rona in Aurora - the death of a big box"}, {"url": "JN-2vTf8-WM", "_type": "url", "ie_key": "Youtube", "id": "JN-2vTf8-WM", "title": "RealWorldNumbers - How to Test a Raspberry Pi Powered by Alkaline AA Batteries - After Poweroff"}, {"url": "NmQmM36ja3o", "_type": "url", "ie_key": "Youtube", "id": "NmQmM36ja3o", "title": "RealWorldNumbers - How to Test a Raspberry Pi Powered by Alkaline AA Batteries - During the Test"}, {"url": "MsrgW1Rdlso", "_type": "url", "ie_key": "Youtube", "id": "MsrgW1Rdlso", "title": "Raspberry Pi powered by AA batteries direct"}], "id": "UU6RNSPFcqY4BblL2Jg9SUtw", "title": "Uploads from Patrick Best", "extractor_key": "YoutubePlaylist", "uploader_id": "patrickscottbest", "uploader_url": "https://www.youtube.com/user/patrickscottbest", "webpage_url": "https://www.youtube.com/playlist?list=UU6RNSPFcqY4BblL2Jg9SUtw", "webpage_url_basename": "playlist"}



[root@tjds temp]# /usr/local/bin/youtube-dl --flat-playlist -j  https://www.youtube.com/channel/UC6RNSPFcqY4BblL2Jg9SUtw 
{"url": "IaNEfhPmhPM", "_type": "url", "ie_key": "Youtube", "id": "IaNEfhPmhPM", "title": "Rona in Aurora - the death of a big box"}
{"url": "JN-2vTf8-WM", "_type": "url", "ie_key": "Youtube", "id": "JN-2vTf8-WM", "title": "RealWorldNumbers - How to Test a Raspberry Pi Powered by Alkaline AA Batteries - After Poweroff"}
{"url": "NmQmM36ja3o", "_type": "url", "ie_key": "Youtube", "id": "NmQmM36ja3o", "title": "RealWorldNumbers - How to Test a Raspberry Pi Powered by Alkaline AA Batteries - During the Test"}
{"url": "MsrgW1Rdlso", "_type": "url", "ie_key": "Youtube", "id": "MsrgW1Rdlso", "title": "Raspberry Pi powered by AA batteries direct"}

Вот что мой скрипт на pythonэто:

        import youtube_dl
        ydl_opts = {
            'extract_flat': True, ## --flat-playlist according to options.py
             'dumpjson': True, ## lower -j
             #'dump_single_json': True, ## UPPER -J
        }
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            object = ydl.extract_info(providedURL, download=False)
            print (object)
            print len(object)

и результат, кажется, только представляет информацию о канале без итерации:

[youtube:channel] UC6RNSPFcqY4BblL2Jg9SUtw: Downloading channel page
{'_type': 'url', 'url': 'https://www.youtube.com/playlist?list=UU6RNSPFcqY4BblL2Jg9SUtw', 'ie_key': 'YoutubePlaylist', 'extractor': 'youtube:channel', 'webpage_url': 'https://www.youtube.com/channel/UC6RNSPFcqY4BblL2Jg9SUtw', 'webpage_url_basename': 'UC6RNSPFcqY4BblL2Jg9SUtw', 'extractor_key': 'YoutubeChannel'}

7

Может кто-нибудь, пожалуйста, направьте меня в правильном направлении или скажите мне, как лучшечтобы выполнить эту быструю задачу?Есть ли компонент шаблона, к которому мне нужно обратиться?Нужно ли обрабатывать ответ до того, как он будет готов к отображению?

>> print (youtube_dl.version.unicode_literals)
_Feature((2, 6, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 131072)

python --version
Python 3.6.5

Обновление,

Как и предполагалось, использование возвращенного значения "url" представляется достаточно хорошим решением для продолжениямоя работа.Я до сих пор не знаю, почему я не вижу те же результаты, которые я получал бы при использовании CLI, хотя ... там, кажется, другая логика, которая автоматически циклически перебирает список каналов, не выполняя команду секундувремя.

>>> with youtube_dl.YoutubeDL(ydl_opts) as ydl:
...     object = ydl.extract_info(providedURL, download=False)
...     print (len(object))
...     object2 = ydl.extract_info(object['url'], download=False)
...     print (len(object2))
...     print (object2)
... 
[youtube:channel] UC6RNSPFcqY4BblL2Jg9SUtw: Downloading channel page
7   


[download] Downloading playlist: Uploads from Patrick Best
[youtube:playlist] playlist Uploads from Patrick Best: Downloading 4 videos
[download] Downloading video 1 of 4
[download] Downloading video 2 of 4
[download] Downloading video 3 of 4
[download] Downloading video 4 of 4
[download] Finished downloading playlist: Uploads from Patrick Best
11
{'_type': 'playlist', 'entries': [{'_type': 'url', 'url': 'IaNEfhPmhPM', 'ie_key': 'Youtube', 'id': 'IaNEfhPmhPM', 'title': 'Rona in Aurora - the death of a big box'}, {'_type': 'url', 'url': 'JN-2vTf8-WM', 'ie_key': 'Youtube', 'id': 'JN-2vTf8-WM', 'title': 'RealWorldNumbers - How to Test a Raspberry Pi Powered by Alkaline AA Batteries - After Poweroff'}, {'_type': 'url', 'url': 'NmQmM36ja3o', 'ie_key': 'Youtube', 'id': 'NmQmM36ja3o', 'title': 'RealWorldNumbers - How to Test a Raspberry Pi Powered by Alkaline AA Batteries - During the Test'}, {'_type': 'url', 'url': 'MsrgW1Rdlso', 'ie_key': 'Youtube', 'id': 'MsrgW1Rdlso', 'title': 'Raspberry Pi powered by AA batteries direct'}], 'id': 'UU6RNSPFcqY4BblL2Jg9SUtw', 'title': 'Uploads from Patrick Best', 'uploader': 'Patrick Best', 'uploader_id': 'patrickscottbest', 'uploader_url': 'https://www.youtube.com/user/patrickscottbest', 'extractor': 'youtube:playlist', 'webpage_url': 'https://www.youtube.com/playlist?list=UU6RNSPFcqY4BblL2Jg9SUtw', 'webpage_url_basename': 'playlist', 'extractor_key': 'YoutubePlaylist'}
>>> 

1 Ответ

0 голосов
/ 13 ноября 2018

Полагаю, если вы ссылаетесь на плейлист, вы должны передать свой URL-адрес следующим образом:

url = 'https://www.youtube.com/playlist?list=UU6RNSPFcqY4BblL2Jg9SUtw'

Тогда вы сможете печатать объект и проходить через каждый диктовку, что-то вроде:

object = ydl.extract_info(url, download=False)
for jsn in object.get('entries'):
    print jsn
...