diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 3df80bf000..732229c14c 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -552,6 +552,7 @@ from .rbmaradio import RBMARadioIE from .rds import RDSIE from .redtube import RedTubeIE +from .regiotv import RegioTVIE from .restudy import RestudyIE from .reverbnation import ReverbNationIE from .ringtv import RingTVIE diff --git a/youtube_dl/extractor/regiotv.py b/youtube_dl/extractor/regiotv.py new file mode 100644 index 0000000000..a5c21c0855 --- /dev/null +++ b/youtube_dl/extractor/regiotv.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import re + +from .common import InfoExtractor + +from ..utils import ( + sanitized_Request, + xpath_with_ns, +) + + +class RegioTVIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?regio-tv\.de/video/(?P[0-9]+).html' + _TESTS = [ + { + 'url': 'http://www.regio-tv.de/video/395808.html', + 'info_dict': { + 'id': '395808', + 'ext': 'mp4', + 'title': u'Wir in Ludwigsburg', + 'description': u'Mit unseren zuckers\xfc\xdfen Adventskindern, au\xdferdem besuchen wir die Abendsterne!', + } + }, + ] + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('id') + + webpage = self._download_webpage(url, video_id) + key = self._html_search_regex(r''',key: "(.*?)"''', webpage, 'key') + + title = self._html_search_regex( + r'', + webpage, 'title') + + soapxml = '%s' % key + request = sanitized_Request('http://v.telvi.de/?wsdl', soapxml) + request.add_header('Origin', 'http://www.regio-tv.de') + request.add_header('Referer', url) + video_data = self._download_xml(request, video_id, 'video data') + + NS_MAP = { + 'xsi': 'http://www.w3.org/2001/XMLSchema-instance', + 'soap': 'http://schemas.xmlsoap.org/soap/envelope/', + } + + url = video_data.find(xpath_with_ns('.//video', NS_MAP)).text + thumbnail = video_data.find(xpath_with_ns('.//image', NS_MAP)).text + + description = self._html_search_meta('description', webpage) + + return { + 'id': video_id, + 'title': title, + 'url': url, + 'thumbnail': thumbnail, + 'description': description, + }