]>
 
 
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/cbs.py 
 
 
 
 
 
 
 
 
   1  from  __future__ 
import  unicode_literals
 
   3  from  . theplatform 
import  ThePlatformFeedIE
 
  13  class  CBSBaseIE ( ThePlatformFeedIE
):  
  14      def  _parse_smil_subtitles ( self
,  smil
,  namespace
= None ,  subtitles_lang
= 'en' ):  
  15          closed_caption_e 
=  find_xpath_attr ( smil
,  self
._ xpath
_ ns
( './/param' ,  namespace
),  'name' ,  'ClosedCaptionURL' )  
  19                  'url' :  closed_caption_e
. attrib
[ 'value' ],  
  21          }  if  closed_caption_e 
is not None and  closed_caption_e
. attrib
. get ( 'value' )  else  []  
  24  class  CBSIE ( CBSBaseIE
):  
  25      _VALID_URL 
=  r
'(?:cbs:|https?://(?:www\.)?(?:cbs\.com/shows/[^/]+/video|colbertlateshow\.com/(?:video|podcasts))/)(?P<id>[\w-]+)'  
  28          'url' :  'http://www.cbs.com/shows/garth-brooks/video/_u7W953k6la293J7EPTd9oHkSPs6Xn6_/connect-chat-feat-garth-brooks/' ,  
  30              'id' :  '_u7W953k6la293J7EPTd9oHkSPs6Xn6_' ,  
  32              'title' :  'Connect Chat feat. Garth Brooks' ,  
  33              'description' :  'Connect with country music singer Garth Brooks, as he chats with fans on Wednesday November 27, 2013. Be sure to tune in to Garth Brooks: Live from Las Vegas, Friday November 29, at 9/8c on CBS!' ,  
  35              'timestamp' :  1385585425 ,  
  36              'upload_date' :  '20131127' ,  
  37              'uploader' :  'CBSI-NEW' ,  
  41              'skip_download' :  True ,  
  43          '_skip' :  'Blocked outside the US' ,  
  45          'url' :  'http://colbertlateshow.com/video/8GmB0oY0McANFvp2aEffk9jZZZ2YyXxy/the-colbeard/' ,  
  46          'only_matching' :  True ,  
  48          'url' :  'http://www.colbertlateshow.com/podcasts/dYSwjqPs_X1tvbV_P2FcPWRa_qT6akTC/in-the-bad-room-with-stephen/' ,  
  49          'only_matching' :  True ,  
  52      def  _extract_video_info ( self
,  content_id
):  
  53          items_data 
=  self
._ download
_ xml
(  
  54              'http://can.cbs.com/thunder/player/videoPlayerService.php' ,  
  55              content_id
,  query
={ 'partner' :  'cbs' ,  'contentId' :  content_id
})  
  56          video_data 
=  xpath_element ( items_data
,  './/item' )  
  57          title 
=  xpath_text ( video_data
,  'videoTitle' ,  'title' ,  True )  
  58          tp_path 
=  'dJ5BDC/media/guid/2198311517/ %s '  %  content_id
 
  59          tp_release_url 
=  'http://link.theplatform.com/s/'  +  tp_path
 
  64          for  item 
in  items_data
. findall ( './/item' ):  
  65              asset_type 
=  xpath_text ( item
,  'assetType' )  
  66              if not  asset_type 
or  asset_type 
in  asset_types
:  
  68              asset_types
. append ( asset_type
)  
  71                  'assetTypes' :  asset_type
,  
  73              if  asset_type
. startswith ( 'HLS' )  or  asset_type 
in  ( 'OnceURL' ,  'StreamPack' ):  
  74                  query
[ 'formats' ] =  'MPEG4,M3U'  
  75              elif  asset_type 
in  ( 'RTMP' ,  'WIFI' ,  '3G' ):  
  76                  query
[ 'formats' ] =  'MPEG4,FLV'  
  77              tp_formats
,  tp_subtitles 
=  self
._ extract
_ theplatform
_ smil
(  
  78                  update_url_query ( tp_release_url
,  query
),  content_id
,  
  79                  'Downloading  %s  SMIL data'  %  asset_type
)  
  80              formats
. extend ( tp_formats
)  
  81              subtitles 
=  self
._ merge
_ subtitles
( subtitles
,  tp_subtitles
)  
  82          self
._ sort
_ formats
( formats
)  
  84          info 
=  self
._ extract
_ theplatform
_ metadata
( tp_path
,  content_id
)  
  88              'series' :  xpath_text ( video_data
,  'seriesTitle' ),  
  89              'season_number' :  int_or_none ( xpath_text ( video_data
,  'seasonNumber' )),  
  90              'episode_number' :  int_or_none ( xpath_text ( video_data
,  'episodeNumber' )),  
  91              'duration' :  int_or_none ( xpath_text ( video_data
,  'videoLength' ),  1000 ),  
  92              'thumbnail' :  xpath_text ( video_data
,  'previewImageURL' ),  
  94              'subtitles' :  subtitles
,  
  98      def  _real_extract ( self
,  url
):  
  99          content_id 
=  self
._ match
_ id
( url
)  
 100          return  self
._ extract
_ video
_ info
( content_id
)