]>
 
 
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/abc.py 
 
 
 
 
 
 
 
 
   1  from  __future__ 
import  unicode_literals
 
   8  from  . common 
import  InfoExtractor
 
   9  from  .. compat 
import  compat_str
 
  21  class  ABCIE ( InfoExtractor
):  
  22      IE_NAME 
=  'abc.net.au'  
  23      _VALID_URL 
=  r
'https?://(?:www\.)?abc\.net\.au/news/(?:[^/]+/){1,2}(?P<id>\d+)'  
  26          'url' :  'http://www.abc.net.au/news/2014-11-05/australia-to-staff-ebola-treatment-centre-in-sierra-leone/5868334' ,  
  27          'md5' :  'cb3dd03b18455a661071ee1e28344d9f' ,  
  31              'title' :  'Australia to help staff Ebola treatment centre in Sierra Leone' ,  
  32              'description' :  'md5:809ad29c67a05f54eb41f2a105693a67' ,  
  34          'skip' :  'this video has expired' ,  
  36          'url' :  'http://www.abc.net.au/news/2015-08-17/warren-entsch-introduces-same-sex-marriage-bill/6702326' ,  
  37          'md5' :  'db2a5369238b51f9811ad815b69dc086' ,  
  41              'upload_date' :  '20150816' ,  
  42              'uploader' :  'ABC News (Australia)' ,  
  43              'description' :  'Government backbencher Warren Entsch introduces a cross-party sponsored bill to legalise same-sex marriage, saying the bill is designed to promote "an inclusive Australia, not a divided one.". Read more here: http://ab.co/1Mwc6ef' ,  
  44              'uploader_id' :  'NewsOnABC' ,  
  45              'title' :  'Marriage Equality: Warren Entsch introduces same sex marriage bill' ,  
  47          'add_ie' : [ 'Youtube' ],  
  48          'skip' :  'Not accessible from Travis CI server' ,  
  50          'url' :  'http://www.abc.net.au/news/2015-10-23/nab-lifts-interest-rates-following-westpac-and-cba/6880080' ,  
  51          'md5' :  'b96eee7c9edf4fc5a358a0252881cc1f' ,  
  55              'title' :  'NAB lifts interest rates, following Westpac and CBA' ,  
  56              'description' :  'md5:f13d8edc81e462fce4a0437c7dc04728' ,  
  59          'url' :  'http://www.abc.net.au/news/2015-10-19/6866214' ,  
  60          'only_matching' :  True ,  
  63      def  _real_extract ( self
,  url
):  
  64          video_id 
=  self
._ match
_ id
( url
)  
  65          webpage 
=  self
._ download
_ webpage
( url
,  video_id
)  
  68              r
'inline(?P<type>Video|Audio|YouTube)Data\.push\((?P<json_data>[^)]+)\);' ,  
  71              expired 
=  self
._ html
_ search
_ regex
( r
'(?s)class="expired-(?:video|audio)".+?<span>(.+?)</span>' ,  webpage
,  'expired' ,  None )  
  73                  raise  ExtractorError ( ' %s  said:  %s '  % ( self
. IE_NAME
,  expired
),  expected
= True )  
  74              raise  ExtractorError ( 'Unable to extract video urls' )  
  76          urls_info 
=  self
._ parse
_ json
(  
  77              mobj
. group ( 'json_data' ),  video_id
,  transform_source
= js_to_json
)  
  79          if not  isinstance ( urls_info
,  list ):  
  80              urls_info 
= [ urls_info
]  
  82          if  mobj
. group ( 'type' ) ==  'YouTube' :  
  83              return  self
. playlist_result ([  
  84                  self
. url_result ( url_info
[ 'url' ])  for  url_info 
in  urls_info
])  
  87              'url' :  url_info
[ 'url' ],  
  88              'vcodec' :  url_info
. get ( 'codec' )  if  mobj
. group ( 'type' ) ==  'Video'  else  'none' ,  
  89              'width' :  int_or_none ( url_info
. get ( 'width' )),  
  90              'height' :  int_or_none ( url_info
. get ( 'height' )),  
  91              'tbr' :  int_or_none ( url_info
. get ( 'bitrate' )),  
  92              'filesize' :  int_or_none ( url_info
. get ( 'filesize' )),  
  93          }  for  url_info 
in  urls_info
]  
  95          self
._ sort
_ formats
( formats
)  
  99              'title' :  self
._ og
_ search
_ title
( webpage
),  
 101              'description' :  self
._ og
_ search
_ description
( webpage
),  
 102              'thumbnail' :  self
._ og
_ search
_ thumbnail
( webpage
),  
 106  class  ABCIViewIE ( InfoExtractor
):  
 107      IE_NAME 
=  'abc.net.au:iview'  
 108      _VALID_URL 
=  r
'https?://iview\.abc\.net\.au/(?:[^/]+/)*video/(?P<id>[^/?#]+)'  
 109      _GEO_COUNTRIES 
= [ 'AU' ]  
 111      # ABC iview programs are normally available for 14 days only.  
 113          'url' :  'https://iview.abc.net.au/show/ben-and-hollys-little-kingdom/series/0/video/ZX9371A050S00' ,  
 114          'md5' :  'cde42d728b3b7c2b32b1b94b4a548afc' ,  
 116              'id' :  'ZX9371A050S00' ,  
 118              'title' :  "Gaston's Birthday" ,  
 119              'series' :  "Ben And Holly's Little Kingdom" ,  
 120              'description' :  'md5:f9de914d02f226968f598ac76f105bcf' ,  
 121              'upload_date' :  '20180604' ,  
 122              'uploader_id' :  'abc4kids' ,  
 123              'timestamp' :  1528140219 ,  
 126              'skip_download' :  True ,  
 130      def  _real_extract ( self
,  url
):  
 131          video_id 
=  self
._ match
_ id
( url
)  
 132          video_params 
=  self
._ download
_ json
(  
 133              'https://iview.abc.net.au/api/programs/'  +  video_id
,  video_id
)  
 134          title 
=  unescapeHTML ( video_params
. get ( 'title' )  or  video_params
[ 'seriesTitle' ])  
 135          stream 
=  next ( s 
for  s 
in  video_params
[ 'playlist' ]  if  s
. get ( 'type' )  in  ( 'program' ,  'livestream' ))  
 137          house_number 
=  video_params
. get ( 'episodeHouseNumber' )  or  video_id
 
 138          path 
=  '/auth/hls/sign?ts= {0} &hn= {1} &d=android-tablet' . format (  
 139              int ( time
. time ()),  house_number
)  
 141              b
'android.content.res.Resources' ,  
 142              path
. encode ( 'utf-8' ),  hashlib
. sha256
). hexdigest ()  
 143          token 
=  self
._ download
_ webpage
(  
 144              'http://iview.abc.net.au {0} &sig= {1} ' . format ( path
,  sig
),  video_id
)  
 146          def  tokenize_url ( url
,  token
):  
 147              return  update_url_query ( url
, {  
 151          for  sd 
in  ( 'sd' ,  'sd-low' ):  
 153                  stream
,  lambda  x
:  x
[ 'streams' ][ 'hls' ][ sd
],  compat_str
)  
 156              formats 
=  self
._ extract
_ m
3u8_ formats
(  
 157                  tokenize_url ( sd_url
,  token
),  video_id
,  'mp4' ,  
 158                  entry_protocol
= 'm3u8_native' ,  m3u8_id
= 'hls' ,  fatal
= False )  
 161          self
._ sort
_ formats
( formats
)  
 164          src_vtt 
=  stream
. get ( 'captions' , {}). get ( 'src-vtt' )  
 171          is_live 
=  video_params
. get ( 'livestream' ) ==  '1'  
 173              title 
=  self
._l ive
_ title
( title
)  
 178              'description' :  video_params
. get ( 'description' ),  
 179              'thumbnail' :  video_params
. get ( 'thumbnail' ),  
 180              'duration' :  int_or_none ( video_params
. get ( 'eventDuration' )),  
 181              'timestamp' :  parse_iso8601 ( video_params
. get ( 'pubDate' ),  ' ' ),  
 182              'series' :  unescapeHTML ( video_params
. get ( 'seriesTitle' )),  
 183              'series_id' :  video_params
. get ( 'seriesHouseNumber' )  or  video_id
[: 7 ],  
 184              'season_number' :  int_or_none ( self
._ search
_ regex
(  
 185                  r
'\bSeries\s+(\d+)\b' ,  title
,  'season number' ,  default
= None )),  
 186              'episode_number' :  int_or_none ( self
._ search
_ regex
(  
 187                  r
'\bEp\s+(\d+)\b' ,  title
,  'episode number' ,  default
= None )),  
 188              'episode_id' :  house_number
,  
 189              'uploader_id' :  video_params
. get ( 'channel' ),  
 191              'subtitles' :  subtitles
,