2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
  10     compat_urllib_parse_urlparse
, 
  20 class SixPlayIE(InfoExtractor
): 
  22     _VALID_URL 
= r
'(?:6play:|https?://(?:www\.)?(?P<domain>6play\.fr|rtlplay\.be|play\.rtl\.hr|rtlmost\.hu)/.+?-c_)(?P<id>[0-9]+)' 
  24         'url': 'https://www.6play.fr/minute-par-minute-p_9533/le-but-qui-a-marque-lhistoire-du-football-francais-c_12041051', 
  25         'md5': '31fcd112637baa0c2ab92c4fcd8baf27', 
  29             'title': 'Le but qui a marqué l\'histoire du football français !', 
  30             'description': 'md5:b59e7e841d646ef1eb42a7868eb6a851', 
  33         'url': 'https://www.rtlplay.be/rtl-info-13h-p_8551/les-titres-du-rtlinfo-13h-c_12045869', 
  34         'only_matching': True, 
  36         'url': 'https://play.rtl.hr/pj-masks-p_9455/epizoda-34-sezona-1-catboyevo-cudo-na-dva-kotaca-c_11984989', 
  37         'only_matching': True, 
  39         'url': 'https://www.rtlmost.hu/megtorve-p_14167/megtorve-6-resz-c_12397787', 
  40         'only_matching': True, 
  43     def _real_extract(self
, url
): 
  44         domain
, video_id 
= re
.search(self
._VALID
_URL
, url
).groups() 
  45         service
, consumer_name 
= { 
  46             '6play.fr': ('6play', 'm6web'), 
  47             'rtlplay.be': ('rtlbe_rtl_play', 'rtlbe'), 
  48             'play.rtl.hr': ('rtlhr_rtl_play', 'rtlhr'), 
  49             'rtlmost.hu': ('rtlhu_rtl_most', 'rtlhu'), 
  50         }.get(domain
, ('6play', 'm6web')) 
  52         data 
= self
._download
_json
( 
  53             'https://pc.middleware.6play.fr/6play/v2/platforms/m6group_web/services/%s/videos/clip_%s' % (service
, video_id
), 
  55                 'x-customer-name': consumer_name
 
  61         clip_data 
= data
['clips'][0] 
  62         title 
= clip_data
['title'] 
  65         quality_key 
= qualities(['lq', 'sd', 'hq', 'hd']) 
  68         assets 
= clip_data
.get('assets') or [] 
  70             asset_url 
= asset
.get('full_physical_path') 
  71             protocol 
= asset
.get('protocol') 
  72             if not asset_url 
or ((protocol 
== 'primetime' or asset
.get('type') == 'usp_hlsfp_h264') and not ('_drmnp.ism/' in asset_url 
or '_unpnp.ism/' in asset_url
)) or asset_url 
in urls
: 
  74             urls
.append(asset_url
) 
  75             container 
= asset
.get('video_container') 
  76             ext 
= determine_ext(asset_url
) 
  77             if protocol 
== 'http_subtitle' or ext 
== 'vtt': 
  78                 subtitles
.setdefault('fr', []).append({'url': asset_url
}) 
  80             if container 
== 'm3u8' or ext 
== 'm3u8': 
  82                     if compat_parse_qs(compat_urllib_parse_urlparse(asset_url
).query
).get('token', [None])[0]: 
  83                         urlh 
= self
._request
_webpage
( 
  84                             asset_url
, video_id
, fatal
=False, 
  85                             headers
=self
.geo_verification_headers()) 
  88                         asset_url 
= urlh
.geturl() 
  89                     asset_url 
= asset_url
.replace('_drmnp.ism/', '_unpnp.ism/') 
  90                     for i 
in range(3, 0, -1): 
  91                         asset_url 
= asset_url 
= asset_url
.replace('_sd1/', '_sd%d/' % i
) 
  92                         m3u8_formats 
= self
._extract
_m
3u8_formats
( 
  93                             asset_url
, video_id
, 'mp4', 'm3u8_native', 
  94                             m3u8_id
='hls', fatal
=False) 
  95                         formats
.extend(m3u8_formats
) 
  96                         formats
.extend(self
._extract
_mpd
_formats
( 
  97                             asset_url
.replace('.m3u8', '.mpd'), 
  98                             video_id
, mpd_id
='dash', fatal
=False)) 
 102                     formats
.extend(self
._extract
_m
3u8_formats
( 
 103                         asset_url
, video_id
, 'mp4', 'm3u8_native', 
 104                         m3u8_id
='hls', fatal
=False)) 
 105             elif container 
== 'mp4' or ext 
== 'mp4': 
 106                 quality 
= asset
.get('video_quality') 
 109                     'format_id': quality
, 
 110                     'quality': quality_key(quality
), 
 113         self
._sort
_formats
(formats
) 
 116             for src 
in (data
, clip_data
): 
 117                 v 
= try_get(src
, getter
, compat_str
) 
 124             'description': get(lambda x
: x
['description']), 
 125             'duration': int_or_none(clip_data
.get('duration')), 
 126             'series': get(lambda x
: x
['program']['title']), 
 128             'subtitles': subtitles
,