You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yt-dlp/yt_dlp/extractor/plvideo.py

47 lines
1.4 KiB
Python

from yt_dlp.extractor.common import InfoExtractor
class PlVideoVideoIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?plvideo\.ru/watch\?v=(?P<id>\w+)&?(.+)?' # type: ignore
_TESTS = [
{
'url': 'https://plvideo.ru/watch?v=lYmu2gcUKOa9',
'info_dict': {
'id': 'lYmu2gcUKOa9',
'ext': 'mp4',
'title': 'test',
}
}
]
def _real_extract(self, url):
video_id = self._match_id(url)
api_url = f'https://api.g1.plvideo.ru/v1/videos/{video_id}?Aud=18'
result = self._download_json(api_url, video_id, 'Downloading video JSON')
assert result.get('code') == 200, 'Failed to download video JSON'
item = result.get('item')
assert item is not None, 'Bad API response'
thumbnail = item.get('cover').get('paths').get('original').get('src')
formats = []
for key, value in item.get('profiles').items():
hlsurl = value.get('hls')
fmt = {
'url': hlsurl,
'ext': 'mp4',
'quality': 0 if len(formats) == 0 else 0 - len(formats),
'thumbnail': thumbnail,
'format_id': key,
'protocol': 'm3u8_native',
}
formats.append(fmt)
return {
'id': video_id,
'title': item.get('title'),
'formats': formats,
}