]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/hidive.py
   2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
   7 from ..compat 
import compat_str
 
  15 class HiDiveIE(InfoExtractor
): 
  16     _VALID_URL 
= r
'https?://(?:www\.)?hidive\.com/stream/(?P<title>[^/]+)/(?P<key>[^/?#&]+)' 
  17     # Using X-Forwarded-For results in 403 HTTP error for HLS fragments, 
  18     # so disabling geo bypass completely 
  22         'url': 'https://www.hidive.com/stream/the-comic-artist-and-his-assistants/s01e001', 
  24             'id': 'the-comic-artist-and-his-assistants/s01e001', 
  26             'title': 'the-comic-artist-and-his-assistants/s01e001', 
  27             'series': 'the-comic-artist-and-his-assistants', 
  32             'skip_download': True, 
  36     def _real_extract(self
, url
): 
  37         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  38         title
, key 
= mobj
.group('title', 'key') 
  39         video_id 
= '%s/%s' % (title
, key
) 
  41         settings 
= self
._download
_json
( 
  42             'https://www.hidive.com/play/settings', video_id
, 
  43             data
=urlencode_postdata({ 
  48         restriction 
= settings
.get('restrictionReason') 
  49         if restriction 
== 'RegionRestricted': 
  50             self
.raise_geo_restricted() 
  52         if restriction 
and restriction 
!= 'None': 
  54                 '%s said: %s' % (self
.IE_NAME
, restriction
), expected
=True) 
  58         for rendition_id
, rendition 
in settings
['renditions'].items(): 
  59             bitrates 
= rendition
.get('bitrates') 
  60             if not isinstance(bitrates
, dict): 
  62             m3u8_url 
= bitrates
.get('hls') 
  63             if not isinstance(m3u8_url
, compat_str
): 
  65             formats
.extend(self
._extract
_m
3u8_formats
( 
  66                 m3u8_url
, video_id
, 'mp4', entry_protocol
='m3u8_native', 
  67                 m3u8_id
='%s-hls' % rendition_id
, fatal
=False)) 
  68             cc_files 
= rendition
.get('ccFiles') 
  69             if not isinstance(cc_files
, list): 
  71             for cc_file 
in cc_files
: 
  72                 if not isinstance(cc_file
, list) or len(cc_file
) < 3: 
  76                 if not isinstance(cc_lang
, compat_str
) or not isinstance( 
  79                 subtitles
.setdefault(cc_lang
, []).append({ 
  83         season_number 
= int_or_none(self
._search
_regex
( 
  84             r
's(\d+)', key
, 'season number', default
=None)) 
  85         episode_number 
= int_or_none(self
._search
_regex
( 
  86             r
'e(\d+)', key
, 'episode number', default
=None)) 
  91             'subtitles': subtitles
, 
  94             'season_number': season_number
, 
  95             'episode_number': episode_number
,