]>
 
 
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/crackle.py 
 
 
 
 
 
 
 
 
   2  from  __future__ 
import  unicode_literals
,  division
 
   4  from  . common 
import  InfoExtractor
 
   5  from  .. utils 
import  int_or_none
 
   8  class  CrackleIE ( InfoExtractor
):  
   9      _GEO_COUNTRIES 
= [ 'US' ]  
  10      _VALID_URL 
=  r
'(?:crackle:|https?://(?:(?:www|m)\.)?crackle\.com/(?:playlist/\d+/|(?:[^/]+/)+))(?P<id>\d+)'  
  12          'url' :  'http://www.crackle.com/comedians-in-cars-getting-coffee/2498934' ,  
  16              'title' :  'Everybody Respects A Bloody Nose' ,  
  17              'description' :  'Jerry is kaffeeklatsching in L.A. with funnyman J.B. Smoove (Saturday Night Live, Real Husbands of Hollywood). They’re headed for brew at 10 Speed Coffee in a 1964 Studebaker Avanti.' ,  
  18              'thumbnail' :  r
're:^https?://.*\.jpg' ,  
  20              'series' :  'Comedians In Cars Getting Coffee' ,  
  32              'skip_download' :  True ,  
  61      # extracted from http://legacyweb-us.crackle.com/flash/ReferrerRedirect.ashx  
  81      def  _real_extract ( self
,  url
):  
  82          video_id 
=  self
._ match
_ id
( url
)  
  84          config_doc 
=  self
._ download
_ xml
(  
  85              'http://legacyweb-us.crackle.com/flash/QueryReferrer.ashx?site=16' ,  
  86              video_id
,  'Downloading config' )  
  88          item 
=  self
._ download
_ xml
(  
  89              'http://legacyweb-us.crackle.com/app/revamp/vidwallcache.aspx?flags=-1&fm= %s '  %  video_id
,  
  90              video_id
,  headers
= self
. geo_verification_headers ()). find ( 'i' )  
  91          title 
=  item
. attrib
[ 't' ]  
  94          formats 
=  self
._ extract
_ m
3u8_ formats
(  
  95              'http://content.uplynk.com/ext/ %s / %s .m3u8'  % ( config_doc
. attrib
[ 'strUplynkOwnerId' ],  video_id
),  
  96              video_id
,  'mp4' ,  m3u8_id
= 'hls' ,  fatal
= None )  
  98          path 
=  item
. attrib
. get ( 'p' )  
 100              for  width
,  height 
in  self
._ THUMBNAIL
_ RES
:  
 101                  res 
=  ' %dx%d '  % ( width
,  height
)  
 104                      'url' :  'http://images-us-am.crackle.com/ %s tnl_ %s .jpg'  % ( path
,  res
),  
 109              http_base_url 
=  'http://ahttp.crackle.com/'  +  path
 
 110              for  mfs_path
,  mfs_info 
in  self
._ MEDIA
_ FILE
_ SLOTS
. items ():  
 112                      'url' :  http_base_url 
+  mfs_path
,  
 113                      'format_id' :  'http-'  +  mfs_path
. split ( '.' )[ 0 ],  
 114                      'width' :  mfs_info
[ 'width' ],  
 115                      'height' :  mfs_info
[ 'height' ],  
 117              for  cc 
in  item
. findall ( 'cc' ):  
 118                  locale 
=  cc
. attrib
. get ( 'l' )  
 119                  v 
=  cc
. attrib
. get ( 'v' )  
 121                      if  locale 
not in  subtitles
:  
 122                          subtitles
[ locale
] = []  
 123                      for  url_ext
,  ext 
in  (( 'vtt' ,  'vtt' ), ( 'xml' ,  'tt' )):  
 124                          subtitles
. setdefault ( locale
, []). append ({  
 125                              'url' :  ' %s / %s%s _ %s . %s '  % ( config_doc
. attrib
[ 'strSubtitleServer' ],  path
,  locale
,  v
,  url_ext
),  
 128          self
._ sort
_ formats
( formats
, ( 'width' ,  'height' ,  'tbr' ,  'format_id' ))  
 133              'description' :  item
. attrib
. get ( 'd' ),  
 134              'duration' :  int ( item
. attrib
. get ( 'r' ),  16 ) /  1000  if  item
. attrib
. get ( 'r' )  else None ,  
 135              'series' :  item
. attrib
. get ( 'sn' ),  
 136              'season_number' :  int_or_none ( item
. attrib
. get ( 'se' )),  
 137              'episode_number' :  int_or_none ( item
. attrib
. get ( 'ep' )),  
 138              'thumbnails' :  thumbnails
,  
 139              'subtitles' :  subtitles
,