1
1
mirror of https://github.com/ytdl-org/youtube-dl synced 2024-12-18 07:37:52 +01:00

[lynda] Modernize and make more robust

This commit is contained in:
Sergey M․ 2015-11-06 23:24:39 +06:00
parent 71bb016160
commit ea8ed40b2f

View File

@ -113,51 +113,47 @@ class LyndaIE(LyndaBaseIE):
def _real_extract(self, url): def _real_extract(self, url):
video_id = self._match_id(url) video_id = self._match_id(url)
page = self._download_webpage( video = self._download_json(
'http://www.lynda.com/ajax/player?videoId=%s&type=video' % video_id, 'http://www.lynda.com/ajax/player?videoId=%s&type=video' % video_id,
video_id, 'Downloading video JSON') video_id, 'Downloading video JSON')
video_json = json.loads(page)
if 'Status' in video_json: if 'Status' in video:
raise ExtractorError( raise ExtractorError(
'lynda returned error: %s' % video_json['Message'], expected=True) 'lynda returned error: %s' % video['Message'], expected=True)
if video_json['HasAccess'] is False: if video.get('HasAccess') is False:
self.raise_login_required('Video %s is only available for members' % video_id) self.raise_login_required('Video %s is only available for members' % video_id)
video_id = compat_str(video_json['ID']) video_id = compat_str(video.get('ID') or video_id)
duration = video_json['DurationInSeconds'] duration = int_or_none(video.get('DurationInSeconds'))
title = video_json['Title'] title = video['Title']
formats = [] formats = []
fmts = video_json.get('Formats') fmts = video.get('Formats')
if fmts: if fmts:
formats.extend([ formats.extend([{
{ 'url': f['Url'],
'url': fmt['Url'], 'ext': f.get('Extension'),
'ext': fmt['Extension'], 'width': int_or_none(f.get('Width')),
'width': fmt['Width'], 'height': int_or_none(f.get('Height')),
'height': fmt['Height'], 'filesize': int_or_none(f.get('FileSize')),
'filesize': fmt['FileSize'], 'format_id': compat_str(f.get('Resolution')) if f.get('Resolution') else None,
'format_id': str(fmt['Resolution']) } for f in fmts if f.get('Url')])
} for fmt in fmts])
prioritized_streams = video_json.get('PrioritizedStreams') prioritized_streams = video.get('PrioritizedStreams')
if prioritized_streams: if prioritized_streams:
for prioritized_stream_id, prioritized_stream in prioritized_streams.items(): for prioritized_stream_id, prioritized_stream in prioritized_streams.items():
formats.extend([ formats.extend([{
{
'url': video_url, 'url': video_url,
'width': int_or_none(format_id), 'width': int_or_none(format_id),
'format_id': '%s-%s' % (prioritized_stream_id, format_id), 'format_id': '%s-%s' % (prioritized_stream_id, format_id),
} for format_id, video_url in prioritized_stream.items() } for format_id, video_url in prioritized_stream.items()])
])
self._check_formats(formats, video_id) self._check_formats(formats, video_id)
self._sort_formats(formats) self._sort_formats(formats)
subtitles = self.extract_subtitles(video_id, page) subtitles = self.extract_subtitles(video_id)
return { return {
'id': video_id, 'id': video_id,
@ -188,7 +184,7 @@ class LyndaIE(LyndaBaseIE):
if srt: if srt:
return srt return srt
def _get_subtitles(self, video_id, webpage): def _get_subtitles(self, video_id):
url = 'http://www.lynda.com/ajax/player?videoId=%s&type=transcript' % video_id url = 'http://www.lynda.com/ajax/player?videoId=%s&type=transcript' % video_id
subs = self._download_json(url, None, False) subs = self._download_json(url, None, False)
if subs: if subs: