]> jfr.im git - yt-dlp.git/blame - youtube_dl/extractor/rtlnl.py
[bilibili] Fix FutureWarning
[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)
15 https?://(www\.)?
16 (?:
17 rtlxl\.nl/\#!/[^/]+/|
18 rtl\.nl/system/videoplayer/[^?#]+?/video_embed\.html\#uuid=
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 }
46 }]
6493f5d7
JMF
47
48 def _real_extract(self, url):
59b8ab58 49 uuid = self._match_id(url)
6493f5d7 50 info = self._download_json(
49f0da7a 51 'http://www.rtl.nl/system/s4m/vfd/version=2/uuid=%s/fmt=flash/' % uuid,
6493f5d7 52 uuid)
7adcbe75 53
6493f5d7 54 material = info['material'][0]
6493f5d7
JMF
55 progname = info['abstracts'][0]['name']
56 subtitle = material['title'] or info['episodes'][0]['name']
59b8ab58 57 description = material.get('synopsis') or info['episodes'][0]['synopsis']
6493f5d7 58
49f0da7a
NJ
59 # Use unencrypted m3u8 streams (See https://github.com/rg3/youtube-dl/issues/4118)
60 videopath = material['videopath'].replace('.f4m', '.m3u8')
37eddd31 61 m3u8_url = 'http://manifest.us.rtl.nl' + videopath
de2d9f5f 62
37eddd31 63 formats = self._extract_m3u8_formats(m3u8_url, uuid, ext='mp4')
de2d9f5f 64
4698b14b 65 video_urlpart = videopath.split('/flash/')[1][:-5]
de2d9f5f
S
66 PG_URL_TEMPLATE = 'http://pg.us.rtl.nl/rtlxl/network/%s/progressive/%s.mp4'
67
68 formats.extend([
69 {
70 'url': PG_URL_TEMPLATE % ('a2m', video_urlpart),
71 'format_id': 'pg-sd',
72 },
73 {
74 'url': PG_URL_TEMPLATE % ('a3m', video_urlpart),
75 'format_id': 'pg-hd',
480b7c32 76 'quality': 0,
de2d9f5f
S
77 }
78 ])
37eddd31
NJ
79 self._sort_formats(formats)
80
59b8ab58
PH
81 thumbnails = []
82 meta = info.get('meta', {})
83 for p in ('poster_base_url', '"thumb_base_url"'):
84 if not meta.get(p):
85 continue
86
87 thumbnails.append({
88 'url': self._proto_relative_url(meta[p] + uuid),
89 'width': int_or_none(self._search_regex(
90 r'/sz=([0-9]+)', meta[p], 'thumbnail width', fatal=False)),
91 'height': int_or_none(self._search_regex(
92 r'/sz=[0-9]+x([0-9]+)',
93 meta[p], 'thumbnail height', fatal=False))
94 })
95
6493f5d7
JMF
96 return {
97 'id': uuid,
7adcbe75 98 'title': '%s - %s' % (progname, subtitle),
de2d9f5f 99 'formats': formats,
6493f5d7 100 'timestamp': material['original_date'],
59b8ab58 101 'description': description,
7adcbe75 102 'duration': parse_duration(material.get('duration')),
59b8ab58 103 'thumbnails': thumbnails,
6493f5d7 104 }