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