mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 04:57:07 -05:00 
			
		
		
		
	[channel9] Extract more formats
This commit is contained in:
		@@ -9,6 +9,7 @@ from ..utils import (
 | 
			
		||||
    int_or_none,
 | 
			
		||||
    parse_iso8601,
 | 
			
		||||
    clean_html,
 | 
			
		||||
    qualities,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -120,22 +121,75 @@ class Channel9IE(InfoExtractor):
 | 
			
		||||
            content_data = self._download_json(content_url, content_id)
 | 
			
		||||
            title = content_data['Title']
 | 
			
		||||
 | 
			
		||||
            QUALITIES = (
 | 
			
		||||
                'mp3',
 | 
			
		||||
                'wmv', 'mp4',
 | 
			
		||||
                'wmv-low', 'mp4-low',
 | 
			
		||||
                'wmv-mid', 'mp4-mid',
 | 
			
		||||
                'wmv-high', 'mp4-high',
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            quality_key = qualities(QUALITIES)
 | 
			
		||||
 | 
			
		||||
            def quality(quality_id, format_url):
 | 
			
		||||
                return (len(QUALITIES) if '_Source.' in format_url
 | 
			
		||||
                        else quality_key(quality_id))
 | 
			
		||||
 | 
			
		||||
            formats = []
 | 
			
		||||
            qualities = [
 | 
			
		||||
                'VideoMP4Low',
 | 
			
		||||
                'VideoWMV',
 | 
			
		||||
                'VideoMP4Medium',
 | 
			
		||||
                'VideoMP4High',
 | 
			
		||||
                'VideoWMVHQ',
 | 
			
		||||
            ]
 | 
			
		||||
            for q in qualities:
 | 
			
		||||
                q_url = content_data.get(q)
 | 
			
		||||
                if not q_url:
 | 
			
		||||
            urls = set()
 | 
			
		||||
 | 
			
		||||
            SITE_QUALITIES = {
 | 
			
		||||
                'MP3': 'mp3',
 | 
			
		||||
                'MP4': 'mp4',
 | 
			
		||||
                'Low Quality WMV': 'wmv-low',
 | 
			
		||||
                'Low Quality MP4': 'mp4-low',
 | 
			
		||||
                'Mid Quality WMV': 'wmv-mid',
 | 
			
		||||
                'Mid Quality MP4': 'mp4-mid',
 | 
			
		||||
                'High Quality WMV': 'wmv-high',
 | 
			
		||||
                'High Quality MP4': 'mp4-high',
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            formats_select = self._search_regex(
 | 
			
		||||
                r'(?s)<select[^>]+name=["\']format[^>]+>(.+?)</select', webpage,
 | 
			
		||||
                'formats select', default=None)
 | 
			
		||||
            if formats_select:
 | 
			
		||||
                for mobj in re.finditer(
 | 
			
		||||
                        r'<option\b[^>]+\bvalue=(["\'])(?P<url>(?:(?!\1).)+)\1[^>]*>\s*(?P<format>[^<]+?)\s*<',
 | 
			
		||||
                        formats_select):
 | 
			
		||||
                    format_url = mobj.group('url')
 | 
			
		||||
                    if format_url in urls:
 | 
			
		||||
                        continue
 | 
			
		||||
                    urls.add(format_url)
 | 
			
		||||
                    format_id = mobj.group('format')
 | 
			
		||||
                    quality_id = SITE_QUALITIES.get(format_id, format_id)
 | 
			
		||||
                    formats.append({
 | 
			
		||||
                        'url': format_url,
 | 
			
		||||
                        'format_id': quality_id,
 | 
			
		||||
                        'quality': quality(quality_id, format_url),
 | 
			
		||||
                        'vcodec': 'none' if quality_id == 'mp3' else None,
 | 
			
		||||
                    })
 | 
			
		||||
 | 
			
		||||
            API_QUALITIES = {
 | 
			
		||||
                'VideoMP4Low': 'mp4-low',
 | 
			
		||||
                'VideoWMV': 'wmv-mid',
 | 
			
		||||
                'VideoMP4Medium': 'mp4-mid',
 | 
			
		||||
                'VideoMP4High': 'mp4-high',
 | 
			
		||||
                'VideoWMVHQ': 'wmv-hq',
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            for format_id, q in API_QUALITIES.items():
 | 
			
		||||
                q_url = content_data.get(format_id)
 | 
			
		||||
                if not q_url or q_url in urls:
 | 
			
		||||
                    continue
 | 
			
		||||
                urls.add(q_url)
 | 
			
		||||
                formats.append({
 | 
			
		||||
                    'format_id': q,
 | 
			
		||||
                    'url': q_url,
 | 
			
		||||
                    'format_id': q,
 | 
			
		||||
                    'quality': quality(q, q_url),
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
            self._sort_formats(formats)
 | 
			
		||||
 | 
			
		||||
            slides = content_data.get('Slides')
 | 
			
		||||
            zip_file = content_data.get('ZipFile')
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user