diff options
| author | Sergey M․ <dstftw@gmail.com> | 2015-11-06 23:24:39 +0600 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2015-11-06 23:24:39 +0600 | 
| commit | ea8ed40b2fb70fc2f01aba475128821078873d46 (patch) | |
| tree | c2c380fef319f6df570dea92323b7d0999c390fc | |
| parent | 71bb016160744a80fecaadf5b75b0dc2b1e8089b (diff) | |
[lynda] Modernize and make more robust
| -rw-r--r-- | youtube_dl/extractor/lynda.py | 54 | 
1 files changed, 25 insertions, 29 deletions
| diff --git a/youtube_dl/extractor/lynda.py b/youtube_dl/extractor/lynda.py index 98474ded9..c8a16842e 100644 --- a/youtube_dl/extractor/lynda.py +++ b/youtube_dl/extractor/lynda.py @@ -113,51 +113,47 @@ class LyndaIE(LyndaBaseIE):      def _real_extract(self, 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,              video_id, 'Downloading video JSON') -        video_json = json.loads(page) -        if 'Status' in video_json: +        if 'Status' in video:              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) -        video_id = compat_str(video_json['ID']) -        duration = video_json['DurationInSeconds'] -        title = video_json['Title'] +        video_id = compat_str(video.get('ID') or video_id) +        duration = int_or_none(video.get('DurationInSeconds')) +        title = video['Title']          formats = [] -        fmts = video_json.get('Formats') +        fmts = video.get('Formats')          if fmts: -            formats.extend([ -                { -                    'url': fmt['Url'], -                    'ext': fmt['Extension'], -                    'width': fmt['Width'], -                    'height': fmt['Height'], -                    'filesize': fmt['FileSize'], -                    'format_id': str(fmt['Resolution']) -                } for fmt in fmts]) - -        prioritized_streams = video_json.get('PrioritizedStreams') +            formats.extend([{ +                'url': f['Url'], +                'ext': f.get('Extension'), +                'width': int_or_none(f.get('Width')), +                'height': int_or_none(f.get('Height')), +                'filesize': int_or_none(f.get('FileSize')), +                'format_id': compat_str(f.get('Resolution')) if f.get('Resolution') else None, +            } for f in fmts if f.get('Url')]) + +        prioritized_streams = video.get('PrioritizedStreams')          if prioritized_streams:              for prioritized_stream_id, prioritized_stream in prioritized_streams.items(): -                formats.extend([ -                    { -                        'url': video_url, -                        'width': int_or_none(format_id), -                        'format_id': '%s-%s' % (prioritized_stream_id, format_id), -                    } for format_id, video_url in prioritized_stream.items() -                ]) +                formats.extend([{ +                    'url': video_url, +                    'width': int_or_none(format_id), +                    'format_id': '%s-%s' % (prioritized_stream_id, format_id), +                } for format_id, video_url in prioritized_stream.items()])          self._check_formats(formats, video_id)          self._sort_formats(formats) -        subtitles = self.extract_subtitles(video_id, page) +        subtitles = self.extract_subtitles(video_id)          return {              'id': video_id, @@ -188,7 +184,7 @@ class LyndaIE(LyndaBaseIE):          if 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          subs = self._download_json(url, None, False)          if subs: | 
