2 from __future__
import unicode_literals
4 from .common
import InfoExtractor
5 from ..compat
import compat_urllib_parse_urlparse
12 class SpiegeltvIE(InfoExtractor
):
13 _VALID_URL
= r
'https?://(?:www\.)?spiegel\.tv/(?:#/)?filme/(?P<id>[\-a-z0-9]+)'
15 'url': 'http://www.spiegel.tv/filme/flug-mh370/',
19 'title': 'Flug MH370',
20 'description': 'Das Rätsel um die Boeing 777 der Malaysia-Airlines',
21 'thumbnail': 're:http://.*\.jpg$',
25 'skip_download': True,
28 'url': 'http://www.spiegel.tv/#/filme/alleskino-die-wahrheit-ueber-maenner/',
29 'only_matching': True,
32 def _real_extract(self
, url
):
34 url
= url
.replace('/#/', '/')
35 video_id
= self
._match
_id
(url
)
36 webpage
= self
._download
_webpage
(url
, video_id
)
37 title
= self
._html
_search
_regex
(r
'<h1.*?>(.*?)</h1>', webpage
, 'title')
39 apihost
= 'http://spiegeltv-ivms2-restapi.s3.amazonaws.com'
40 version_json
= self
._download
_json
(
41 '%s/version.json' % apihost
, video_id
,
42 note
='Downloading version information')
43 version_name
= version_json
['version_name']
45 slug_json
= self
._download
_json
(
46 '%s/%s/restapi/slugs/%s.json' % (apihost
, version_name
, video_id
),
48 note
='Downloading object information')
49 oid
= slug_json
['object_id']
51 media_json
= self
._download
_json
(
52 '%s/%s/restapi/media/%s.json' % (apihost
, version_name
, oid
),
53 video_id
, note
='Downloading media information')
54 uuid
= media_json
['uuid']
55 is_wide
= media_json
['is_wide']
57 server_json
= self
._download
_json
(
58 'http://spiegeltv-prod-static.s3.amazonaws.com/projectConfigs/projectConfig.json',
59 video_id
, note
='Downloading server information')
61 format
= '16x9' if is_wide
else '4x3'
64 for streamingserver
in server_json
['streamingserver']:
65 endpoint
= streamingserver
.get('endpoint')
68 play_path
= 'mp4:%s_spiegeltv_0500_%s.m4v' % (uuid
, format
)
69 if endpoint
.startswith('rtmp'):
73 'app': compat_urllib_parse_urlparse(endpoint
).path
[1:],
74 'play_path': play_path
,
75 'player_path': 'http://prod-static.spiegel.tv/frontend-076.swf',
79 elif determine_ext(endpoint
) == 'm3u8':
80 formats
.extend(self
._extract
_m
3u8_formats
(
81 endpoint
.replace('[video]', play_path
),
83 preference
=1, # Prefer hls since it allows to workaround georestriction
91 for image
in media_json
['images']:
94 'width': image
['width'],
95 'height': image
['height'],
98 description
= media_json
['subtitle']
99 duration
= float_or_none(media_json
.get('duration_in_ms'), scale
=1000)
104 'description': description
,
105 'duration': duration
,
106 'thumbnails': thumbnails
,