From df2dedeefba281e37bbdae5534a3360320259b22 Mon Sep 17 00:00:00 2001 From: Michael Walter Date: Sun, 7 Apr 2013 15:23:48 +0200 Subject: [PATCH] added ARD InfoExtractor (german state television) --- youtube_dl/InfoExtractors.py | 37 ++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py index aa8074a9e7..3d8145e162 100755 --- a/youtube_dl/InfoExtractors.py +++ b/youtube_dl/InfoExtractors.py @@ -4356,6 +4356,42 @@ class LiveLeakIE(InfoExtractor): return [info] +class ARDIE(InfoExtractor): + IE_NAME = 'ard' + _VALID_URL = r'^(?:http?://)?mediathek\.daserste\.de/(?:.*/)(?P[^/\?]+)(?:\?.*)?' + _TITLE = r'

(?P.*)</h1>' + _MEDIA_STREAM = r'mediaCollection\.addMediaStream\((?P<media_type>\d+), (?P<quality>\d+), "(?P<rtmp_url>[^"]*)", "(?P<video_url>[^"]*)", "[^"]*"\)' + + def _real_extract(self, url): + # determine video id from url + m = re.match(self._VALID_URL, url) + video_id = m.group('video_id') + + # determine title and media streams from webpage + html = self._download_webpage(url, video_id) + title = re.search(self._TITLE, html).group('title') + streams = [m.groupdict() for m in re.finditer(self._MEDIA_STREAM, html)] + if not streams: + assert '"fsk"' in html + self._downloader.report_error(u'this video is only available after 8:00 pm') + return + + # choose default media type and highest quality for now + stream = max([s for s in streams if int(s["media_type"]) == 0], key=lambda s: int(s["quality"])) + #stream = streams[-1] + + # there's two possibilities: RTMP stream or HTTP download + info = {'id': video_id, 'title': title, 'ext': 'mp4'} + if stream['rtmp_url']: + self._downloader.to_screen(u'[%s] RTMP download detected' % self.IE_NAME) + assert stream['video_url'].startswith('mp4:') + info["url"] = stream["rtmp_url"] + info["play_path"] = stream['video_url'] + else: + assert stream["video_url"].endswith('.mp4') + info["url"] = stream["video_url"] + return [info] + def gen_extractors(): """ Return a list of an instance of every supported extractor. @@ -4409,5 +4445,6 @@ def gen_extractors(): MySpassIE(), SpiegelIE(), LiveLeakIE(), + ARDIE(), GenericIE() ]