mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:35:12 +00:00 
			
		
		
		
	[lynda] Modernize and make more robust
This commit is contained in:
		@@ -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:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user