]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/ninecninemedia.py
d889245ad6885d9bbd88d0a1b335aa4b5a56f612
2 from __future__
import unicode_literals
6 from .common
import InfoExtractor
14 class NineCNineMediaIE(InfoExtractor
):
15 _VALID_URL
= r
'9c9media:(?P<destination_code>[^:]+):(?P<id>\d+)'
17 def _real_extract(self
, url
):
18 destination_code
, video_id
= re
.match(self
._VALID
_URL
, url
).groups()
19 api_base_url
= 'http://capi.9c9media.com/destinations/%s/platforms/desktop/contents/%s/' % (destination_code
, video_id
)
20 content
= self
._download
_json
(api_base_url
, video_id
, query
={
21 '$include': '[contentpackages]',
23 title
= content
['Name']
24 if len(content
['ContentPackages']) > 1:
25 raise ExtractorError('multiple content packages')
26 content_package
= content
['ContentPackages'][0]
27 stacks_base_url
= api_base_url
+ 'contentpackages/%s/stacks/' % content_package
['Id']
28 stacks
= self
._download
_json
(stacks_base_url
, video_id
)['Items']
30 raise ExtractorError('multiple stacks')
32 stack_base_url
= '%s%s/manifest.' % (stacks_base_url
, stack
['Id'])
34 formats
.extend(self
._extract
_m
3u8_formats
(
35 stack_base_url
+ 'm3u8', video_id
, 'mp4',
36 'm3u8_native', m3u8_id
='hls', fatal
=False))
37 formats
.extend(self
._extract
_f
4m
_formats
(
38 stack_base_url
+ 'f4m', video_id
,
39 f4m_id
='hds', fatal
=False))
40 mp4_url
= self
._download
_webpage
(stack_base_url
+ 'pd', video_id
, fatal
=False)
46 self
._sort
_formats
(formats
)
51 'description': content
.get('Desc') or content
.get('ShortDesc'),
52 'timestamp': parse_iso8601(content
.get('BroadcastDateTime')),
53 'duration': parse_duration(content
.get('BroadcastTime')),