2014-01-17 03:52:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  __future__  import  unicode_literals  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  json  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  re  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-02 19:48:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . subtitles  import  SubtitlesInfoExtractor  
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-05 12:00:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . . utils  import  (  
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:22:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    compat_str , 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-05 12:00:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-01-17 03:52:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-02 19:48:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  TEDIE ( SubtitlesInfoExtractor ) :  
						 
					
						
							
								
									
										
										
										
											2014-03-20 16:33:23 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _VALID_URL  =  r ''' (?x) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( ? P < proto > https ? : / / ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( ? P < type > www | embed ) ( ? P < urlmain > \. ted \. com / 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ? P < type_playlist > playlists ( ? : / \d + ) ? )  # We have a playlist 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ( ? P < type_talk > talks ) )  # We have a simple talk 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-27 02:22:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ? P < type_watch > watch ) / [ ^ / ] + / [ ^ / ] + 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( / lang / ( . * ? ) ) ?  # The url may contain the language 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-27 02:22:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        / ( ? P < name > [ \w - ] + )  # Here goes the name and then ".html" 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-20 16:33:23 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        . * ) $ 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ''' 
 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-27 02:22:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _TESTS  =  [ { 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-17 03:52:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.ted.com/talks/dan_dennett_on_our_consciousness.html ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-17 03:54:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' md5 ' :  ' 4ea1dada91e4174b53dac2bb8ace429d ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-17 03:52:17 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 14:27:45 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' id ' :  ' 102 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' ext ' :  ' mp4 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' title ' :  ' The illusion of consciousness ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' description ' :  ( ' Philosopher Dan Dennett makes a compelling  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' argument that not only don \' t we understand our own  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' consciousness, but that half the time our brains are  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' actively fooling us. ' ) , 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' uploader ' :  ' Dan Dennett ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-07 13:07:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' width ' :  854 , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-27 20:46:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-27 02:22:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.ted.com/watch/ted-institute/ted-bcg/vishal-sikka-the-beauty-and-power-of-algorithms ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' md5 ' :  ' 226f4fb9c62380d11b7995efa4c87994 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  ' vishal-sikka-the-beauty-and-power-of-algorithms ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' ext ' :  ' mp4 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  ' Vishal Sikka: The beauty and power of algorithms ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' thumbnail ' :  ' re:^https?://.+ \ .jpg ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' description ' :  ' Adaptive, intelligent, and consistent, algorithms are emerging as the ultimate app for everything from matching consumers to products to assessing medical diagnoses. Vishal Sikka shares his appreciation for the algorithm, charting both its inherent beauty and its growing power. ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-14 15:23:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.ted.com/talks/gabby_giffords_and_mark_kelly_be_passionate_be_courageous_be_your_best ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-22 19:49:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' md5 ' :  ' 49144e345a899b8cb34d315f3b9cfeeb ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-14 15:23:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  ' 1972 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-22 19:49:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' ext ' :  ' mp4 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-14 15:23:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' title ' :  ' Be passionate. Be courageous. Be your best. ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' uploader ' :  ' Gabby Giffords and Mark Kelly ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-22 19:49:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' description ' :  ' md5:5174aed4d0f16021b704120360f72b92 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-14 15:23:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-27 02:22:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ] 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-04-07 13:07:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _NATIVE_FORMATS  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' low ' :  { ' preference ' :  1 ,  ' width ' :  320 ,  ' height ' :  180 } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' medium ' :  { ' preference ' :  2 ,  ' width ' :  512 ,  ' height ' :  288 } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' high ' :  { ' preference ' :  3 ,  ' width ' :  854 ,  ' height ' :  480 } , 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:22:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  _extract_info ( self ,  webpage ) : 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        info_json  =  self . _search_regex ( r ' q \ ( " \ w+.init " ,( { .+}) \ )</script> ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            webpage ,  ' info json ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:22:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  json . loads ( info_json ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    def  _real_extract ( self ,  url ) : 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        m  =  re . match ( self . _VALID_URL ,  url ,  re . VERBOSE ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-20 16:33:23 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  m . group ( ' type ' )  ==  ' embed ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            desktop_url  =  m . group ( ' proto ' )  +  ' www '  +  m . group ( ' urlmain ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  self . url_result ( desktop_url ,  ' TED ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        name  =  m . group ( ' name ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        if  m . group ( ' type_talk ' ) : 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  self . _talk_info ( url ,  name ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-27 02:22:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        elif  m . group ( ' type_watch ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  self . _watch_info ( url ,  name ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:22:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  self . _playlist_videos_info ( url ,  name ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:22:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  _playlist_videos_info ( self ,  url ,  name ) : 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        ''' Returns the videos of the playlist ''' 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-15 14:33:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:22:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        webpage  =  self . _download_webpage ( url ,  name , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' Downloading playlist webpage ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        info  =  self . _extract_info ( webpage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        playlist_info  =  info [ ' playlist ' ] 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-15 14:33:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        playlist_entries  =  [ 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 12:34:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self . url_result ( ' http://www.ted.com/talks/ '  +  talk [ ' slug ' ] ,  self . ie_key ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:22:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            for  talk  in  info [ ' talks ' ] 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-15 14:33:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  self . playlist_result ( 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:22:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            playlist_entries , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            playlist_id = compat_str ( playlist_info [ ' id ' ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            playlist_title = playlist_info [ ' title ' ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:27:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  _talk_info ( self ,  url ,  video_name ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        webpage  =  self . _download_webpage ( url ,  video_name ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:55:53 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        self . report_extraction ( video_name ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-02 19:48:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 13:22:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        talk_info  =  self . _extract_info ( webpage ) [ ' talks ' ] [ 0 ] 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-02 19:48:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        formats  =  [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' url ' :  format_url , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' format_id ' :  format_id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' format ' :  format_id , 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-14 15:23:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  for  ( format_id ,  format_url )  in  talk_info [ ' nativeDownloads ' ] . items ( )  if  format_url  is  not  None ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  formats : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  f  in  formats : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                finfo  =  self . _NATIVE_FORMATS . get ( f [ ' format_id ' ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  finfo : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    f . update ( finfo ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            # Use rtmp downloads 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            formats  =  [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' format_id ' :  f [ ' name ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' url ' :  talk_info [ ' streamer ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' play_path ' :  f [ ' file ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' ext ' :  ' flv ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' width ' :  f [ ' width ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' height ' :  f [ ' height ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' tbr ' :  f [ ' bitrate ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  for  f  in  talk_info [ ' resources ' ] [ ' rtmp ' ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self . _sort_formats ( formats ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-05 14:27:45 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        video_id  =  compat_str ( talk_info [ ' id ' ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-02 19:48:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # subtitles 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        video_subtitles  =  self . extract_subtitles ( video_id ,  talk_info ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-02 19:48:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  self . _downloader . params . get ( ' listsubtitles ' ,  False ) : 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self . _list_available_subtitles ( video_id ,  talk_info ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-02 19:48:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-16 11:24:11 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        thumbnail  =  talk_info [ ' thumb ' ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  not  thumbnail . startswith ( ' http ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            thumbnail  =  ' http:// '  +  thumbnail 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-15 14:06:38 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-02 19:48:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' id ' :  video_id , 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' title ' :  talk_info [ ' title ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' uploader ' :  talk_info [ ' speaker ' ] , 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-16 11:24:11 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' thumbnail ' :  thumbnail , 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' description ' :  self . _og_search_description ( webpage ) , 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-02 19:48:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' subtitles ' :  video_subtitles , 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-04 10:32:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' formats ' :  formats , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  _get_available_subtitles ( self ,  video_id ,  talk_info ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        languages  =  [ lang [ ' languageCode ' ]  for  lang  in  talk_info . get ( ' languages ' ,  [ ] ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  languages : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            sub_lang_list  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  l  in  languages : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                url  =  ' http://www.ted.com/talks/subtitles/id/ %s /lang/ %s /format/srt '  %  ( video_id ,  l ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                sub_lang_list [ l ]  =  url 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  sub_lang_list 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 12:34:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self . _downloader . report_warning ( ' video doesn \' t have subtitles ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-04 21:47:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  { } 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-27 02:22:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _watch_info ( self ,  url ,  name ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        webpage  =  self . _download_webpage ( url ,  name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        config_json  =  self . _html_search_regex ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            r " data-config= ' ([^ ' ]+) " ,  webpage ,  ' config ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        config  =  json . loads ( config_json ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        video_url  =  config [ ' video ' ] [ ' url ' ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        thumbnail  =  config . get ( ' image ' ,  { } ) . get ( ' url ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        title  =  self . _html_search_regex ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            r " (?s)<h1(?: \ s+class= ' [^ ' ]+ ' )?>(.+?)</h1> " ,  webpage ,  ' title ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        description  =  self . _html_search_regex ( 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 12:37:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                r ' (?s)<h4 class= " [^ " ]+ "  id= " h3--about-this-talk " >.*?</h4>(.*?)</div> ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                r ' (?s)<p><strong>About this talk:</strong> \ s+(.*?)</p> ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ] , 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-27 02:22:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            webpage ,  ' description ' ,  fatal = False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  name , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' url ' :  video_url , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  title , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' thumbnail ' :  thumbnail , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' description ' :  description , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }