mirror of
https://github.com/l1ving/youtube-dl
synced 2024-11-21 00:03:03 +08:00
[lynda] Modernize and make more robust
This commit is contained in:
parent
71bb016160
commit
ea8ed40b2f
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user