]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/imggaming.py
   2 from __future__ 
import unicode_literals
 
   7 from .common 
import InfoExtractor
 
   8 from ..compat 
import compat_HTTPError
 
  17 class ImgGamingBaseIE(InfoExtractor
): 
  18     _API_BASE 
= 'https://dce-frontoffice.imggaming.com/api/v2/' 
  19     _API_KEY 
= '857a1e5d-e35e-4fdf-805b-a87b6f8364bf' 
  21     _MANIFEST_HEADERS 
= {'Accept-Encoding': 'identity'} 
  23     _VALID_URL_TEMPL 
= r
'https?://(?P<domain>%s)/(?P<type>live|playlist|video)/(?P<id>\d+)(?:\?.*?\bplaylistId=(?P<playlist_id>\d+))?' 
  25     def _real_initialize(self
): 
  27             'Realm': 'dce.' + self
._REALM
, 
  28             'x-api-key': self
._API
_KEY
, 
  31         email
, password 
= self
._get
_login
_info
() 
  33             self
.raise_login_required() 
  35         p_headers 
= self
._HEADERS
.copy() 
  36         p_headers
['Content-Type'] = 'application/json' 
  37         self
._HEADERS
['Authorization'] = 'Bearer ' + self
._download
_json
( 
  38             self
._API
_BASE 
+ 'login', 
  39             None, 'Logging in', data
=json
.dumps({ 
  42             }).encode(), headers
=p_headers
)['authorisationToken'] 
  44     def _call_api(self
, path
, media_id
): 
  45         return self
._download
_json
( 
  46             self
._API
_BASE 
+ path 
+ media_id
, media_id
, headers
=self
._HEADERS
) 
  48     def _extract_dve_api_url(self
, media_id
, media_type
): 
  49         stream_path 
= 'stream' 
  50         if media_type 
== 'video': 
  51             stream_path 
+= '/vod/' 
  53             stream_path 
+= '?eventId=' 
  55             return self
._call
_api
( 
  56                 stream_path
, media_id
)['playerUrlCallback'] 
  57         except ExtractorError 
as e
: 
  58             if isinstance(e
.cause
, compat_HTTPError
) and e
.cause
.code 
== 403: 
  60                     self
._parse
_json
(e
.cause
.read().decode(), media_id
)['messages'][0], 
  64     def _real_extract(self
, url
): 
  65         domain
, media_type
, media_id
, playlist_id 
= re
.match(self
._VALID
_URL
, url
).groups() 
  68             if self
._downloader
.params
.get('noplaylist'): 
  69                 self
.to_screen('Downloading just video %s because of --no-playlist' % media_id
) 
  71                 self
.to_screen('Downloading playlist %s - add --no-playlist to just download video' % playlist_id
) 
  72                 media_type
, media_id 
= 'playlist', playlist_id
 
  74         if media_type 
== 'playlist': 
  75             playlist 
= self
._call
_api
('vod/playlist/', media_id
) 
  77             for video 
in try_get(playlist
, lambda x
: x
['videos']['vods']) or []: 
  78                 video_id 
= str_or_none(video
.get('id')) 
  81                 entries
.append(self
.url_result( 
  82                     'https://%s/video/%s' % (domain
, video_id
), 
  83                     self
.ie_key(), video_id
)) 
  84             return self
.playlist_result( 
  85                 entries
, media_id
, playlist
.get('title'), 
  86                 playlist
.get('description')) 
  88         dve_api_url 
= self
._extract
_dve
_api
_url
(media_id
, media_type
) 
  89         video_data 
= self
._download
_json
(dve_api_url
, media_id
) 
  90         is_live 
= media_type 
== 'live' 
  92             title 
= self
._live
_title
(self
._call
_api
('event/', media_id
)['title']) 
  94             title 
= video_data
['name'] 
  97         for proto 
in ('hls', 'dash'): 
  98             media_url 
= video_data
.get(proto 
+ 'Url') or try_get(video_data
, lambda x
: x
[proto
]['url']) 
 102                 m3u8_formats 
= self
._extract
_m
3u8_formats
( 
 103                     media_url
, media_id
, 'mp4', 'm3u8' if is_live 
else 'm3u8_native', 
 104                     m3u8_id
='hls', fatal
=False, headers
=self
._MANIFEST
_HEADERS
) 
 105                 for f 
in m3u8_formats
: 
 106                     f
.setdefault('http_headers', {}).update(self
._MANIFEST
_HEADERS
) 
 109                 formats
.extend(self
._extract
_mpd
_formats
( 
 110                     media_url
, media_id
, mpd_id
='dash', fatal
=False, 
 111                     headers
=self
._MANIFEST
_HEADERS
)) 
 112         self
._sort
_formats
(formats
) 
 115         for subtitle 
in video_data
.get('subtitles', []): 
 116             subtitle_url 
= subtitle
.get('url') 
 119             subtitles
.setdefault(subtitle
.get('lang', 'en_US'), []).append({ 
 127             'thumbnail': video_data
.get('thumbnailUrl'), 
 128             'description': video_data
.get('description'), 
 129             'duration': int_or_none(video_data
.get('duration')), 
 130             'tags': video_data
.get('tags'), 
 132             'subtitles': subtitles
,