1 from .common
import InfoExtractor
8 class RtlNlIE(InfoExtractor
):
10 IE_DESC
= 'rtl.nl and rtlxl.nl'
12 https?://(?:(?:www|static)\.)?
14 rtlxl\.nl/(?:[^\#]*\#!|programma)/[^/]+/|
15 rtl\.nl/(?:(?:system/videoplayer/(?:[^/]+/)+(?:video_)?embed\.html|embed)\b.+?\buuid=|video/)|
16 embed\.rtl\.nl/\#uuid=
22 'url': 'https://www.rtlxl.nl/programma/rtl-nieuws/0bd1384d-d970-3086-98bb-5c104e10c26f',
23 'md5': '490428f1187b60d714f34e1f2e3af0b6',
25 'id': '0bd1384d-d970-3086-98bb-5c104e10c26f',
27 'title': 'RTL Nieuws',
28 'description': 'md5:d41d8cd98f00b204e9800998ecf8427e',
29 'timestamp': 1593293400,
30 'upload_date': '20200627',
35 'url': 'http://www.rtlxl.nl/#!/rtl-nieuws-132237/82b1aad1-4a14-3d7b-b554-b0aed1b2c416',
36 'md5': '473d1946c1fdd050b2c0161a4b13c373',
38 'id': '82b1aad1-4a14-3d7b-b554-b0aed1b2c416',
40 'title': 'RTL Nieuws',
41 'description': 'md5:d41d8cd98f00b204e9800998ecf8427e',
42 'timestamp': 1461951000,
43 'upload_date': '20160429',
48 # best format available a3t
49 'url': 'http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed/autoplay=false',
50 'md5': 'dea7474214af1271d91ef332fb8be7ea',
52 'id': '84ae5571-ac25-4225-ae0c-ef8d9efb2aed',
54 'timestamp': 1424039400,
55 'title': 'RTL Nieuws - Nieuwe beelden Kopenhagen: chaos direct na aanslag',
56 'thumbnail': r
're:^https?://screenshots\.rtl\.nl/(?:[^/]+/)*sz=[0-9]+x[0-9]+/uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed$',
57 'upload_date': '20150215',
58 'description': 'Er zijn nieuwe beelden vrijgegeven die vlak na de aanslag in Kopenhagen zijn gemaakt. Op de video is goed te zien hoe omstanders zich bekommeren om één van de slachtoffers, terwijl de eerste agenten ter plaatse komen.',
61 # empty synopsis and missing episodes (see https://github.com/ytdl-org/youtube-dl/issues/6275)
62 # best format available nettv
63 'url': 'http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=f536aac0-1dc3-4314-920e-3bd1c5b3811a/autoplay=false',
65 'id': 'f536aac0-1dc3-4314-920e-3bd1c5b3811a',
67 'title': 'RTL Nieuws - Meer beelden van overval juwelier',
68 'thumbnail': r
're:^https?://screenshots\.rtl\.nl/(?:[^/]+/)*sz=[0-9]+x[0-9]+/uuid=f536aac0-1dc3-4314-920e-3bd1c5b3811a$',
69 'timestamp': 1437233400,
70 'upload_date': '20150718',
74 'skip_download': True,
77 # encrypted m3u8 streams, georestricted
78 'url': 'http://www.rtlxl.nl/#!/afl-2-257632/52a74543-c504-4cde-8aa8-ec66fe8d68a7',
79 'only_matching': True,
81 'url': 'http://www.rtl.nl/system/videoplayer/derden/embed.html#!/uuid=bb0353b0-d6a4-1dad-90e9-18fe75b8d1f0',
82 'only_matching': True,
84 'url': 'http://rtlxl.nl/?_ga=1.204735956.572365465.1466978370#!/rtl-nieuws-132237/3c487912-023b-49ac-903e-2c5d79f8410f',
85 'only_matching': True,
87 'url': 'https://www.rtl.nl/video/c603c9c2-601d-4b5e-8175-64f1e942dc7d/',
88 'only_matching': True,
90 'url': 'https://static.rtl.nl/embed/?uuid=1a2970fc-5c0b-43ff-9fdc-927e39e6d1bc&autoplay=false&publicatiepunt=rtlnieuwsnl',
91 'only_matching': True,
93 # new embed URL schema
94 'url': 'https://embed.rtl.nl/#uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed/autoplay=false',
95 'only_matching': True,
98 def _real_extract(self
, url
):
99 uuid
= self
._match
_id
(url
)
100 info
= self
._download
_json
(
101 'http://www.rtl.nl/system/s4m/vfd/version=2/uuid=%s/fmt=adaptive/' % uuid
,
104 material
= info
['material'][0]
105 title
= info
['abstracts'][0]['name']
106 subtitle
= material
.get('title')
108 title
+= ' - %s' % subtitle
109 description
= material
.get('synopsis')
111 meta
= info
.get('meta', {})
113 videopath
= material
['videopath']
114 m3u8_url
= meta
.get('videohost', 'http://manifest.us.rtl.nl') + videopath
116 formats
= self
._extract
_m
3u8_formats
(
117 m3u8_url
, uuid
, 'mp4', m3u8_id
='hls', fatal
=False)
118 self
._sort
_formats
(formats
)
122 for p
in ('poster_base_url', '"thumb_base_url"'):
127 'url': self
._proto
_relative
_url
(meta
[p
] + uuid
),
128 'width': int_or_none(self
._search
_regex
(
129 r
'/sz=([0-9]+)', meta
[p
], 'thumbnail width', fatal
=False)),
130 'height': int_or_none(self
._search
_regex
(
131 r
'/sz=[0-9]+x([0-9]+)',
132 meta
[p
], 'thumbnail height', fatal
=False))
139 'timestamp': material
['original_date'],
140 'description': description
,
141 'duration': parse_duration(material
.get('duration')),
142 'thumbnails': thumbnails
,
146 class RTLLuBaseIE(InfoExtractor
):
148 'video': r
'<rtl-player\s[^>]*\bhls\s*=\s*"([^"]+)',
149 'audio': r
'<rtl-audioplayer\s[^>]*\bsrc\s*=\s*"([^"]+)',
150 'thumbnail': r
'<rtl-player\s[^>]*\bposter\s*=\s*"([^"]+)',
153 def get_media_url(self
, webpage
, video_id
, media_type
):
154 return self
._search
_regex
(self
._MEDIA
_REGEX
[media_type
], webpage
, f
'{media_type} url', default
=None)
156 def get_formats_and_subtitles(self
, webpage
, video_id
):
157 video_url
, audio_url
= self
.get_media_url(webpage
, video_id
, 'video'), self
.get_media_url(webpage
, video_id
, 'audio')
159 formats
, subtitles
= [], {}
160 if video_url
is not None:
161 formats
, subtitles
= self
._extract
_m
3u8_formats
_and
_subtitles
(video_url
, video_id
)
162 if audio_url
is not None:
163 formats
.append({'url': audio_url, 'ext': 'mp3', 'vcodec': 'none'}
)
165 return formats
, subtitles
167 def _real_extract(self
, url
):
168 video_id
= self
._match
_id
(url
)
169 is_live
= video_id
in ('live', 'live-2', 'lauschteren')
171 # TODO: extract comment from https://www.rtl.lu/comments?status=1&order=desc&context=news|article|<video_id>
172 # we can context from <rtl-comments context=<context> in webpage
173 webpage
= self
._download
_webpage
(url
, video_id
)
175 formats
, subtitles
= self
.get_formats_and_subtitles(webpage
, video_id
)
176 self
._sort
_formats
(formats
)
180 'title': self
._og
_search
_title
(webpage
),
181 'description': self
._og
_search
_description
(webpage
, default
=None),
183 'subtitles': subtitles
,
184 'thumbnail': self
.get_media_url(webpage
, video_id
, 'thumbnail') or self
._og
_search
_thumbnail
(webpage
, default
=None),
189 class RTLLuTeleVODIE(RTLLuBaseIE
):
190 IE_NAME
= 'rtl.lu:tele-vod'
191 _VALID_URL
= r
'https?://(?:www\.)?rtl\.lu/(tele/(?P<slug>[\w-]+)/v/|video/)(?P<id>\d+)(\.html)?'
193 'url': 'https://www.rtl.lu/tele/de-journal-vun-der-tele/v/3266757.html',
196 'title': 'Informatiounsversammlung Héichwaasser',
198 'thumbnail': 'https://replay-assets.rtl.lu/2021/11/16/d3647fc4-470d-11ec-adc2-3a00abd6e90f_00008.jpg',
199 'description': 'md5:b1db974408cc858c9fd241812e4a2a14',
202 'url': 'https://www.rtl.lu/video/3295215',
205 'title': 'Kulturassisen iwwer d\'Bestandsopnam vum Lëtzebuerger Konscht',
207 'thumbnail': 'https://replay-assets.rtl.lu/2022/06/28/0000_3295215_0000.jpg',
208 'description': 'md5:85bcd4e0490aa6ec969d9bf16927437b',
213 class RTLLuArticleIE(RTLLuBaseIE
):
214 IE_NAME
= 'rtl.lu:article'
215 _VALID_URL
= r
'https?://(?:(www|5minutes|today)\.)rtl\.lu/(?:[\w-]+)/(?:[\w-]+)/a/(?P<id>\d+)\.html'
218 'url': 'https://www.rtl.lu/sport/news/a/1934360.html',
222 'thumbnail': 'https://static.rtl.lu/rtl2008.lu/nt/p/2022/06/28/19/e4b37d66ddf00bab4c45617b91a5bb9b.jpeg',
223 'description': 'md5:5eab4a2a911c1fff7efc1682a38f9ef7',
224 'title': 'md5:40aa85f135578fbd549d3c9370321f99',
228 'url': 'https://5minutes.rtl.lu/espace-frontaliers/frontaliers-en-questions/a/1853173.html',
232 'description': 'md5:ac031da0740e997a5cf4633173634fee',
233 'title': 'md5:87e17722ed21af0f24be3243f4ec0c46',
234 'thumbnail': 'https://replay-assets.rtl.lu/2022/01/26/screenshot_20220126104933_3274749_12b249833469b0d6e4440a1dec83cdfa.jpg',
238 'url': 'https://today.rtl.lu/entertainment/news/a/1936203.html',
242 'title': 'Once Upon A Time...zu Lëtzebuerg: The Three Witches\' Tower',
243 'description': 'The witchy theme continues in the latest episode of Once Upon A Time...',
244 'thumbnail': 'https://replay-assets.rtl.lu/2022/07/02/screenshot_20220702122859_3290019_412dc5185951b7f6545a4039c8be9235.jpg',
249 class RTLLuLiveIE(RTLLuBaseIE
):
250 _VALID_URL
= r
'https?://www\.rtl\.lu/(?:tele|radio)/(?P<id>live(?:-\d+)?|lauschteren)'
253 'url': 'https://www.rtl.lu/tele/live',
257 'live_status': 'is_live',
258 'title': r
're:RTL - Télé LIVE \d{4}-\d{2}-\d{2} \d{2}:\d{2}',
259 'thumbnail': 'https://static.rtl.lu/livestream/channel1.jpg',
263 'url': 'https://www.rtl.lu/tele/live-2',
267 'live_status': 'is_live',
268 'title': r
're:RTL - Télé LIVE \d{4}-\d{2}-\d{2} \d{2}:\d{2}',
269 'thumbnail': 'https://static.rtl.lu/livestream/channel2.jpg',
273 'url': 'https://www.rtl.lu/radio/lauschteren',
277 'live_status': 'is_live',
278 'title': r
're:RTL - Radio LIVE \d{4}-\d{2}-\d{2} \d{2}:\d{2}',
279 'thumbnail': 'https://static.rtl.lu/livestream/rtlradiowebtv.jpg',
284 class RTLLuRadioIE(RTLLuBaseIE
):
285 _VALID_URL
= r
'https?://www\.rtl\.lu/radio/(?:[\w-]+)/s/(?P<id>\d+)(\.html)?'
287 'url': 'https://www.rtl.lu/radio/5-vir-12/s/4033058.html',
291 'description': 'md5:f855a4f3e3235393ae47ed1db5d934b9',
292 'title': '5 vir 12 - Stau um Stau',
293 'thumbnail': 'https://static.rtl.lu/rtlg//2022/06/24/c9c19e5694a14be46a3647a3760e1f62.jpg',