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

119 lines
3.7 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