]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/adultswim.py 
88c96a95060738833f1cc7c85a251f1a26f4962e
   2  from  __future__ 
import  unicode_literals
   6  from  . turner 
import  TurnerBaseIE
  14  class  AdultSwimIE ( TurnerBaseIE
):   15      _VALID_URL 
=  r
'https?://(?:www\.)?adultswim\.com/videos/(?P<show_path>[^/?#]+)(?:/(?P<episode_path>[^/?#]+))?'   18          'url' :  'http://adultswim.com/videos/rick-and-morty/pilot' ,   20              'id' :  'rQxZvXQ4ROaSOqq-or2Mow' ,   22              'title' :  'Rick and Morty - Pilot' ,   23              'description' :  'Rick moves in with his daughter \' s family and establishes himself as a bad influence on his grandson, Morty.' ,   24              'timestamp' :  1493267400 ,   25              'upload_date' :  '20170427' ,   29              'skip_download' :  True ,   31          'expected_warnings' : [ 'Unable to download f4m manifest' ],   33          'url' :  'http://www.adultswim.com/videos/tim-and-eric-awesome-show-great-job/dr-steve-brule-for-your-wine/' ,   35              'id' :  'sY3cMUR_TbuE4YmdjzbIcQ' ,   37              'title' :  'Tim and Eric Awesome Show Great Job! - Dr. Steve Brule, For Your Wine' ,   38              '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.' ,   39              'upload_date' :  '20080124' ,   40              'timestamp' :  1201150800 ,   44              'skip_download' :  True ,   47          'url' :  'http://www.adultswim.com/videos/decker/inside-decker-a-new-hero/' ,   49              'id' :  'I0LQFQkaSUaFp8PnAWHhoQ' ,   51              'title' :  'Decker - Inside Decker: A New Hero' ,   52              '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.' ,   53              'timestamp' :  1469480460 ,   54              'upload_date' :  '20160725' ,   58              'skip_download' :  True ,   60          'expected_warnings' : [ 'Unable to download f4m manifest' ],   62          'url' :  'http://www.adultswim.com/videos/attack-on-titan' ,   64              'id' :  'b7A69dzfRzuaXIECdxW8XQ' ,   65              'title' :  'Attack on Titan' ,   66              'description' :  'md5:6c8e003ea0777b47013e894767f5e114' ,   68          'playlist_mincount' :  12 ,   70          'url' :  'http://www.adultswim.com/videos/streams/williams-stream' ,   72              'id' :  'd8DEBj7QRfetLsRgFnGEyg' ,   74              'title' :  r
're:^Williams Stream \d {4} -\d {2} -\d {2}  \d {2} :\d {2} $' ,   75              'description' :  'original programming' ,   79              'skip_download' :  True ,   83      def  _real_extract ( self
,  url
):   84          show_path
,  episode_path 
=  re
. match ( self
._ VALID
_U RL
,  url
). groups ()   85          display_id 
=  episode_path 
or  show_path
  86          webpage 
=  self
._ download
_ webpage
( url
,  display_id
)   87          initial_data 
=  self
._ parse
_ json
( self
._ search
_ regex
(   88              r
'AS_INITIAL_DATA(?:__)?\s*=\s*({.+?});' ,   89              webpage
,  'initial data' ),  display_id
)   91          is_stream 
=  show_path 
==  'streams'   94                  episode_path 
=  'live-stream'   96              video_data 
=  next ( stream 
for  stream_path
,  stream 
in  initial_data
[ 'streams' ]. items ()  if  stream_path 
==  episode_path
)   97              video_id 
=  video_data
. get ( 'stream' )  101                  for  episode 
in  video_data
. get ( 'archiveEpisodes' , []):  102                      episode_url 
=  url_or_none ( episode
. get ( 'url' ))  105                      entries
. append ( self
. url_result (  106                          episode_url
,  'AdultSwim' ,  episode
. get ( 'id' )))  107                  return  self
. playlist_result (  108                      entries
,  video_data
. get ( 'id' ),  video_data
. get ( 'title' ),  109                      strip_or_none ( video_data
. get ( 'description' )))  111              show_data 
=  initial_data
[ 'show' ]  115                  for  video 
in  show_data
. get ( 'videos' , []):  116                      slug 
=  video
. get ( 'slug' )  119                      entries
. append ( self
. url_result (  120                          'http://adultswim.com/videos/ %s / %s '  % ( show_path
,  slug
),  121                          'AdultSwim' ,  video
. get ( 'id' )))  122                  return  self
. playlist_result (  123                      entries
,  show_data
. get ( 'id' ),  show_data
. get ( 'title' ),  124                      strip_or_none ( show_data
. get ( 'metadata' , {}). get ( 'description' )))  126              video_data 
=  show_data
[ 'sluggedVideo' ]  127              video_id 
=  video_data
[ 'id' ]  129          info 
=  self
._ extract
_ cvp
_ info
(  130              'http://www.adultswim.com/videos/api/v0/assets?platform=desktop&id='  +  video_id
,  133                      'media_src' :  'http://androidhls-secure.cdn.turner.com/adultswim/big' ,  134                      'tokenizer_src' :  'http://www.adultswim.com/astv/mvpd/processors/services/token_ipadAdobe.do' ,  138                  'site_name' :  'AdultSwim' ,  139                  'auth_required' :  video_data
. get ( 'auth' ),  144              'display_id' :  display_id
,  145              'description' :  info
. get ( 'description' )  or  strip_or_none ( video_data
. get ( 'description' )),  149                  'duration' :  info
. get ( 'duration' )  or  int_or_none ( video_data
. get ( 'duration' )),  150                  'timestamp' :  info
. get ( 'timestamp' )  or  int_or_none ( video_data
. get ( 'launch_date' )),  151                  'season_number' :  info
. get ( 'season_number' )  or  int_or_none ( video_data
. get ( 'season_number' )),  152                  'episode' :  info
[ 'title' ],  153                  'episode_number' :  info
. get ( 'episode_number' )  or  int_or_none ( video_data
. get ( 'episode_number' )),  156              info
[ 'series' ] =  video_data
. get ( 'collection_title' )  or  info
. get ( 'series' )  157              if  info
[ 'series' ]  and  info
[ 'series' ] !=  info
[ 'title' ]:  158                  info
[ 'title' ] =  ' %s  -  %s '  % ( info
[ 'series' ],  info
[ 'title' ])