2014-02-13 16:32:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  __future__  import  unicode_literals  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  json  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								from  . common  import  InfoExtractor  
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . . compat  import  compat_urllib_request  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-12-13 12:24:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . . utils  import  (  
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    determine_ext , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    clean_html , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 18:59:22 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    int_or_none , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 19:04:49 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    float_or_none , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  _decrypt_config ( key ,  string ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    a  =  ' ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    i  =  ' ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    r  =  ' ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  len ( a )  <  ( len ( string )  /  2 ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        a  + =  key 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    a  =  a [ 0 : int ( len ( string )  /  2 ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    t  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  t  <  len ( string ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i  + =  chr ( int ( string [ t ]  +  string [ t  +  1 ] ,  16 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        t  + =  2 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    icko  =  [ s  for  s  in  i ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  t ,  c  in  enumerate ( a ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        r  + =  chr ( ord ( c )  ^  ord ( icko [ t ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  EscapistIE ( InfoExtractor ) :  
						 
					
						
							
								
									
										
										
										
											2015-05-04 19:01:08 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _VALID_URL  =  r ' https?://?(?:www \ .)?escapistmagazine \ .com/videos/view/[^/?#]+/(?P<id>[0-9]+)-[^/?#]*(?:$|[?#]) ' 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _TESTS  =  [ { 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-13 16:32:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.escapistmagazine.com/videos/view/the-escapist-presents/6618-Breaking-Down-Baldurs-Gate ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 19:00:34 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' md5 ' :  ' ab3a706c681efca53f0a35f1415cf0d1 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-13 16:32:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  ' 6618 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' ext ' :  ' mp4 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' description ' :  " Baldur ' s Gate: Original, Modded or Enhanced Edition? I ' ll break down what you can expect from the new Baldur ' s Gate: Enhanced Edition. " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  " Breaking Down Baldur ' s Gate " , 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-20 23:22:47 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' thumbnail ' :  ' re:^https?://.* \ .jpg$ ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-28 20:52:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' duration ' :  264 , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 19:06:07 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' uploader ' :  ' The Escapist ' , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-27 20:46:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.escapistmagazine.com/videos/view/zero-punctuation/10044-Evolve-One-vs-Multiplayer ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 19:00:34 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' md5 ' :  ' 9e8c437b0dbb0387d3bd3255ca77f6bf ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  ' 10044 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' ext ' :  ' mp4 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' description ' :  ' This week, Zero Punctuation reviews Evolve. ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  ' Evolve - One vs Multiplayer ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' thumbnail ' :  ' re:^https?://.* \ .jpg$ ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' duration ' :  304 , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 19:06:07 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' uploader ' :  ' The Escapist ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ] 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _real_extract ( self ,  url ) : 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-10 15:45:36 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        video_id  =  self . _match_id ( url ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        webpage  =  self . _download_webpage ( url ,  video_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 19:04:49 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ims_video  =  self . _parse_json ( 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 22:17:51 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            self . _search_regex ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                r ' imsVideo \ .play \ (( { .+?}) \ ); ' ,  webpage ,  ' imsVideo ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            video_id ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 19:04:49 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        video_id  =  ims_video [ ' videoID ' ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        key  =  ims_video [ ' hash ' ] 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 18:59:22 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        config_req  =  compat_urllib_request . Request ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' http://www.escapistmagazine.com/videos/ ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' vidconfig.php?videoID= %s &hash= %s '  %  ( video_id ,  key ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        config_req . add_header ( ' Referer ' ,  url ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        config  =  self . _download_webpage ( config_req ,  video_id ,  ' Downloading video config ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 18:59:22 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        data  =  json . loads ( _decrypt_config ( key ,  config ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 19:04:49 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        video_data  =  data [ ' videoData ' ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        title  =  clean_html ( video_data [ ' title ' ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        duration  =  float_or_none ( video_data . get ( ' duration ' ) ,  1000 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        uploader  =  video_data . get ( ' publisher ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 18:59:22 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        formats  =  [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' url ' :  video [ ' src ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' format_id ' :  ' %s - %s p '  %  ( determine_ext ( video [ ' src ' ] ) ,  video [ ' res ' ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' height ' :  int_or_none ( video . get ( ' res ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  for  video  in  data [ ' files ' ] [ ' videos ' ] ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _sort_formats ( formats ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-13 16:32:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' id ' :  video_id , 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' formats ' :  formats , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            ' title ' :  title , 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-12 19:00:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' thumbnail ' :  self . _og_search_thumbnail ( webpage ) , 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-27 17:44:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' description ' :  self . _og_search_description ( webpage ) , 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-28 20:52:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' duration ' :  duration , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 19:04:49 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' uploader ' :  uploader , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        }