2 from __future__ import unicode_literals
4 from .common import InfoExtractor
11 class RtlNlIE(InfoExtractor):
13 IE_DESC = 'rtl.nl and rtlxl.nl'
15 https?://(?:(?:www|static)\.)?
17 rtlxl\.nl/(?:[^\#]*\#!|programma)/[^/]+/|
18 rtl\.nl/(?:(?:system/videoplayer/(?:[^/]+/)+(?:video_)?embed\.html|embed)\b.+?\buuid=|video/)
24 'url': 'https://www.rtlxl.nl/programma/rtl-nieuws/0bd1384d-d970-3086-98bb-5c104e10c26f',
25 'md5': '490428f1187b60d714f34e1f2e3af0b6',
27 'id': '0bd1384d-d970-3086-98bb-5c104e10c26f',
29 'title': 'RTL Nieuws',
30 'description': 'md5:d41d8cd98f00b204e9800998ecf8427e',
31 'timestamp': 1593293400,
32 'upload_date': '20200627',
37 'url': 'http://www.rtlxl.nl/#!/rtl-nieuws-132237/82b1aad1-4a14-3d7b-b554-b0aed1b2c416',
38 'md5': '473d1946c1fdd050b2c0161a4b13c373',
40 'id': '82b1aad1-4a14-3d7b-b554-b0aed1b2c416',
42 'title': 'RTL Nieuws',
43 'description': 'md5:d41d8cd98f00b204e9800998ecf8427e',
44 'timestamp': 1461951000,
45 'upload_date': '20160429',
50 # best format available a3t
51 'url': 'http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed/autoplay=false',
52 'md5': 'dea7474214af1271d91ef332fb8be7ea',
54 'id': '84ae5571-ac25-4225-ae0c-ef8d9efb2aed',
56 'timestamp': 1424039400,
57 'title': 'RTL Nieuws - Nieuwe beelden Kopenhagen: chaos direct na aanslag',
58 'thumbnail': r're:^https?://screenshots\.rtl\.nl/(?:[^/]+/)*sz=[0-9]+x[0-9]+/uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed$',
59 'upload_date': '20150215',
60 '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.',
63 # empty synopsis and missing episodes (see https://github.com/ytdl-org/youtube-dl/issues/6275)
64 # best format available nettv
65 'url': 'http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=f536aac0-1dc3-4314-920e-3bd1c5b3811a/autoplay=false',
67 'id': 'f536aac0-1dc3-4314-920e-3bd1c5b3811a',
69 'title': 'RTL Nieuws - Meer beelden van overval juwelier',
70 'thumbnail': r're:^https?://screenshots\.rtl\.nl/(?:[^/]+/)*sz=[0-9]+x[0-9]+/uuid=f536aac0-1dc3-4314-920e-3bd1c5b3811a$',
71 'timestamp': 1437233400,
72 'upload_date': '20150718',
76 'skip_download': True,
79 # encrypted m3u8 streams, georestricted
80 'url': 'http://www.rtlxl.nl/#!/afl-2-257632/52a74543-c504-4cde-8aa8-ec66fe8d68a7',
81 'only_matching': True,
83 'url': 'http://www.rtl.nl/system/videoplayer/derden/embed.html#!/uuid=bb0353b0-d6a4-1dad-90e9-18fe75b8d1f0',
84 'only_matching': True,
86 'url': 'http://rtlxl.nl/?_ga=1.204735956.572365465.1466978370#!/rtl-nieuws-132237/3c487912-023b-49ac-903e-2c5d79f8410f',
87 'only_matching': True,
89 'url': 'https://www.rtl.nl/video/c603c9c2-601d-4b5e-8175-64f1e942dc7d/',
90 'only_matching': True,
92 'url': 'https://static.rtl.nl/embed/?uuid=1a2970fc-5c0b-43ff-9fdc-927e39e6d1bc&autoplay=false&publicatiepunt=rtlnieuwsnl',
93 'only_matching': True,
96 def _real_extract(self, url):
97 uuid = self._match_id(url)
98 info = self._download_json(
99 'http://www.rtl.nl/system/s4m/vfd/version=2/uuid=%s/fmt=adaptive/' % uuid,
102 material = info['material'][0]
103 title = info['abstracts'][0]['name']
104 subtitle = material.get('title')
106 title += ' - %s' % subtitle
107 description = material.get('synopsis')
109 meta = info.get('meta', {})
111 videopath = material['videopath']
112 m3u8_url = meta.get('videohost', 'http://manifest.us.rtl.nl') + videopath
114 formats = self._extract_m3u8_formats(
115 m3u8_url, uuid, 'mp4', m3u8_id='hls', fatal=False)
116 self._sort_formats(formats)
120 for p in ('poster_base_url', '"thumb_base_url"'):
125 'url': self._proto_relative_url(meta[p] + uuid),
126 'width': int_or_none(self._search_regex(
127 r'/sz=([0-9]+)', meta[p], 'thumbnail width', fatal=False)),
128 'height': int_or_none(self._search_regex(
129 r'/sz=[0-9]+x([0-9]+)',
130 meta[p], 'thumbnail height', fatal=False))
137 'timestamp': material['original_date'],
138 'description': description,
139 'duration': parse_duration(material.get('duration')),
140 'thumbnails': thumbnails,