[videolecturesnet] Use generic SMIL extraction
This commit is contained in:
parent
647eab4541
commit
acfb717a18
1 changed files with 8 additions and 54 deletions
|
@ -1,13 +1,8 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import re
|
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
find_xpath_attr,
|
|
||||||
int_or_none,
|
|
||||||
parse_duration,
|
parse_duration,
|
||||||
unified_strdate,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,58 +24,17 @@ class VideoLecturesNetIE(InfoExtractor):
|
||||||
}
|
}
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
mobj = re.match(self._VALID_URL, url)
|
video_id = self._match_id(url)
|
||||||
video_id = mobj.group('id')
|
|
||||||
|
|
||||||
smil_url = 'http://videolectures.net/%s/video/1/smil.xml' % video_id
|
smil_url = 'http://videolectures.net/%s/video/1/smil.xml' % video_id
|
||||||
smil = self._download_xml(smil_url, video_id)
|
smil = self._download_smil(smil_url, video_id)
|
||||||
|
|
||||||
title = find_xpath_attr(smil, './/meta', 'name', 'title').attrib['content']
|
info = self._parse_smil(smil, smil_url, video_id)
|
||||||
description_el = find_xpath_attr(smil, './/meta', 'name', 'abstract')
|
|
||||||
description = (
|
info['id'] = video_id
|
||||||
None if description_el is None
|
|
||||||
else description_el.attrib['content'])
|
|
||||||
upload_date = unified_strdate(
|
|
||||||
find_xpath_attr(smil, './/meta', 'name', 'date').attrib['content'])
|
|
||||||
|
|
||||||
switch = smil.find('.//switch')
|
switch = smil.find('.//switch')
|
||||||
duration = parse_duration(switch.attrib.get('dur'))
|
if switch is not None:
|
||||||
thumbnail_el = find_xpath_attr(switch, './image', 'type', 'thumbnail')
|
info['duration'] = parse_duration(switch.attrib.get('dur'))
|
||||||
thumbnail = (
|
|
||||||
None if thumbnail_el is None else thumbnail_el.attrib.get('src'))
|
|
||||||
|
|
||||||
formats = []
|
return info
|
||||||
for v in switch.findall('./video'):
|
|
||||||
proto = v.attrib.get('proto')
|
|
||||||
if proto not in ['http', 'rtmp']:
|
|
||||||
continue
|
|
||||||
f = {
|
|
||||||
'width': int_or_none(v.attrib.get('width')),
|
|
||||||
'height': int_or_none(v.attrib.get('height')),
|
|
||||||
'filesize': int_or_none(v.attrib.get('size')),
|
|
||||||
'tbr': int_or_none(v.attrib.get('systemBitrate')) / 1000.0,
|
|
||||||
'ext': v.attrib.get('ext'),
|
|
||||||
}
|
|
||||||
src = v.attrib['src']
|
|
||||||
if proto == 'http':
|
|
||||||
if self._is_valid_url(src, video_id):
|
|
||||||
f['url'] = src
|
|
||||||
formats.append(f)
|
|
||||||
elif proto == 'rtmp':
|
|
||||||
f.update({
|
|
||||||
'url': v.attrib['streamer'],
|
|
||||||
'play_path': src,
|
|
||||||
'rtmp_real_time': True,
|
|
||||||
})
|
|
||||||
formats.append(f)
|
|
||||||
self._sort_formats(formats)
|
|
||||||
|
|
||||||
return {
|
|
||||||
'id': video_id,
|
|
||||||
'title': title,
|
|
||||||
'description': description,
|
|
||||||
'upload_date': upload_date,
|
|
||||||
'duration': duration,
|
|
||||||
'thumbnail': thumbnail,
|
|
||||||
'formats': formats,
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue