]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/umg.py
2 from __future__
import unicode_literals
4 from .common
import InfoExtractor
12 class UMGDeIE(InfoExtractor
):
14 IE_DESC
= 'Universal Music Deutschland'
15 _VALID_URL
= r
'https?://(?:www\.)?universal-music\.de/[^/]+/videos/[^/?#]+-(?P<id>\d+)'
17 'url': 'https://www.universal-music.de/sido/videos/jedes-wort-ist-gold-wert-457803',
18 'md5': 'ebd90f48c80dcc82f77251eb1902634f',
22 'title': 'Jedes Wort ist Gold wert',
23 'timestamp': 1513591800,
24 'upload_date': '20171218',
28 def _real_extract(self
, url
):
29 video_id
= self
._match
_id
(url
)
30 video_data
= self
._download
_json
(
31 'https://api.universal-music.de/graphql',
34 universalMusic(channel:16) {
50 }''' % video_id
})['data']['universalMusic']['video']
52 title
= video_data
['headline']
53 hls_url_template
= 'http://mediadelivery.universal-music-services.de/vod/mp4:autofill/storage/' + '/'.join(list(video_id
)) + '/content/%s/file/playlist.m3u8'
58 def add_m3u8_format(format_id
):
59 m3u8_formats
= self
._extract
_m
3u8_formats
(
60 hls_url_template
% format_id
, video_id
, 'mp4',
61 'm3u8_native', m3u8_id
='hls', fatal
='False')
62 if m3u8_formats
and m3u8_formats
[0].get('height'):
63 formats
.extend(m3u8_formats
)
65 for f
in video_data
.get('formats', []):
67 mime_type
= f
.get('mimeType')
68 if not f_url
or mime_type
== 'application/mxf':
72 'width': int_or_none(f
.get('width')),
73 'height': int_or_none(f
.get('height')),
74 'filesize': parse_filesize(f
.get('fileSize')),
76 f_type
= f
.get('type')
78 thumbnails
.append(fmt
)
79 elif f_type
== 'Video':
80 format_id
= f
.get('formatId')
82 fmt
['format_id'] = format_id
83 if mime_type
== 'video/mp4':
84 add_m3u8_format(format_id
)
85 urlh
= self
._request
_webpage
(f_url
, video_id
, fatal
=False)
87 first_byte
= urlh
.read(1)
88 if first_byte
not in (b
'F', b
'\x00'):
92 for format_id
in (867, 836, 940):
93 add_m3u8_format(format_id
)
94 self
._sort
_formats
(formats
, ('width', 'height', 'filesize', 'tbr'))
99 'duration': int_or_none(video_data
.get('duration')),
100 'timestamp': parse_iso8601(video_data
.get('createdDate'), ' '),
101 'thumbnails': thumbnails
,