]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/adultswim.py 
acc4ce38dca31a4ec8401d253044eb7e4fb91b3e
   2  from  __future__ 
import  unicode_literals
   6  from  . turner 
import  TurnerBaseIE
  13  class  AdultSwimIE ( TurnerBaseIE
):   14      _VALID_URL 
=  r
'https?://(?:www\.)?adultswim\.com/videos/(?P<show_path>[^/?#]+)(?:/(?P<episode_path>[^/?#]+))?'   17          'url' :  'http://adultswim.com/videos/rick-and-morty/pilot' ,   19              'id' :  'rQxZvXQ4ROaSOqq-or2Mow' ,   21              'title' :  'Rick and Morty - Pilot' ,   22              'description' :  'Rick moves in with his daughter \' s family and establishes himself as a bad influence on his grandson, Morty.' ,   23              'timestamp' :  1493267400 ,   24              'upload_date' :  '20170427' ,   28              'skip_download' :  True ,   30          'expected_warnings' : [ 'Unable to download f4m manifest' ],   32          'url' :  'http://www.adultswim.com/videos/tim-and-eric-awesome-show-great-job/dr-steve-brule-for-your-wine/' ,   34              'id' :  'sY3cMUR_TbuE4YmdjzbIcQ' ,   36              'title' :  'Tim and Eric Awesome Show Great Job! - Dr. Steve Brule, For Your Wine' ,   37              'description' :  'Dr. Brule reports live from Wine Country with a special report on wines.   \n Watch Tim and Eric Awesome Show Great Job! episode #20, "Embarrassed" on Adult Swim.' ,   38              'upload_date' :  '20080124' ,   39              'timestamp' :  1201150800 ,   43              'skip_download' :  True ,   46          'url' :  'http://www.adultswim.com/videos/decker/inside-decker-a-new-hero/' ,   48              'id' :  'I0LQFQkaSUaFp8PnAWHhoQ' ,   50              'title' :  'Decker - Inside Decker: A New Hero' ,   51              'description' :  'The guys recap the conclusion of the season. They announce a new hero, take a peek into the Victorville Film Archive and welcome back the talented James Dean.' ,   52              'timestamp' :  1469480460 ,   53              'upload_date' :  '20160725' ,   57              'skip_download' :  True ,   59          'expected_warnings' : [ 'Unable to download f4m manifest' ],   61          'url' :  'http://www.adultswim.com/videos/attack-on-titan' ,   63              'id' :  'b7A69dzfRzuaXIECdxW8XQ' ,   64              'title' :  'Attack on Titan' ,   65              'description' :  'md5:6c8e003ea0777b47013e894767f5e114' ,   67          'playlist_mincount' :  12 ,   69          'url' :  'http://www.adultswim.com/videos/streams/williams-stream' ,   71              'id' :  'd8DEBj7QRfetLsRgFnGEyg' ,   73              'title' :  r
're:^Williams Stream \d {4} -\d {2} -\d {2}  \d {2} :\d {2} $' ,   74              'description' :  'original programming' ,   78              'skip_download' :  True ,   82      def  _real_extract ( self
,  url
):   83          show_path
,  episode_path 
=  re
. match ( self
._ VALID
_U RL
,  url
). groups ()   84          display_id 
=  episode_path 
or  show_path
  85          webpage 
=  self
._ download
_ webpage
( url
,  display_id
)   86          initial_data 
=  self
._ parse
_ json
( self
._ search
_ regex
(   87              r
'AS_INITIAL_DATA(?:__)?\s*=\s*({.+?});' ,   88              webpage
,  'initial data' ),  display_id
)   90          is_stream 
=  show_path 
==  'streams'   93                  episode_path 
=  'live-stream'   95              video_data 
=  next ( stream 
for  stream_path
,  stream 
in  initial_data
[ 'streams' ]. items ()  if  stream_path 
==  episode_path
)   96              video_id 
=  video_data
. get ( 'stream' )  100                  for  episode 
in  video_data
. get ( 'archiveEpisodes' , []):  101                      episode_url 
=  episode
. get ( 'url' )  104                      entries
. append ( self
. url_result (  105                          episode_url
,  'AdultSwim' ,  episode
. get ( 'id' )))  106                  return  self
. playlist_result (  107                      entries
,  video_data
. get ( 'id' ),  video_data
. get ( 'title' ),  108                      strip_or_none ( video_data
. get ( 'description' )))  110              show_data 
=  initial_data
[ 'show' ]  114                  for  video 
in  show_data
. get ( 'videos' , []):  115                      slug 
=  video
. get ( 'slug' )  118                      entries
. append ( self
. url_result (  119                          'http://adultswim.com/videos/ %s / %s '  % ( show_path
,  slug
),  120                          'AdultSwim' ,  video
. get ( 'id' )))  121                  return  self
. playlist_result (  122                      entries
,  show_data
. get ( 'id' ),  show_data
. get ( 'title' ),  123                      strip_or_none ( show_data
. get ( 'metadata' , {}). get ( 'description' )))  125              video_data 
=  show_data
[ 'sluggedVideo' ]  126              video_id 
=  video_data
[ 'id' ]  128          info 
=  self
._ extract
_ cvp
_ info
(  129              'http://www.adultswim.com/videos/api/v0/assets?platform=desktop&id='  +  video_id
,  132                      'media_src' :  'http://androidhls-secure.cdn.turner.com/adultswim/big' ,  133                      'tokenizer_src' :  'http://www.adultswim.com/astv/mvpd/processors/services/token_ipadAdobe.do' ,  137                  'site_name' :  'AdultSwim' ,  138                  'auth_required' :  video_data
. get ( 'auth' ),  143              'display_id' :  display_id
,  144              'description' :  info
. get ( 'description' )  or  strip_or_none ( video_data
. get ( 'description' )),  148                  'duration' :  info
. get ( 'duration' )  or  int_or_none ( video_data
. get ( 'duration' )),  149                  'timestamp' :  info
. get ( 'timestamp' )  or  int_or_none ( video_data
. get ( 'launch_date' )),  150                  'season_number' :  info
. get ( 'season_number' )  or  int_or_none ( video_data
. get ( 'season_number' )),  151                  'episode' :  info
[ 'title' ],  152                  'episode_number' :  info
. get ( 'episode_number' )  or  int_or_none ( video_data
. get ( 'episode_number' )),  155              info
[ 'series' ] =  video_data
. get ( 'collection_title' )  or  info
. get ( 'series' )  156              if  info
[ 'series' ]  and  info
[ 'series' ] !=  info
[ 'title' ]:  157                  info
[ 'title' ] =  ' %s  -  %s '  % ( info
[ 'series' ],  info
[ 'title' ])