2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# coding: utf-8  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  __future__  import  unicode_literals  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-23 13:28:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . theplatform  import  ThePlatformIE  
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . . utils  import  int_or_none  
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CNETIE ( ThePlatformIE ) :  
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    _VALID_URL  =  r ' https?://(?:www \ .)?cnet \ .com/videos/(?P<id>[^/]+)/ ' 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-08 13:32:04 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _TESTS  =  [ { 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.cnet.com/videos/hands-on-with-microsofts-windows-8-1-update/ ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  ' 56f4ea68-bd21-4852-b08c-4de5b8354c60 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' ext ' :  ' flv ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            ' title ' :  ' Hands-on with Microsoft Windows 8.1 Update ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' description ' :  ' The new update to the Windows 8 OS brings improved performance for mouse and keyboard users. ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-12 15:55:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' uploader_id ' :  ' 6085384d-619e-11e3-b231-14feb5ca9861 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            ' uploader ' :  ' Sarah Mitroff ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' duration ' :  70 , 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-12 15:55:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-08 13:32:04 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.cnet.com/videos/whiny-pothole-tweets-at-local-government-when-hit-by-cars-tomorrow-daily-187/ ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  ' 56527b93-d25d-44e3-b738-f989ce2e49ba ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' ext ' :  ' flv ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  ' Whiny potholes tweet at local government when hit by cars (Tomorrow Daily 187) ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-08 13:32:04 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' description ' :  ' Khail and Ashley wonder what other civic woes can be solved by self-tweeting objects, investigate a new kind of VR camera and watch an origami robot self-assemble, walk, climb, dig and dissolve. #TDPothole ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' uploader_id ' :  ' b163284d-6b73-44fc-b3e6-3da66c392d40 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' uploader ' :  ' Ashley Esqueda ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' duration ' :  1482 , 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-08 13:32:04 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ] 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _real_extract ( self ,  url ) : 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-12 15:55:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        display_id  =  self . _match_id ( url ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        webpage  =  self . _download_webpage ( url ,  display_id ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-12 15:55:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        data_json  =  self . _html_search_regex ( 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            r " data-cnet-video(?:-uvp)?-options= ' ([^ ' ]+) ' " , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            webpage ,  ' data json ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        data  =  self . _parse_json ( data_json ,  display_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        vdata  =  data . get ( ' video ' )  or  data [ ' videos ' ] [ 0 ] 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-12 15:55:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        video_id  =  vdata [ ' id ' ] 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-23 13:28:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        title  =  vdata [ ' title ' ] 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        author  =  vdata . get ( ' author ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  author : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            uploader  =  ' %s   %s '  %  ( author [ ' firstName ' ] ,  author [ ' lastName ' ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-12 15:55:55 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            uploader_id  =  author . get ( ' id ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            uploader  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            uploader_id  =  None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-05 21:10:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        metadata  =  self . get_metadata ( ' kYEXFC/ %s '  %  list ( vdata [ ' files ' ] . values ( ) ) [ 0 ] ,  video_id ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        description  =  vdata . get ( ' description ' )  or  metadata . get ( ' description ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        duration  =  int_or_none ( vdata . get ( ' duration ' ) )  or  metadata . get ( ' duration ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-23 13:28:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        formats  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subtitles  =  { } 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-06 07:23:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        for  ( fkey ,  vid )  in  vdata [ ' files ' ] . items ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  fkey  ==  ' hls_phone '  and  ' hls_tablet '  in  vdata [ ' files ' ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                continue 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-05 21:10:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            release_url  =  ' http://link.theplatform.com/s/kYEXFC/ %s ?format=SMIL&mbr=true '  %  vid 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  fkey  ==  ' hds ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                release_url  + =  ' &manifest=f4m ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            tp_formats ,  tp_subtitles  =  self . _extract_theplatform_smil ( release_url ,  video_id ,  ' Downloading  %s  SMIL data '  %  fkey ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            formats . extend ( tp_formats ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            subtitles  =  self . _merge_subtitles ( subtitles ,  tp_subtitles ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-23 13:28:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . _sort_formats ( formats ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  video_id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' display_id ' :  display_id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  title , 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-23 13:28:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' description ' :  description , 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-20 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' thumbnail ' :  metadata . get ( ' thumbnail ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' duration ' :  duration , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            ' uploader ' :  uploader , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' uploader_id ' :  uploader_id , 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-23 13:28:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' subtitles ' :  subtitles , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' formats ' :  formats , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-03 16:21:21 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        }