|
@@ -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')
|
|
|
|