astrXbian/.install/.kodi/addons/plugin.video.vstream/resources/hosters/speedvid.py

234 lines
6.9 KiB
Python

#coding: utf-8
#Vstream https://github.com/Kodi-vStream/venom-xbmc-addons
from resources.lib.handler.requestHandler import cRequestHandler
from resources.lib.parser import cParser
from resources.hosters.hoster import iHoster
# from resources.lib.aadecode import AADecoder
from resources.lib.jjdecode import JJDecoder
from resources.lib.packer import cPacker
from resources.lib.jsparser import JsParser
from resources.lib.comaddon import VSlog
import re
UA = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'
class cHoster(iHoster):
def __init__(self):
self.__sDisplayName = 'Speedvid'
self.__sFileName = self.__sDisplayName
self.__sHD = ''
def getDisplayName(self):
return self.__sDisplayName
def setDisplayName(self, sDisplayName):
self.__sDisplayName = sDisplayName + ' [COLOR skyblue]' + self.__sDisplayName + '[/COLOR] [COLOR khaki]' + self.__sHD + '[/COLOR]'
def setFileName(self, sFileName):
self.__sFileName = sFileName
def getFileName(self):
return self.__sFileName
def getPluginIdentifier(self):
return 'speedvid'
def setHD(self, sHD):
self.__sHD = ''
def getHD(self):
return self.__sHD
def isDownloadable(self):
return True
def isJDownloaderable(self):
return True
def getPattern(self):
return ''
def __getHost(self):
parts = self.__sUrl.split('//', 1)
host = parts[0] + '//' + parts[1].split('/', 1)[0]
return host
def setUrl(self, sUrl):
self.__sUrl = str(sUrl)
def checkUrl(self, sUrl):
return True
def getUrl(self):
return self.__sUrl
def getMediaLink(self):
return self.__getMediaLinkForGuest()
def __getMediaLinkForGuest(self):
oRequest = cRequestHandler(self.__sUrl.replace('sn', 'embed'))
oRequest.addHeaderEntry('User-Agent', UA)
oRequest.addHeaderEntry('Host', 'www.speedvid.net')
sHtmlContent = oRequest.request()
#suppression commentaires
sHtmlContent = re.sub( r'<!--.*?-->', '', sHtmlContent )
oParser = cParser()
#fh = open('c:\\test0.txt', "w")
#fh.write(sHtmlContent)
#fh.close()
#decodage de la pahe html
sHtmlContent3 = sHtmlContent
code = ''
maxboucle = 10
while (maxboucle > 0):
VSlog('loop : ' + str(maxboucle))
sHtmlContent3 = CheckCpacker(sHtmlContent3)
#sHtmlContent3 = CheckJJDecoder(sHtmlContent3)
sHtmlContent3 = CheckAADecoder(sHtmlContent3)
maxboucle = maxboucle - 1
sHtmlContent = sHtmlContent3
VSlog('fini')
#fh = open('c:\\test.txt', "w")
#fh.write(sHtmlContent)
#fh.close()
#Desactive pour le moment
if (True):
Realurl = ''
red = re.findall('location.href *= *[\'"]([^\'"]+)', sHtmlContent)
if red:
Realurl = red[0]
else:
VSlog("2")
red = re.findall('location\.assign *\( *"([^"]+)" \)', sHtmlContent)
if red:
Realurl = red[0]
if 'speedvid' not in Realurl:
Realurl = self.__getHost() + Realurl
if not Realurl.startswith('http'):
Realurl = 'http:' + Realurl
if not Realurl:
VSlog("mauvaise redirection")
return False, False
VSlog('Real url>> ' + Realurl)
oRequest = cRequestHandler(Realurl)
oRequest.addHeaderEntry('User-Agent', UA)
oRequest.addHeaderEntry('Referer', self.__sUrl)
sHtmlContent = oRequest.request()
#fh = open('c:\\test.txt', "w")
#fh.write(sHtmlContent)
#fh.close()
api_call = ''
sPattern = '(eval\(function\(p,a,c,k,e(?:.|\s)+?\)\))<'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
for packed in aResult[1]:
sHtmlContent = cPacker().unpack(packed)
sHtmlContent = sHtmlContent.replace('\\', '')
if "jwplayer('vplayer').setup" in sHtmlContent:
sPattern2 = "{file:.([^']+.mp4)"
aResult2 = oParser.parse(sHtmlContent, sPattern2)
if (aResult2[0] == True):
api_call = aResult2[1][0]
break
else:
sPattern = "file\s*:\s*\'([^\']+.mp4)"
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
api_call = aResult[1][0]
VSlog('API_CALL: ' + api_call )
if (api_call):
api_call = api_call + '|User-Agent=' + UA #+ #'|Host=' + api_call.replace('http://','').rsplit('/', 2)[0]
return True, api_call
return False, False
#********************************************************************************************************************************
def CheckCpacker(str):
sPattern = '>([^>]+\(p,a,c,k,e(?:.|\s)+?\)\)\s*)<'
aResult = re.search(sPattern, str, re.DOTALL | re.UNICODE)
if (aResult):
#VSlog('Cpacker encryption')
str2 = aResult.group(1)
if not str2.endswith(';'):
str2 = str2 + ';'
#if not str2.startswith('eval'):
# str2 = 'eval(function' + str2[4:]
#Me demandez pas pourquoi mais si je l'affiche pas en log, ca freeze ?????
#VSlog(str2)
try:
tmp = cPacker().unpack(str2)
#tmp = tmp.replace("\\'", "'")
except:
tmp = ''
#VSlog(tmp)
return str[:(aResult.start() + 1)] + tmp + str[(aResult.end()-1):]
return str
def CheckJJDecoder(str):
sPattern = '([a-z]=.+?\(\)\)\(\);)'
aResult = re.search(sPattern, str, re.DOTALL | re.UNICODE)
if (aResult):
VSlog('JJ encryption')
tmp = JJDecoder(aResult.group(0)).decode()
return str[:aResult.start()] + tmp + str[aResult.end():]
return str
def CheckAADecoder(str):
aResult = re.search('([>;]\s*)(゚ω゚.+?\(\'_\'\);)', str, re.DOTALL | re.UNICODE)
if (aResult):
VSlog('AA encryption')
#tmp = aResult.group(1) + AADecoder(aResult.group(2)).decode()
JP = JsParser()
Liste_var = []
try:
JScode = aResult.group(2)
JScode = unicode(JScode, "utf-8")
tmp = JP.ProcessJS(JScode, Liste_var)
tmp = JP.LastEval.decode('string-escape').decode('string-escape')
return str[:aResult.start()] + tmp + str[aResult.end():]
except:
return ''
return str