]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/viceland.py 
8742b607a4a8dcbbf6b2790fa40ca29353b04de2
   2  from  __future__ 
import  unicode_literals
   8  from  . adobepass 
import  AdobePassIE
   9  from  .. compat 
import  compat_HTTPError
  20  class  VicelandIE ( AdobePassIE
):   21      _VALID_URL 
=  r
'https?://(?:www\.)?viceland\.com/[^/]+/video/[^/]+/(?P<id>[a-f0-9]+)'   23          'url' :  'https://www.viceland.com/en_us/video/cyberwar-trailer/57608447973ee7705f6fbd4e' ,   25              'id' :  '57608447973ee7705f6fbd4e' ,   27              'title' :  'CYBERWAR (Trailer)' ,   28              'description' :  'Tapping into the geopolitics of hacking and surveillance, Ben Makuch travels the world to meet with hackers, government officials, and dissidents to investigate the ecosystem of cyberwarfare.' ,   30              'timestamp' :  1466008539 ,   31              'upload_date' :  '20160615' ,   33              'uploader' :  'Viceland' ,   37              'skip_download' :  True ,   39          'add_ie' : [ 'UplynkPreplay' ],   42      def  _real_extract ( self
,  url
):   43          video_id 
=  self
._ match
_ id
( url
)   45          webpage 
=  self
._ download
_ webpage
( url
,  video_id
)   46          watch_hub_data 
=  extract_attributes ( self
._ search
_ regex
(   47              r
'(?s)(<watch-hub\s*.+?</watch-hub>)' ,  webpage
,  'watch hub' ))   48          video_id 
=  watch_hub_data
[ 'vms-id' ]   49          title 
=  watch_hub_data
[ 'video-title' ]   52          if  watch_hub_data
. get ( 'video-locked' ) ==  '1' :   53              resource 
=  self
._ get
_ mvpd
_ resource
(   54                  'VICELAND' ,  title
,  video_id
,   55                  watch_hub_data
. get ( 'video-rating' ))   56              query
[ 'tvetoken' ] =  self
._ extract
_ mvpd
_ auth
( url
,  video_id
,  'VICELAND' ,  resource
)   58          # signature generation algorithm is reverse engineered from signatureGenerator in   59          # webpack:///../shared/~/vice-player/dist/js/vice-player.js in   60          # https://www.viceland.com/assets/common/js/web.vendor.bundle.js   61          exp 
=  int ( time
. time ()) +  14400   64              'sign' :  hashlib
. sha512 (( ' %s :GET: %d '  % ( video_id
,  exp
)). encode ()). hexdigest (),   68              preplay 
=  self
._ download
_ json
( 'https://www.viceland.com/en_us/preplay/ %s '  %  video_id
,  video_id
,  query
= query
)   69          except  ExtractorError 
as  e
:   70              if  isinstance ( e
. cause
,  compat_HTTPError
)  and  e
. cause
. code 
==  400 :   71                  error 
=  json
. loads ( e
. cause
. read (). decode ())   72                  raise  ExtractorError ( ' %s  said:  %s '  % ( self
. IE_NAME
,  error
[ 'details' ]),  expected
= True )   75          video_data 
=  preplay
[ 'video' ]   76          base 
=  video_data
[ 'base' ]   77          uplynk_preplay_url 
=  preplay
[ 'preplayURL' ]   78          episode 
=  video_data
. get ( 'episode' , {})   79          channel 
=  video_data
. get ( 'channel' , {})   82          cc_url 
=  preplay
. get ( 'ccURL' )   89              '_type' :  'url_transparent' ,   90              'url' :  uplynk_preplay_url
,   93              'description' :  base
. get ( 'body' ),   94              'thumbnail' :  watch_hub_data
. get ( 'cover-image' )  or  watch_hub_data
. get ( 'thumbnail' ),   95              'duration' :  parse_duration ( video_data
. get ( 'video_duration' )  or  watch_hub_data
. get ( 'video-duration' )),   96              'timestamp' :  int_or_none ( video_data
. get ( 'created_at' )),   97              'age_limit' :  parse_age_limit ( video_data
. get ( 'video_rating' )),   98              'series' :  video_data
. get ( 'show_title' )  or  watch_hub_data
. get ( 'show-title' ),   99              'episode_number' :  int_or_none ( episode
. get ( 'episode_number' )  or  watch_hub_data
. get ( 'episode' )),  100              'episode_id' :  str_or_none ( episode
. get ( 'id' )  or  video_data
. get ( 'episode_id' )),  101              'season_number' :  int_or_none ( watch_hub_data
. get ( 'season' )),  102              'season_id' :  str_or_none ( episode
. get ( 'season_id' )),  103              'uploader' :  channel
. get ( 'base' , {}). get ( 'title' )  or  watch_hub_data
. get ( 'channel-title' ),  104              'uploader_id' :  str_or_none ( channel
. get ( 'id' )),  105              'subtitles' :  subtitles
,  106              'ie_key' :  'UplynkPreplay' ,