2014-07-22 17:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  __future__  import  unicode_literals  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-19 23:40:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . theplatform  import  ThePlatformFeedIE  
						 
					
						
							
								
									
										
										
										
											2015-11-21 22:18:17 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . . utils  import  (  
						 
					
						
							
								
									
										
										
										
											2018-03-20 00:27:39 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ExtractorError , 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-01 07:33:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int_or_none , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    find_xpath_attr , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 19:27:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    xpath_element , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    xpath_text , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    update_url_query , 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-21 22:18:17 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
									
										
										
										
											2013-12-16 03:53:43 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-19 23:40:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CBSBaseIE ( ThePlatformFeedIE ) :  
						 
					
						
							
								
									
										
										
										
											2016-04-01 10:12:29 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  _parse_smil_subtitles ( self ,  smil ,  namespace = None ,  subtitles_lang = ' en ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        closed_caption_e  =  find_xpath_attr ( smil ,  self . _xpath_ns ( ' .//param ' ,  namespace ) ,  ' name ' ,  ' ClosedCaptionURL ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' en ' :  [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' ext ' :  ' ttml ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' url ' :  closed_caption_e . attrib [ ' value ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  if  closed_caption_e  is  not  None  and  closed_caption_e . attrib . get ( ' value ' )  else  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CBSIE ( CBSBaseIE ) :  
						 
					
						
							
								
									
										
										
										
											2016-06-19 23:55:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _VALID_URL  =  r ' (?:cbs:|https?://(?:www \ .)?(?:cbs \ .com/shows/[^/]+/video|colbertlateshow \ .com/(?:video|podcasts))/)(?P<id>[ \ w-]+) ' 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-16 03:53:43 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-22 07:56:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _TESTS  =  [ { 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-22 17:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.cbs.com/shows/garth-brooks/video/_u7W953k6la293J7EPTd9oHkSPs6Xn6_/connect-chat-feat-garth-brooks/ ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-01 07:33:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' id ' :  ' _u7W953k6la293J7EPTd9oHkSPs6Xn6_ ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' ext ' :  ' mp4 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-22 17:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' title ' :  ' Connect Chat feat. Garth Brooks ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' 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! ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' duration ' :  1495 , 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-01 18:06:11 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' timestamp ' :  1385585425 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' upload_date ' :  ' 20131127 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' uploader ' :  ' CBSI-NEW ' , 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-16 03:53:43 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-20 13:25:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' params ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            # m3u8 download 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' skip_download ' :  True , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-22 17:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' _skip ' :  ' Blocked outside the US ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-09 21:23:53 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' url ' :  ' http://colbertlateshow.com/video/8GmB0oY0McANFvp2aEffk9jZZZ2YyXxy/the-colbeard/ ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' only_matching ' :  True , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ,  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-09 21:39:45 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.colbertlateshow.com/podcasts/dYSwjqPs_X1tvbV_P2FcPWRa_qT6akTC/in-the-bad-room-with-stephen/ ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-09 21:23:53 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' only_matching ' :  True , 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-22 07:56:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ] 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-20 13:25:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-27 20:23:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  _extract_video_info ( self ,  content_id ,  site = ' cbs ' ,  mpx_acc = 2198311517 ) : 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 19:27:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        items_data  =  self . _download_xml ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' http://can.cbs.com/thunder/player/videoPlayerService.php ' , 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-27 20:23:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            content_id ,  query = { ' partner ' :  site ,  ' contentId ' :  content_id } ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 19:27:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        video_data  =  xpath_element ( items_data ,  ' .//item ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        title  =  xpath_text ( video_data ,  ' videoTitle ' ,  ' title ' ,  True ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-27 20:23:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        tp_path  =  ' dJ5BDC/media/guid/ %d / %s '  %  ( mpx_acc ,  content_id ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 19:27:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        tp_release_url  =  ' http://link.theplatform.com/s/ '  +  tp_path 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        asset_types  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subtitles  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        formats  =  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-20 00:27:39 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        last_e  =  None 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 19:27:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  item  in  items_data . findall ( ' .//item ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            asset_type  =  xpath_text ( item ,  ' assetType ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-16 07:48:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  not  asset_type  or  asset_type  in  asset_types  or  asset_type  in  ( ' HLS_FPS ' ,  ' DASH_CENC ' ) : 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-20 13:25:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                continue 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 19:27:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            asset_types . append ( asset_type ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            query  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' mbr ' :  ' true ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' assetTypes ' :  asset_type , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  asset_type . startswith ( ' HLS ' )  or  asset_type  in  ( ' OnceURL ' ,  ' StreamPack ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                query [ ' formats ' ]  =  ' MPEG4,M3U ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            elif  asset_type  in  ( ' RTMP ' ,  ' WIFI ' ,  ' 3G ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                query [ ' formats ' ]  =  ' MPEG4,FLV ' 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-20 00:27:39 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                tp_formats ,  tp_subtitles  =  self . _extract_theplatform_smil ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    update_url_query ( tp_release_url ,  query ) ,  content_id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' Downloading  %s  SMIL data '  %  asset_type ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            except  ExtractorError  as  e : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                last_e  =  e 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                continue 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 19:27:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            formats . extend ( tp_formats ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            subtitles  =  self . _merge_subtitles ( subtitles ,  tp_subtitles ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-20 00:27:39 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  last_e  and  not  formats : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            raise  last_e 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-20 13:25:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . _sort_formats ( formats ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 19:27:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        info  =  self . _extract_theplatform_metadata ( tp_path ,  content_id ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-20 13:25:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        info . update ( { 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 19:27:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' id ' :  content_id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  title , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' series ' :  xpath_text ( video_data ,  ' seriesTitle ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' season_number ' :  int_or_none ( xpath_text ( video_data ,  ' seasonNumber ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' episode_number ' :  int_or_none ( xpath_text ( video_data ,  ' episodeNumber ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' duration ' :  int_or_none ( xpath_text ( video_data ,  ' videoLength ' ) ,  1000 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' thumbnail ' :  xpath_text ( video_data ,  ' previewImageURL ' ) , 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-20 13:25:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' formats ' :  formats , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' subtitles ' :  subtitles , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  info 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-01 07:33:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-16 03:53:43 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    def  _real_extract ( self ,  url ) : 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-19 23:40:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        content_id  =  self . _match_id ( url ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-20 13:25:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  self . _extract_video_info ( content_id )