119 lines
3.6 KiB
Python
119 lines
3.6 KiB
Python
#-*- coding: utf-8 -*-
|
|
# https://github.com/Kodi-vStream/venom-xbmc-addons
|
|
from resources.lib.comaddon import VSlog, xbmc
|
|
from resources.lib.handler.requestHandler import cRequestHandler
|
|
from resources.hosters.hoster import iHoster
|
|
import re
|
|
|
|
UA = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0'
|
|
|
|
class cHoster(iHoster):
|
|
|
|
def __init__(self):
|
|
self.__sDisplayName = 'MyStream'
|
|
self.__sFileName = self.__sDisplayName
|
|
|
|
def getDisplayName(self):
|
|
return self.__sDisplayName
|
|
|
|
def setDisplayName(self, sDisplayName):
|
|
self.__sDisplayName = sDisplayName + ' [COLOR skyblue]' + self.__sDisplayName + '[/COLOR]'
|
|
|
|
def setFileName(self, sFileName):
|
|
self.__sFileName = sFileName
|
|
|
|
def getFileName(self):
|
|
return self.__sFileName
|
|
|
|
def getPluginIdentifier(self):
|
|
return 'mystream'
|
|
|
|
def isDownloadable(self):
|
|
return True
|
|
|
|
def setUrl(self, sUrl):
|
|
self.__sUrl = str(sUrl).replace('https://mystream.to/watch/', 'https://embed.mystream.to/')
|
|
|
|
def checkUrl(self, sUrl):
|
|
return True
|
|
|
|
def getUrl(self):
|
|
return self.__sUrl
|
|
|
|
def getMediaLink(self):
|
|
return self.__getMediaLinkForGuest()
|
|
|
|
def __getMediaLinkForGuest(self):
|
|
|
|
url = self.__sUrl
|
|
|
|
oRequest = cRequestHandler(url)
|
|
oRequest.addHeaderEntry('User-Agent', UA)
|
|
oRequest.addHeaderEntry('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
|
|
sHtmlContent = oRequest.request()
|
|
|
|
api_call = False
|
|
|
|
sPattern = '([$]=.+?\(\)\)\(\);)'
|
|
aResult = re.search(sPattern, sHtmlContent, re.DOTALL)
|
|
if aResult:
|
|
decoded = temp_decode(aResult.group(1))
|
|
if decoded:
|
|
r = re.search("setAttribute\(\'src\', *\'([^']+)\'\)", decoded, re.DOTALL)
|
|
if r:
|
|
api_call = r.group(1)
|
|
|
|
if (api_call):
|
|
return True, api_call + '|User-Agent=' + UA + '&Referer=' + self.__sUrl + '&Origin=https://embed.mystream.to'
|
|
|
|
return False, False
|
|
|
|
def temp_decode(data):
|
|
startpos = data.find('"\\""+') + 5
|
|
endpos = data.find('"\\"")())()')
|
|
|
|
first_group = data[startpos:endpos]
|
|
first_group = first_group.replace('$.__+', 't').replace('$._+', 'u').replace('$._$+', 'o')
|
|
|
|
tmplist = []
|
|
js = re.search(r'(\$={.+?});', data)
|
|
if js:
|
|
js_group = js.group(1)[3:][:-1]
|
|
second_group = js_group.split(',')
|
|
|
|
i = -1
|
|
for x in second_group:
|
|
a, b = x.split(':')
|
|
|
|
if b == '++$':
|
|
i += 1
|
|
tmplist.append(("$.{}+".format(a), i))
|
|
|
|
elif b == '(![]+"")[$]':
|
|
tmplist.append(("$.{}+".format(a), 'false'[i]))
|
|
|
|
elif b == '({}+"")[$]':
|
|
tmplist.append(("$.{}+".format(a), '[object Object]'[i]))
|
|
|
|
elif b == '($[$]+"")[$]':
|
|
tmplist.append(("$.{}+".format(a), 'undefined'[i]))
|
|
|
|
elif b == '(!""+"")[$]':
|
|
tmplist.append(("$.{}+".format(a), 'true'[i]))
|
|
|
|
tmplist = sorted(tmplist, key=lambda z: str(z[1]))
|
|
for x in tmplist:
|
|
first_group = first_group.replace(x[0], str(x[1]))
|
|
|
|
first_group = first_group.replace('\\"', '\\').replace("\"\\\\\\\\\"", "\\\\").replace('\\"', '\\').replace('"', '').replace("+", "")
|
|
|
|
pos = re.findall(r"\(!\[\]\)\[.+?\]", first_group)
|
|
for p in pos:
|
|
first_group = first_group.replace(p,"l")
|
|
|
|
try:
|
|
final_data = first_group.encode('ascii').decode('unicode-escape').encode('ascii').decode('unicode-escape')
|
|
return final_data
|
|
except:
|
|
return False
|