]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/iprima.py
   2 from __future__ 
import unicode_literals
 
   7 from .common 
import InfoExtractor
 
  14 class IPrimaIE(InfoExtractor
): 
  15     _VALID_URL 
= r
'https?://(?:[^/]+)\.iprima\.cz/(?:[^/]+/)*(?P<id>[^/?#&]+)' 
  19         'url': 'http://play.iprima.cz/gondici-s-r-o-33', 
  23             'title': 'Gondíci s. r. o. (34)', 
  24             'description': 'md5:16577c629d006aa91f59ca8d8e7f99bd', 
  27             'skip_download': True,  # m3u8 download 
  30         'url': 'http://play.iprima.cz/particka/particka-92', 
  31         'only_matching': True, 
  34         'url': 'http://play.iprima.cz/closer-nove-pripady/closer-nove-pripady-iv-1', 
  35         'only_matching': True, 
  37         # iframe api.play-backend.iprima.cz 
  38         'url': 'https://prima.iprima.cz/my-little-pony/mapa-znameni-2-2', 
  39         'only_matching': True, 
  41         # iframe prima.iprima.cz 
  42         'url': 'https://prima.iprima.cz/porady/jak-se-stavi-sen/rodina-rathousova-praha', 
  43         'only_matching': True, 
  45         'url': 'http://www.iprima.cz/filmy/desne-rande', 
  46         'only_matching': True, 
  48         'url': 'https://zoom.iprima.cz/10-nejvetsich-tajemstvi-zahad/posvatna-mista-a-stavby', 
  49         'only_matching': True, 
  51         'url': 'https://krimi.iprima.cz/mraz-0/sebevrazdy', 
  52         'only_matching': True, 
  54         'url': 'https://cool.iprima.cz/derava-silnice-nevadi', 
  55         'only_matching': True, 
  57         'url': 'https://love.iprima.cz/laska-az-za-hrob/slib-dany-bratrovi', 
  58         'only_matching': True, 
  60         'url': 'https://autosalon.iprima.cz/motorsport/7-epizoda-1', 
  61         'only_matching': True, 
  64     def _real_extract(self
, url
): 
  65         video_id 
= self
._match
_id
(url
) 
  67         self
._set
_cookie
('play.iprima.cz', 'ott_adult_confirmed', '1') 
  69         webpage 
= self
._download
_webpage
(url
, video_id
) 
  71         video_id 
= self
._search
_regex
( 
  72             (r
'<iframe[^>]+\bsrc=["\'](?
:https?
:)?
//(?
:api\
.play
-backend\
.iprima\
.cz
/prehravac
/embedded|prima\
.iprima\
.cz
/[^
/]+/[^
/]+)\?.*?
\bid
=(p\d
+)', 
  73              r'data
-product
="([^"]+)">'), 
  76         playerpage = self._download_webpage( 
  77             'http://play.iprima.cz/prehravac/init', 
  78             video_id, note='Downloading player', query={ 
  80                 '_ts': round(time.time()), 
  81                 'productId': video_id, 
  82             }, headers={'Referer': url}) 
  86         def extract_formats(format_url, format_key=None, lang=None): 
  87             ext = determine_ext(format_url) 
  89             if format_key == 'hls' or ext == 'm3u8': 
  90                 new_formats = self._extract_m3u8_formats( 
  91                     format_url, video_id, 'mp4', entry_protocol='m3u8_native', 
  92                     m3u8_id='hls', fatal=False) 
  93             elif format_key == 'dash' or ext == 'mpd': 
  95                 new_formats = self._extract_mpd_formats( 
  96                     format_url, video_id, mpd_id='dash', fatal=False) 
  99                     if not f.get('language'): 
 101             formats.extend(new_formats) 
 103         options = self._parse_json( 
 105                 r'(?s)(?:TDIPlayerOptions|playerOptions)\s*=\s*({.+?});\s*\]\]', 
 106                 playerpage, 'player options', default='{}'), 
 107             video_id, transform_source=js_to_json, fatal=False) 
 109             for key, tracks in options.get('tracks', {}).items(): 
 110                 if not isinstance(tracks, list): 
 113                     src = track.get('src') 
 115                         extract_formats(src, key.lower(), track.get('lang')) 
 118             for _, src in re.findall(r'src["\']\s
*:\s
*(["\'])(.+?)\1', playerpage): 
 121         if not formats and '>GEO_IP_NOT_ALLOWED<' in playerpage: 
 122             self.raise_geo_restricted(countries=['CZ']) 
 124         self._sort_formats(formats) 
 128             'title': self._og_search_title(webpage), 
 129             'thumbnail': self._og_search_thumbnail(webpage), 
 131             'description': self._og_search_description(webpage),