]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/sixplay.py
   2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
   7 from ..compat 
import compat_str
 
  16 class SixPlayIE(InfoExtractor
): 
  18     _VALID_URL 
= r
'(?:6play:|https?://(?:www\.)?6play\.fr/.+?-c_)(?P<id>[0-9]+)' 
  20         'url': 'http://www.6play.fr/le-meilleur-patissier-p_1807/le-meilleur-patissier-special-fetes-mercredi-a-21-00-sur-m6-c_11638450', 
  21         'md5': '42310bffe4ba3982db112b9cd3467328', 
  25             'title': 'Le Meilleur Pâtissier, spécial fêtes mercredi à 21:00 sur M6', 
  26             'description': 'md5:308853f6a5f9e2d55a30fc0654de415f', 
  28             'series': 'Le meilleur pâtissier', 
  31             'skip_download': True, 
  35     def _real_extract(self
, url
): 
  36         video_id 
= self
._match
_id
(url
) 
  38         data 
= self
._download
_json
( 
  39             'https://pc.middleware.6play.fr/6play/v2/platforms/m6group_web/services/6play/videos/clip_%s' % video_id
, 
  45         clip_data 
= data
['clips'][0] 
  46         title 
= clip_data
['title'] 
  49         quality_key 
= qualities(['lq', 'sd', 'hq', 'hd']) 
  51         for asset 
in clip_data
['assets']: 
  52             asset_url 
= asset
.get('full_physical_path') 
  53             protocol 
= asset
.get('protocol') 
  54             if not asset_url 
or protocol 
== 'primetime' or asset_url 
in urls
: 
  56             urls
.append(asset_url
) 
  57             container 
= asset
.get('video_container') 
  58             ext 
= determine_ext(asset_url
) 
  59             if container 
== 'm3u8' or ext 
== 'm3u8': 
  61                     asset_url 
= re
.sub(r
'/([^/]+)\.ism/[^/]*\.m3u8', r
'/\1.ism/\1.m3u8', asset_url
) 
  62                     formats
.extend(self
._extract
_m
3u8_formats
( 
  63                         asset_url
, video_id
, 'mp4', 'm3u8_native', 
  64                         m3u8_id
='hls', fatal
=False)) 
  65                     formats
.extend(self
._extract
_f
4m
_formats
( 
  66                         asset_url
.replace('.m3u8', '.f4m'), 
  67                         video_id
, f4m_id
='hds', fatal
=False)) 
  68                     formats
.extend(self
._extract
_mpd
_formats
( 
  69                         asset_url
.replace('.m3u8', '.mpd'), 
  70                         video_id
, mpd_id
='dash', fatal
=False)) 
  71                     formats
.extend(self
._extract
_ism
_formats
( 
  72                         re
.sub(r
'/[^/]+\.m3u8', '/Manifest', asset_url
), 
  73                         video_id
, ism_id
='mss', fatal
=False)) 
  75                     formats
.extend(self
._extract
_m
3u8_formats
( 
  76                         asset_url
, video_id
, 'mp4', 'm3u8_native', 
  77                         m3u8_id
='hls', fatal
=False)) 
  78             elif container 
== 'mp4' or ext 
== 'mp4': 
  79                 quality 
= asset
.get('video_quality') 
  83                     'quality': quality_key(quality
), 
  86         self
._sort
_formats
(formats
) 
  89             for src 
in (data
, clip_data
): 
  90                 v 
= try_get(src
, getter
, compat_str
) 
  97             'description': get(lambda x
: x
['description']), 
  98             'duration': int_or_none(clip_data
.get('duration')), 
  99             'series': get(lambda x
: x
['program']['title']),