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