2013-06-23 19:08:17 +00:00
from . common import InfoExtractor
2014-12-13 11:24:42 +00:00
from . . utils import (
2015-04-27 15:44:13 +00:00
determine_ext ,
clean_html ,
2015-05-04 12:59:22 +00:00
int_or_none ,
2015-05-04 13:04:49 +00:00
float_or_none ,
2013-06-23 19:08:17 +00:00
)
2015-04-27 15:44:13 +00: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 19:08:17 +00:00
class EscapistIE ( InfoExtractor ) :
2019-03-11 07:18:57 +00:00
_VALID_URL = r ' https?://?(?:(?:www|v1) \ .)?escapistmagazine \ .com/videos/view/[^/]+/(?P<id>[0-9]+) '
2015-04-27 15:44:13 +00:00
_TESTS = [ {
2014-02-13 15:32:42 +00:00
' url ' : ' http://www.escapistmagazine.com/videos/view/the-escapist-presents/6618-Breaking-Down-Baldurs-Gate ' ,
2015-05-04 13:00:34 +00:00
' md5 ' : ' ab3a706c681efca53f0a35f1415cf0d1 ' ,
2014-02-13 15:32:42 +00: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 " ,
2017-01-02 12:08:07 +00:00
' thumbnail ' : r ' re:^https?://.* \ .jpg$ ' ,
2015-02-28 19:52:52 +00:00
' duration ' : 264 ,
2015-05-04 13:06:07 +00:00
' uploader ' : ' The Escapist ' ,
2013-06-27 18:46:46 +00:00
}
2015-04-27 15:44:13 +00:00
} , {
' url ' : ' http://www.escapistmagazine.com/videos/view/zero-punctuation/10044-Evolve-One-vs-Multiplayer ' ,
2015-05-04 13:00:34 +00:00
' md5 ' : ' 9e8c437b0dbb0387d3bd3255ca77f6bf ' ,
2015-04-27 15:44:13 +00:00
' info_dict ' : {
' id ' : ' 10044 ' ,
' ext ' : ' mp4 ' ,
' description ' : ' This week, Zero Punctuation reviews Evolve. ' ,
' title ' : ' Evolve - One vs Multiplayer ' ,
2017-01-02 12:08:07 +00:00
' thumbnail ' : r ' re:^https?://.* \ .jpg$ ' ,
2015-04-27 15:44:13 +00:00
' duration ' : 304 ,
2015-05-04 13:06:07 +00:00
' uploader ' : ' The Escapist ' ,
2015-04-27 15:44:13 +00:00
}
2019-03-11 07:18:57 +00:00
} , {
' url ' : ' http://escapistmagazine.com/videos/view/the-escapist-presents/6618 ' ,
' only_matching ' : True ,
} , {
' url ' : ' https://v1.escapistmagazine.com/videos/view/the-escapist-presents/6618-Breaking-Down-Baldurs-Gate ' ,
' only_matching ' : True ,
2015-04-27 15:44:13 +00:00
} ]
2013-06-23 19:08:17 +00:00
def _real_extract ( self , url ) :
2015-02-10 14:45:36 +00:00
video_id = self . _match_id ( url )
2015-04-27 15:44:13 +00:00
webpage = self . _download_webpage ( url , video_id )
2015-05-04 13:04:49 +00:00
ims_video = self . _parse_json (
2015-04-27 16:17:51 +00:00
self . _search_regex (
r ' imsVideo \ .play \ (( { .+?}) \ ); ' , webpage , ' imsVideo ' ) ,
video_id )
2015-05-04 13:04:49 +00:00
video_id = ims_video [ ' videoID ' ]
key = ims_video [ ' hash ' ]
2015-04-27 15:44:13 +00:00
2019-03-11 07:18:57 +00:00
config = self . _download_webpage (
' http://www.escapistmagazine.com/videos/vidconfig.php ' ,
video_id , ' Downloading video config ' , headers = {
' Referer ' : url ,
} , query = {
' videoID ' : video_id ,
' hash ' : key ,
} )
2013-06-23 19:08:17 +00:00
2019-03-11 07:18:57 +00:00
data = self . _parse_json ( _decrypt_config ( key , config ) , video_id )
2015-04-27 15:44:13 +00:00
2015-05-04 13:04:49 +00:00
video_data = data [ ' videoData ' ]
title = clean_html ( video_data [ ' title ' ] )
2015-04-27 15:44:13 +00:00
2015-05-04 12:59:22 +00: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 ' ] ]
2015-04-27 15:44:13 +00:00
return {
2014-02-13 15:32:42 +00:00
' id ' : video_id ,
2013-11-20 05:47:50 +00:00
' formats ' : formats ,
2013-06-23 19:08:17 +00:00
' title ' : title ,
2019-03-11 07:18:57 +00:00
' thumbnail ' : self . _og_search_thumbnail ( webpage ) or data . get ( ' poster ' ) ,
2015-04-27 15:44:13 +00:00
' description ' : self . _og_search_description ( webpage ) ,
2019-03-11 07:18:57 +00:00
' duration ' : float_or_none ( video_data . get ( ' duration ' ) , 1000 ) ,
' uploader ' : video_data . get ( ' publisher ' ) ,
' series ' : video_data . get ( ' show ' ) ,
2013-06-23 19:08:17 +00:00
}