[vidio] Support premium videos (#358)

Authored by: MinePlayersPE
This commit is contained in:
MinePlayersPE 2021-05-29 21:54:19 +07:00 committed by GitHub
parent 37a3bb66a7
commit 46c43ffc9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 28 additions and 2 deletions

View File

@ -41,6 +41,10 @@ class VidioIE(InfoExtractor):
}, { }, {
'url': 'https://www.vidio.com/watch/77949-south-korea-test-fires-missile-that-can-strike-all-of-the-north', 'url': 'https://www.vidio.com/watch/77949-south-korea-test-fires-missile-that-can-strike-all-of-the-north',
'only_matching': True, 'only_matching': True,
}, {
# Premier-exclusive video
'url': 'https://www.vidio.com/watch/1550718-stand-by-me-doraemon',
'only_matching': True
}] }]
def _real_initialize(self): def _real_initialize(self):
@ -56,9 +60,30 @@ class VidioIE(InfoExtractor):
}) })
video = data['videos'][0] video = data['videos'][0]
title = video['title'].strip() title = video['title'].strip()
is_premium = video.get('is_premium')
if is_premium:
sources = self._download_json(
'https://www.vidio.com/interactions_stream.json?video_id=%s&type=videos' % video_id,
display_id, note='Downloading premier API JSON')
if not (sources.get('source') or sources.get('source_dash')):
self.raise_login_required(method='cookies')
formats, subs = [], {}
if sources.get('source'):
hls_formats, hls_subs = self._extract_m3u8_formats_and_subtitles(
sources['source'], display_id, 'mp4', 'm3u8_native')
formats.extend(hls_formats)
subs.update(hls_subs)
if sources.get('source_dash'): # TODO: Find video example with source_dash
dash_formats, dash_subs = self._extract_mpd_formats_and_subtitles(
sources['source_dash'], display_id, 'dash')
formats.extend(dash_formats)
subs.update(dash_subs)
else:
hls_url = data['clips'][0]['hls_url']
formats, subs = self._extract_m3u8_formats_and_subtitles(
hls_url, display_id, 'mp4', 'm3u8_native')
formats = self._extract_m3u8_formats(
data['clips'][0]['hls_url'], display_id, 'mp4', 'm3u8_native')
self._sort_formats(formats) self._sort_formats(formats)
get_first = lambda x: try_get(data, lambda y: y[x + 's'][0], dict) or {} get_first = lambda x: try_get(data, lambda y: y[x + 's'][0], dict) or {}
@ -76,6 +101,7 @@ class VidioIE(InfoExtractor):
'duration': int_or_none(video.get('duration')), 'duration': int_or_none(video.get('duration')),
'like_count': get_count('likes'), 'like_count': get_count('likes'),
'formats': formats, 'formats': formats,
'subtitles': subs,
'uploader': user.get('name'), 'uploader': user.get('name'),
'timestamp': parse_iso8601(video.get('created_at')), 'timestamp': parse_iso8601(video.get('created_at')),
'uploader_id': username, 'uploader_id': username,