]> jfr.im git - yt-dlp.git/blame - yt_dlp/extractor/rtlnl.py
[extractor] Use classmethod/property where possible
[yt-dlp.git] / yt_dlp / extractor / rtlnl.py
CommitLineData
6493f5d7 1from .common import InfoExtractor
59b8ab58
PH
2from ..utils import (
3 int_or_none,
4 parse_duration,
5)
6493f5d7
JMF
6
7
59b8ab58
PH
8class RtlNlIE(InfoExtractor):
9 IE_NAME = 'rtl.nl'
10 IE_DESC = 'rtl.nl and rtlxl.nl'
11 _VALID_URL = r'''(?x)
7a64c33a 12 https?://(?:(?:www|static)\.)?
59b8ab58 13 (?:
97f34a48 14 rtlxl\.nl/(?:[^\#]*\#!|programma)/[^/]+/|
45f63624
S
15 rtl\.nl/(?:(?:system/videoplayer/(?:[^/]+/)+(?:video_)?embed\.html|embed)\b.+?\buuid=|video/)|
16 embed\.rtl\.nl/\#uuid=
59b8ab58
PH
17 )
18 (?P<id>[0-9a-f-]+)'''
6493f5d7 19
59b8ab58 20 _TESTS = [{
97f34a48
DL
21 # new URL schema
22 'url': 'https://www.rtlxl.nl/programma/rtl-nieuws/0bd1384d-d970-3086-98bb-5c104e10c26f',
23 'md5': '490428f1187b60d714f34e1f2e3af0b6',
24 'info_dict': {
25 'id': '0bd1384d-d970-3086-98bb-5c104e10c26f',
26 'ext': 'mp4',
27 'title': 'RTL Nieuws',
28 'description': 'md5:d41d8cd98f00b204e9800998ecf8427e',
29 'timestamp': 1593293400,
30 'upload_date': '20200627',
31 'duration': 661.08,
32 },
33 }, {
34 # old URL schema
ca278a18
S
35 'url': 'http://www.rtlxl.nl/#!/rtl-nieuws-132237/82b1aad1-4a14-3d7b-b554-b0aed1b2c416',
36 'md5': '473d1946c1fdd050b2c0161a4b13c373',
6493f5d7 37 'info_dict': {
ca278a18 38 'id': '82b1aad1-4a14-3d7b-b554-b0aed1b2c416',
de2d9f5f 39 'ext': 'mp4',
ca278a18
S
40 'title': 'RTL Nieuws',
41 'description': 'md5:d41d8cd98f00b204e9800998ecf8427e',
42 'timestamp': 1461951000,
43 'upload_date': '20160429',
44 'duration': 1167.96,
6493f5d7 45 },
97f34a48 46 'skip': '404',
59b8ab58 47 }, {
843ad179 48 # best format available a3t
59b8ab58
PH
49 'url': 'http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed/autoplay=false',
50 'md5': 'dea7474214af1271d91ef332fb8be7ea',
51 'info_dict': {
52 'id': '84ae5571-ac25-4225-ae0c-ef8d9efb2aed',
53 'ext': 'mp4',
54 'timestamp': 1424039400,
55 'title': 'RTL Nieuws - Nieuwe beelden Kopenhagen: chaos direct na aanslag',
ec85ded8 56 'thumbnail': r're:^https?://screenshots\.rtl\.nl/(?:[^/]+/)*sz=[0-9]+x[0-9]+/uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed$',
59b8ab58
PH
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.',
59 }
826a7da8 60 }, {
067aa17e 61 # empty synopsis and missing episodes (see https://github.com/ytdl-org/youtube-dl/issues/6275)
373e1230 62 # best format available nettv
826a7da8
S
63 'url': 'http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=f536aac0-1dc3-4314-920e-3bd1c5b3811a/autoplay=false',
64 'info_dict': {
65 'id': 'f536aac0-1dc3-4314-920e-3bd1c5b3811a',
66 'ext': 'mp4',
67 'title': 'RTL Nieuws - Meer beelden van overval juwelier',
ec85ded8 68 'thumbnail': r're:^https?://screenshots\.rtl\.nl/(?:[^/]+/)*sz=[0-9]+x[0-9]+/uuid=f536aac0-1dc3-4314-920e-3bd1c5b3811a$',
826a7da8
S
69 'timestamp': 1437233400,
70 'upload_date': '20150718',
71 'duration': 30.474,
72 },
73 'params': {
74 'skip_download': True,
75 },
9dfc4fa1 76 }, {
89d42c2c 77 # encrypted m3u8 streams, georestricted
9dfc4fa1
S
78 'url': 'http://www.rtlxl.nl/#!/afl-2-257632/52a74543-c504-4cde-8aa8-ec66fe8d68a7',
79 'only_matching': True,
a9d56c68
S
80 }, {
81 'url': 'http://www.rtl.nl/system/videoplayer/derden/embed.html#!/uuid=bb0353b0-d6a4-1dad-90e9-18fe75b8d1f0',
82 'only_matching': True,
7f2ed475
S
83 }, {
84 'url': 'http://rtlxl.nl/?_ga=1.204735956.572365465.1466978370#!/rtl-nieuws-132237/3c487912-023b-49ac-903e-2c5d79f8410f',
85 'only_matching': True,
0a3924e7
S
86 }, {
87 'url': 'https://www.rtl.nl/video/c603c9c2-601d-4b5e-8175-64f1e942dc7d/',
88 'only_matching': True,
7a64c33a
RA
89 }, {
90 'url': 'https://static.rtl.nl/embed/?uuid=1a2970fc-5c0b-43ff-9fdc-927e39e6d1bc&autoplay=false&publicatiepunt=rtlnieuwsnl',
91 'only_matching': True,
45f63624
S
92 }, {
93 # new embed URL schema
94 'url': 'https://embed.rtl.nl/#uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed/autoplay=false',
95 'only_matching': True,
59b8ab58 96 }]
6493f5d7
JMF
97
98 def _real_extract(self, url):
59b8ab58 99 uuid = self._match_id(url)
6493f5d7 100 info = self._download_json(
bea41c7f 101 'http://www.rtl.nl/system/s4m/vfd/version=2/uuid=%s/fmt=adaptive/' % uuid,
6493f5d7 102 uuid)
7adcbe75 103
6493f5d7 104 material = info['material'][0]
826a7da8
S
105 title = info['abstracts'][0]['name']
106 subtitle = material.get('title')
107 if subtitle:
108 title += ' - %s' % subtitle
109 description = material.get('synopsis')
6493f5d7 110
43232d5c
S
111 meta = info.get('meta', {})
112
a8b7b260 113 videopath = material['videopath']
43232d5c 114 m3u8_url = meta.get('videohost', 'http://manifest.us.rtl.nl') + videopath
de2d9f5f 115
0571ffda
S
116 formats = self._extract_m3u8_formats(
117 m3u8_url, uuid, 'mp4', m3u8_id='hls', fatal=False)
37eddd31
NJ
118 self._sort_formats(formats)
119
59b8ab58 120 thumbnails = []
43232d5c 121
59b8ab58
PH
122 for p in ('poster_base_url', '"thumb_base_url"'):
123 if not meta.get(p):
124 continue
125
126 thumbnails.append({
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))
133 })
134
6493f5d7
JMF
135 return {
136 'id': uuid,
826a7da8 137 'title': title,
de2d9f5f 138 'formats': formats,
6493f5d7 139 'timestamp': material['original_date'],
59b8ab58 140 'description': description,
7adcbe75 141 'duration': parse_duration(material.get('duration')),
59b8ab58 142 'thumbnails': thumbnails,
6493f5d7 143 }