]> jfr.im git - yt-dlp.git/blame - youtube_dl/extractor/rtlnl.py
Merge branch 'patch-1' of https://github.com/corone17/youtube-dl into corone17-patch-1
[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)
a9d56c68 15 https?://(?:www\.)?
59b8ab58
PH
16 (?:
17 rtlxl\.nl/\#!/[^/]+/|
a9d56c68 18 rtl\.nl/system/videoplayer/(?:[^/]+/)+(?:video_)?embed\.html\b.+?\buuid=
59b8ab58
PH
19 )
20 (?P<id>[0-9a-f-]+)'''
6493f5d7 21
59b8ab58 22 _TESTS = [{
6493f5d7 23 'url': 'http://www.rtlxl.nl/#!/rtl-nieuws-132237/6e4203a6-0a5e-3596-8424-c599a59e0677',
de2d9f5f 24 'md5': 'cc16baa36a6c169391f0764fa6b16654',
6493f5d7
JMF
25 'info_dict': {
26 'id': '6e4203a6-0a5e-3596-8424-c599a59e0677',
de2d9f5f 27 'ext': 'mp4',
6493f5d7 28 'title': 'RTL Nieuws - Laat',
de2d9f5f 29 'description': 'md5:6b61f66510c8889923b11f2778c72dc5',
6493f5d7
JMF
30 'timestamp': 1408051800,
31 'upload_date': '20140814',
7adcbe75 32 'duration': 576.880,
6493f5d7 33 },
59b8ab58
PH
34 }, {
35 'url': 'http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed/autoplay=false',
36 'md5': 'dea7474214af1271d91ef332fb8be7ea',
37 'info_dict': {
38 'id': '84ae5571-ac25-4225-ae0c-ef8d9efb2aed',
39 'ext': 'mp4',
40 'timestamp': 1424039400,
41 'title': 'RTL Nieuws - Nieuwe beelden Kopenhagen: chaos direct na aanslag',
42 'thumbnail': 're:^https?://screenshots\.rtl\.nl/system/thumb/sz=[0-9]+x[0-9]+/uuid=84ae5571-ac25-4225-ae0c-ef8d9efb2aed$',
43 'upload_date': '20150215',
44 '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.',
45 }
a9d56c68
S
46 }, {
47 'url': 'http://www.rtl.nl/system/videoplayer/derden/embed.html#!/uuid=bb0353b0-d6a4-1dad-90e9-18fe75b8d1f0',
48 'only_matching': True,
59b8ab58 49 }]
6493f5d7
JMF
50
51 def _real_extract(self, url):
59b8ab58 52 uuid = self._match_id(url)
6493f5d7 53 info = self._download_json(
bea41c7f 54 'http://www.rtl.nl/system/s4m/vfd/version=2/uuid=%s/fmt=adaptive/' % uuid,
6493f5d7 55 uuid)
7adcbe75 56
6493f5d7 57 material = info['material'][0]
6493f5d7
JMF
58 progname = info['abstracts'][0]['name']
59 subtitle = material['title'] or info['episodes'][0]['name']
59b8ab58 60 description = material.get('synopsis') or info['episodes'][0]['synopsis']
6493f5d7 61
49f0da7a 62 # Use unencrypted m3u8 streams (See https://github.com/rg3/youtube-dl/issues/4118)
bea41c7f 63 videopath = material['videopath'].replace('adaptive', 'flash')
64 m3u8_url = info['meta']['videohost'] + videopath
de2d9f5f 65
37eddd31 66 formats = self._extract_m3u8_formats(m3u8_url, uuid, ext='mp4')
de2d9f5f 67
4698b14b 68 video_urlpart = videopath.split('/flash/')[1][:-5]
de2d9f5f
S
69 PG_URL_TEMPLATE = 'http://pg.us.rtl.nl/rtlxl/network/%s/progressive/%s.mp4'
70
71 formats.extend([
72 {
73 'url': PG_URL_TEMPLATE % ('a2m', video_urlpart),
74 'format_id': 'pg-sd',
75 },
76 {
77 'url': PG_URL_TEMPLATE % ('a3m', video_urlpart),
78 'format_id': 'pg-hd',
480b7c32 79 'quality': 0,
de2d9f5f
S
80 }
81 ])
37eddd31
NJ
82 self._sort_formats(formats)
83
59b8ab58
PH
84 thumbnails = []
85 meta = info.get('meta', {})
86 for p in ('poster_base_url', '"thumb_base_url"'):
87 if not meta.get(p):
88 continue
89
90 thumbnails.append({
91 'url': self._proto_relative_url(meta[p] + uuid),
92 'width': int_or_none(self._search_regex(
93 r'/sz=([0-9]+)', meta[p], 'thumbnail width', fatal=False)),
94 'height': int_or_none(self._search_regex(
95 r'/sz=[0-9]+x([0-9]+)',
96 meta[p], 'thumbnail height', fatal=False))
97 })
98
6493f5d7
JMF
99 return {
100 'id': uuid,
7adcbe75 101 'title': '%s - %s' % (progname, subtitle),
de2d9f5f 102 'formats': formats,
6493f5d7 103 'timestamp': material['original_date'],
59b8ab58 104 'description': description,
7adcbe75 105 'duration': parse_duration(material.get('duration')),
59b8ab58 106 'thumbnails': thumbnails,
6493f5d7 107 }