]>
Commit | Line | Data |
---|---|---|
dbda1b51 | 1 | # encoding: utf-8 |
2 | import re | |
3 | ||
4 | from .common import InfoExtractor | |
739674cd PH |
5 | from ..utils import ( |
6 | clean_html, | |
7 | ExtractorError, | |
8 | ) | |
dbda1b51 | 9 | |
10 | class RTLnowIE(InfoExtractor): | |
ce65fb6c | 11 | """Information Extractor for RTL NOW, RTL2 NOW, RTL NITRO, SUPER RTL NOW and VOX NOW""" |
12 | _VALID_URL = r'(?:http://)?(?P<url>(?P<base_url>rtl-now\.rtl\.de/|rtl2now\.rtl2\.de/|(?:www\.)?voxnow\.de/|(?:www\.)?rtlnitronow\.de/|(?:www\.)?superrtlnow\.de/)[a-zA-Z0-9-]+/[a-zA-Z0-9-]+\.php\?(?:container_id|film_id)=(?P<video_id>[0-9]+)&player=1(?:&season=[0-9]+)?(?:&.*)?)' | |
dbda1b51 | 13 | _TESTS = [{ |
14 | u'url': u'http://rtl-now.rtl.de/ahornallee/folge-1.php?film_id=90419&player=1&season=1', | |
15 | u'file': u'90419.flv', | |
16 | u'info_dict': { | |
17 | u'upload_date': u'20070416', | |
18 | u'title': u'Ahornallee - Folge 1 - Der Einzug', | |
19 | u'description': u'Folge 1 - Der Einzug', | |
20 | }, | |
21 | u'params': { | |
22 | u'skip_download': True, | |
23 | }, | |
739674cd | 24 | u'skip': u'Only works from Germany', |
dbda1b51 | 25 | }, |
26 | { | |
27 | u'url': u'http://rtl2now.rtl2.de/aerger-im-revier/episode-15-teil-1.php?film_id=69756&player=1&season=2&index=5', | |
28 | u'file': u'69756.flv', | |
29 | u'info_dict': { | |
30 | u'upload_date': u'20120519', | |
31 | u'title': u'Ärger im Revier - Ein junger Ladendieb, ein handfester Streit...', | |
32 | u'description': u'Ärger im Revier - Ein junger Ladendieb, ein handfester Streit u.a.', | |
33 | u'thumbnail': u'http://autoimg.static-fra.de/rtl2now/219850/1500x1500/image2.jpg', | |
34 | }, | |
35 | u'params': { | |
36 | u'skip_download': True, | |
37 | }, | |
739674cd | 38 | u'skip': u'Only works from Germany', |
ea55b2a4 | 39 | }, |
40 | { | |
41 | u'url': u'www.voxnow.de/voxtours/suedafrika-reporter-ii.php?film_id=13883&player=1&season=17', | |
42 | u'file': u'13883.flv', | |
43 | u'info_dict': { | |
44 | u'upload_date': u'20090627', | |
45 | u'title': u'Voxtours - Südafrika-Reporter II', | |
46 | u'description': u'Südafrika-Reporter II', | |
47 | }, | |
48 | u'params': { | |
49 | u'skip_download': True, | |
50 | }, | |
d68730a5 | 51 | }, |
52 | { | |
53 | u'url': u'http://superrtlnow.de/medicopter-117/angst.php?film_id=99205&player=1', | |
54 | u'file': u'99205.flv', | |
55 | u'info_dict': { | |
56 | u'upload_date': u'20080928', | |
57 | u'title': u'Medicopter 117 - Angst!', | |
58 | u'description': u'Angst!', | |
59 | u'thumbnail': u'http://autoimg.static-fra.de/superrtlnow/287529/1500x1500/image2.jpg' | |
60 | }, | |
61 | u'params': { | |
62 | u'skip_download': True, | |
63 | }, | |
ce65fb6c | 64 | }, |
65 | { | |
722076a1 JMF |
66 | u'url': u'http://www.rtlnitronow.de/recht-ordnung/lebensmittelkontrolle-erlangenordnungsamt-berlin.php?film_id=127367&player=1&season=1', |
67 | u'file': u'127367.flv', | |
ce65fb6c | 68 | u'info_dict': { |
722076a1 JMF |
69 | u'upload_date': u'20130926', |
70 | u'title': u'Recht & Ordnung - Lebensmittelkontrolle Erlangen/Ordnungsamt...', | |
71 | u'description': u'Lebensmittelkontrolle Erlangen/Ordnungsamt Berlin', | |
72 | u'thumbnail': u'http://autoimg.static-fra.de/nitronow/344787/1500x1500/image2.jpg', | |
ce65fb6c | 73 | }, |
74 | u'params': { | |
75 | u'skip_download': True, | |
76 | }, | |
ea55b2a4 | 77 | }] |
dbda1b51 | 78 | |
79 | def _real_extract(self,url): | |
80 | mobj = re.match(self._VALID_URL, url) | |
81 | ||
82 | webpage_url = u'http://' + mobj.group('url') | |
83 | video_page_url = u'http://' + mobj.group('base_url') | |
84 | video_id = mobj.group(u'video_id') | |
85 | ||
86 | webpage = self._download_webpage(webpage_url, video_id) | |
739674cd PH |
87 | |
88 | note_m = re.search(r'''(?sx) | |
89 | <div[ ]style="margin-left:[ ]20px;[ ]font-size:[ ]13px;">(.*?) | |
90 | <div[ ]id="playerteaser">''', webpage) | |
91 | if note_m: | |
92 | msg = clean_html(note_m.group(1)) | |
93 | raise ExtractorError(msg) | |
94 | ||
63efc427 | 95 | video_title = self._html_search_regex(r'<title>(?P<title>[^<]+?)( \| [^<]*)?</title>', |
dbda1b51 | 96 | webpage, u'title') |
97 | playerdata_url = self._html_search_regex(r'\'playerdata\': \'(?P<playerdata_url>[^\']+)\'', | |
98 | webpage, u'playerdata_url') | |
99 | ||
100 | playerdata = self._download_webpage(playerdata_url, video_id) | |
101 | mobj = re.search(r'<title><!\[CDATA\[(?P<description>.+?)\s+- (?:Sendung )?vom (?P<upload_date_d>[0-9]{2})\.(?P<upload_date_m>[0-9]{2})\.(?:(?P<upload_date_Y>[0-9]{4})|(?P<upload_date_y>[0-9]{2})) [0-9]{2}:[0-9]{2} Uhr\]\]></title>', playerdata) | |
102 | if mobj: | |
103 | video_description = mobj.group(u'description') | |
104 | if mobj.group('upload_date_Y'): | |
105 | video_upload_date = mobj.group('upload_date_Y') | |
106 | else: | |
107 | video_upload_date = u'20' + mobj.group('upload_date_y') | |
108 | video_upload_date += mobj.group('upload_date_m')+mobj.group('upload_date_d') | |
109 | else: | |
110 | video_description = None | |
111 | video_upload_date = None | |
112 | self._downloader.report_warning(u'Unable to extract description and upload date') | |
113 | ||
114 | # Thumbnail: not every video has an thumbnail | |
115 | mobj = re.search(r'<meta property="og:image" content="(?P<thumbnail>[^"]+)">', webpage) | |
116 | if mobj: | |
117 | video_thumbnail = mobj.group(u'thumbnail') | |
118 | else: | |
119 | video_thumbnail = None | |
120 | ||
121 | mobj = re.search(r'<filename [^>]+><!\[CDATA\[(?P<url>rtmpe://(?:[^/]+/){2})(?P<play_path>[^\]]+)\]\]></filename>', playerdata) | |
122 | if mobj is None: | |
123 | raise ExtractorError(u'Unable to extract media URL') | |
124 | video_url = mobj.group(u'url') | |
125 | video_play_path = u'mp4:' + mobj.group(u'play_path') | |
126 | video_player_url = video_page_url + u'includes/vodplayer.swf' | |
127 | ||
128 | return [{ | |
129 | 'id': video_id, | |
130 | 'url': video_url, | |
131 | 'play_path': video_play_path, | |
132 | 'page_url': video_page_url, | |
133 | 'player_url': video_player_url, | |
134 | 'ext': 'flv', | |
135 | 'title': video_title, | |
136 | 'description': video_description, | |
137 | 'upload_date': video_upload_date, | |
138 | 'thumbnail': video_thumbnail, | |
139 | }] |