mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-11-26 20:22:14 +00:00
[viki] Add support for youtube externals
This commit is contained in:
parent
1a83c731bd
commit
ac20d95f97
1 changed files with 48 additions and 22 deletions
|
@ -120,6 +120,23 @@ class VikiIE(VikiBaseIE):
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'age_limit': 13,
|
'age_limit': 13,
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
# youtube external
|
||||||
|
'url': 'http://www.viki.com/videos/50562v-poor-nastya-complete-episode-1',
|
||||||
|
'md5': '216d1afdc0c64d1febc1e9f2bd4b864b',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '50562v',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Poor Nastya [COMPLETE] - Episode 1',
|
||||||
|
'description': '',
|
||||||
|
'duration': 607,
|
||||||
|
'timestamp': 1274949505,
|
||||||
|
'upload_date': '20101213',
|
||||||
|
'uploader': 'ad14065n',
|
||||||
|
'uploader_id': 'ad14065n',
|
||||||
|
'like_count': int,
|
||||||
|
'age_limit': 13,
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
'url': 'http://www.viki.com/player/44699v',
|
'url': 'http://www.viki.com/player/44699v',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
|
@ -128,26 +145,6 @@ class VikiIE(VikiBaseIE):
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
video_id = self._match_id(url)
|
video_id = self._match_id(url)
|
||||||
|
|
||||||
streams = self._call_api(
|
|
||||||
'videos/%s/streams.json' % video_id, video_id,
|
|
||||||
'Downloading video streams JSON')
|
|
||||||
|
|
||||||
formats = []
|
|
||||||
for format_id, stream_dict in streams.items():
|
|
||||||
height = self._search_regex(
|
|
||||||
r'^(\d+)[pP]$', format_id, 'height', default=None)
|
|
||||||
for protocol, format_dict in stream_dict.items():
|
|
||||||
if format_id == 'm3u8':
|
|
||||||
formats = self._extract_m3u8_formats(
|
|
||||||
format_dict['url'], video_id, 'mp4', m3u8_id='m3u8-%s' % protocol)
|
|
||||||
else:
|
|
||||||
formats.append({
|
|
||||||
'url': format_dict['url'],
|
|
||||||
'format_id': '%s-%s' % (format_id, protocol),
|
|
||||||
'height': height,
|
|
||||||
})
|
|
||||||
self._sort_formats(formats)
|
|
||||||
|
|
||||||
video = self._call_api(
|
video = self._call_api(
|
||||||
'videos/%s.json' % video_id, video_id, 'Downloading video JSON')
|
'videos/%s.json' % video_id, video_id, 'Downloading video JSON')
|
||||||
|
|
||||||
|
@ -186,7 +183,7 @@ class VikiIE(VikiBaseIE):
|
||||||
'videos/%s/subtitles/%s.%s' % (video_id, subtitle_lang, subtitles_format)),
|
'videos/%s/subtitles/%s.%s' % (video_id, subtitle_lang, subtitles_format)),
|
||||||
} for subtitles_format in ('srt', 'vtt')]
|
} for subtitles_format in ('srt', 'vtt')]
|
||||||
|
|
||||||
return {
|
result = {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
'title': title,
|
'title': title,
|
||||||
'description': description,
|
'description': description,
|
||||||
|
@ -196,10 +193,39 @@ class VikiIE(VikiBaseIE):
|
||||||
'like_count': like_count,
|
'like_count': like_count,
|
||||||
'age_limit': age_limit,
|
'age_limit': age_limit,
|
||||||
'thumbnails': thumbnails,
|
'thumbnails': thumbnails,
|
||||||
'formats': formats,
|
|
||||||
'subtitles': subtitles,
|
'subtitles': subtitles,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
streams = self._call_api(
|
||||||
|
'videos/%s/streams.json' % video_id, video_id,
|
||||||
|
'Downloading video streams JSON')
|
||||||
|
|
||||||
|
if 'external' in streams:
|
||||||
|
result.update({
|
||||||
|
'_type': 'url_transparent',
|
||||||
|
'url': streams['external']['url'],
|
||||||
|
})
|
||||||
|
return result
|
||||||
|
|
||||||
|
formats = []
|
||||||
|
for format_id, stream_dict in streams.items():
|
||||||
|
height = self._search_regex(
|
||||||
|
r'^(\d+)[pP]$', format_id, 'height', default=None)
|
||||||
|
for protocol, format_dict in stream_dict.items():
|
||||||
|
if format_id == 'm3u8':
|
||||||
|
formats = self._extract_m3u8_formats(
|
||||||
|
format_dict['url'], video_id, 'mp4', m3u8_id='m3u8-%s' % protocol)
|
||||||
|
else:
|
||||||
|
formats.append({
|
||||||
|
'url': format_dict['url'],
|
||||||
|
'format_id': '%s-%s' % (format_id, protocol),
|
||||||
|
'height': height,
|
||||||
|
})
|
||||||
|
self._sort_formats(formats)
|
||||||
|
|
||||||
|
result['formats'] = formats
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class VikiChannelIE(InfoExtractor):
|
class VikiChannelIE(InfoExtractor):
|
||||||
IE_NAME = 'viki:channel'
|
IE_NAME = 'viki:channel'
|
||||||
|
|
Loading…
Reference in a new issue