1 from __future__ import unicode_literals
5 from .common import InfoExtractor
11 class MDRIE(InfoExtractor):
12 _VALID_URL = r'^(?P<domain>https?://(?:www\.)?mdr\.de)/(?:.*)/(?P<type>video|audio)(?P<video_id>[^/_]+)(?:_|\.html)'
14 # No tests, MDR regularily deletes its videos
16 'url': 'http://www.mdr.de/fakt/video189002.html',
17 'only_matching': True,
20 def _real_extract(self, url):
21 m = re.match(self._VALID_URL, url)
22 video_id = m.group('video_id')
23 domain = m.group('domain')
25 # determine title and media streams from webpage
26 html = self._download_webpage(url, video_id)
28 title = self._html_search_regex(r'<h[12]>(.*?)</h[12]>', html, 'title')
29 xmlurl = self._search_regex(
30 r'dataURL:\'(/(?:.+)/(?:video|audio)[0-9]+-avCustom.xml)', html, 'XML URL')
32 doc = self._download_xml(domain + xmlurl, video_id)
34 for a in doc.findall('./assets/asset'):
35 url_el = a.find('.//progressiveDownloadUrl')
38 abr = int(a.find('bitrateAudio').text) // 1000
39 media_type = a.find('mediaType').text
42 'filesize': int(a.find('fileSize').text),
46 vbr_el = a.find('bitrateVideo')
50 'format_id': '%s-%d' % (media_type, abr),
53 vbr = int(vbr_el.text) // 1000
56 'width': int(a.find('frameWidth').text),
57 'height': int(a.find('frameHeight').text),
58 'format_id': '%s-%d' % (media_type, vbr),
60 formats.append(format)
61 self._sort_formats(formats)