|
|
@ -22,6 +22,8 @@ from ..utils import (
|
|
|
|
HEADRequest,
|
|
|
|
HEADRequest,
|
|
|
|
is_html,
|
|
|
|
is_html,
|
|
|
|
js_to_json,
|
|
|
|
js_to_json,
|
|
|
|
|
|
|
|
KNOWN_EXTENSIONS,
|
|
|
|
|
|
|
|
mimetype2ext,
|
|
|
|
orderedSet,
|
|
|
|
orderedSet,
|
|
|
|
sanitized_Request,
|
|
|
|
sanitized_Request,
|
|
|
|
smuggle_url,
|
|
|
|
smuggle_url,
|
|
|
@ -1130,6 +1132,22 @@ class GenericIE(InfoExtractor):
|
|
|
|
'skip_download': True,
|
|
|
|
'skip_download': True,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
# Video.js embed
|
|
|
|
|
|
|
|
'url': 'http://ortcam.com/solidworks-урок-6-настройка-чертежа_33f9b7351.html',
|
|
|
|
|
|
|
|
'info_dict': {
|
|
|
|
|
|
|
|
'id': 'yygqldloqIk',
|
|
|
|
|
|
|
|
'ext': 'mp4',
|
|
|
|
|
|
|
|
'title': 'SolidWorks. Урок 6 Настройка чертежа',
|
|
|
|
|
|
|
|
'description': 'md5:baf95267792646afdbf030e4d06b2ab3',
|
|
|
|
|
|
|
|
'upload_date': '20130314',
|
|
|
|
|
|
|
|
'uploader': 'PROстое3D',
|
|
|
|
|
|
|
|
'uploader_id': 'PROstoe3D',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
'params': {
|
|
|
|
|
|
|
|
'skip_download': True,
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
},
|
|
|
|
# rtl.nl embed
|
|
|
|
# rtl.nl embed
|
|
|
|
{
|
|
|
|
{
|
|
|
|
'url': 'http://www.rtlnieuws.nl/nieuws/buitenland/aanslagen-kopenhagen',
|
|
|
|
'url': 'http://www.rtlnieuws.nl/nieuws/buitenland/aanslagen-kopenhagen',
|
|
|
@ -2880,6 +2898,44 @@ class GenericIE(InfoExtractor):
|
|
|
|
jwplayer_data, video_id, require_title=False, base_url=url)
|
|
|
|
jwplayer_data, video_id, require_title=False, base_url=url)
|
|
|
|
return merge_dicts(info, info_dict)
|
|
|
|
return merge_dicts(info, info_dict)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Video.js embed
|
|
|
|
|
|
|
|
mobj = re.search(
|
|
|
|
|
|
|
|
r'(?s)\bvideojs\s*\(.+?\bplayer\.src\s*\(\s*(\[.+?\])\s*\)\s*;',
|
|
|
|
|
|
|
|
webpage)
|
|
|
|
|
|
|
|
if mobj is not None:
|
|
|
|
|
|
|
|
sources = self._parse_json(
|
|
|
|
|
|
|
|
mobj.group(1), video_id, transform_source=js_to_json,
|
|
|
|
|
|
|
|
fatal=False) or []
|
|
|
|
|
|
|
|
formats = []
|
|
|
|
|
|
|
|
for source in sources:
|
|
|
|
|
|
|
|
src = source.get('src')
|
|
|
|
|
|
|
|
if not src or not isinstance(src, compat_str):
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
src = compat_urlparse.urljoin(url, src)
|
|
|
|
|
|
|
|
src_type = source.get('type')
|
|
|
|
|
|
|
|
if isinstance(src_type, compat_str):
|
|
|
|
|
|
|
|
src_type = src_type.lower()
|
|
|
|
|
|
|
|
ext = determine_ext(src).lower()
|
|
|
|
|
|
|
|
if src_type == 'video/youtube':
|
|
|
|
|
|
|
|
return self.url_result(src, YoutubeIE.ie_key())
|
|
|
|
|
|
|
|
if src_type == 'application/dash+xml' or ext == 'mpd':
|
|
|
|
|
|
|
|
formats.extend(self._extract_mpd_formats(
|
|
|
|
|
|
|
|
src, video_id, mpd_id='dash', fatal=False))
|
|
|
|
|
|
|
|
elif src_type == 'application/x-mpegurl' or ext == 'm3u8':
|
|
|
|
|
|
|
|
formats.extend(self._extract_m3u8_formats(
|
|
|
|
|
|
|
|
src, video_id, 'mp4', entry_protocol='m3u8_native',
|
|
|
|
|
|
|
|
m3u8_id='hls', fatal=False))
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
formats.append({
|
|
|
|
|
|
|
|
'url': src,
|
|
|
|
|
|
|
|
'ext': (mimetype2ext(src_type) or
|
|
|
|
|
|
|
|
ext if ext in KNOWN_EXTENSIONS else 'mp4'),
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
if formats:
|
|
|
|
|
|
|
|
self._sort_formats(formats)
|
|
|
|
|
|
|
|
info_dict['formats'] = formats
|
|
|
|
|
|
|
|
return info_dict
|
|
|
|
|
|
|
|
|
|
|
|
# Looking for http://schema.org/VideoObject
|
|
|
|
# Looking for http://schema.org/VideoObject
|
|
|
|
json_ld = self._search_json_ld(
|
|
|
|
json_ld = self._search_json_ld(
|
|
|
|
webpage, video_id, default={}, expected_type='VideoObject')
|
|
|
|
webpage, video_id, default={}, expected_type='VideoObject')
|
|
|
|