2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  json  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  re  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  . common  import  InfoExtractor  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  . . utils  import  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    compat_str , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    compat_urllib_parse , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ExtractorError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  EscapistIE ( InfoExtractor ) :  
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _VALID_URL  =  r ' ^https?://?(www \ .)?escapistmagazine \ .com/videos/view/(?P<showname>[^/]+)/(?P<episode>[^/?]+)[/?]?.*$ ' 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-27 20:46:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _TEST  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        u ' url ' :  u ' http://www.escapistmagazine.com/videos/view/the-escapist-presents/6618-Breaking-Down-Baldurs-Gate ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        u ' file ' :  u ' 6618-Breaking-Down-Baldurs-Gate.mp4 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        u ' md5 ' :  u ' ab3a706c681efca53f0a35f1415cf0d1 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-27 20:46:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        u ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            u " description " :  u " Baldur ' s Gate: Original, Modded or Enhanced Edition? I ' ll break down what you can expect from the new Baldur ' s Gate: Enhanced Edition. " ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            u " uploader " :  u " the-escapist-presents " ,  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            u " title " :  u " Breaking Down Baldur ' s Gate " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _real_extract ( self ,  url ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        mobj  =  re . match ( self . _VALID_URL ,  url ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        showName  =  mobj . group ( ' showname ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        videoId  =  mobj . group ( ' episode ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . report_extraction ( videoId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        webpage  =  self . _download_webpage ( url ,  videoId ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        videoDesc  =  self . _html_search_regex ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            r ' <meta name= " description "  content= " ([^ " ]*) " ' , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            webpage ,  u ' description ' ,  fatal = False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 07:23:23 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        playerUrl  =  self . _og_search_video_url ( webpage ,  name = u ' player URL ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        title  =  self . _html_search_regex ( 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 07:23:23 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            r ' <meta name= " title "  content= " ([^ " ]*) " ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            webpage ,  u ' title ' ) . split ( '  :  ' ) [ - 1 ] 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:56:59 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        configUrl  =  self . _search_regex ( ' config=(.*)$ ' ,  playerUrl ,  u ' config URL ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        configUrl  =  compat_urllib_parse . unquote ( configUrl ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        formats  =  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        def  _add_format ( name ,  cfgurl ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            configJSON  =  self . _download_webpage ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                cfgurl ,  videoId , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                u ' Downloading  '  +  name  +  '  configuration ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                u ' Unable to download  '  +  name  +  '  configuration ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            # Technically, it's JavaScript, not JSON 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            configJSON  =  configJSON . replace ( " ' " ,  ' " ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                config  =  json . loads ( configJSON ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            except  ( ValueError , )  as  err : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                raise  ExtractorError ( u ' Invalid JSON in configuration file:  '  +  compat_str ( err ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            playlist  =  config [ ' playlist ' ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            formats . append ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' url ' :  playlist [ 1 ] [ ' url ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' format_id ' :  name , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        _add_format ( u ' normal ' ,  configUrl ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:55:07 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        hq_url  =  ( configUrl  + 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  ( ' &hq=1 '  if  ' ? '  in  configUrl  else  configUrl  +  ' ?hq=1 ' ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        try : 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:55:07 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            _add_format ( u ' hq ' ,  hq_url ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        except  ExtractorError : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pass   # That's fine, we'll just use normal quality 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            ' id ' :  videoId , 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-20 06:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' formats ' :  formats , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            ' uploader ' :  showName , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  title , 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-12 19:00:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' thumbnail ' :  self . _og_search_thumbnail ( webpage ) , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 21:08:17 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            ' description ' :  videoDesc , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' player_url ' :  playerUrl , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }