def GetMedialinkDL(self, sHtmlContent): oParser = cParser() sPattern = '<a href *=[\'"](?!http:\/\/uptostream.+)([^<>]+?)[\'"] *class=\'big-button-green-flat mt-4 mb-4\'' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0]): return QuoteSafe(aResult[1][0]) return False
def showHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') # patch for unicode url sUrl = QuoteSafe(sUrl) oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = 'data-src="([^"]+)" target="filmPlayer".+?span class="([^"]+)"><\/span>.+?class="([^"]+)"><\/span>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sUrl = aEntry[0] sHost = aEntry[1].capitalize() if 'apidgator' in sHost or 'dl_to' in sHost: continue sLang = aEntry[2].upper().replace('L', '') sTitle = '%s (%s) [COLOR coral]%s[/COLOR]' % (sMovieTitle, sLang, sHost) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addMovie(SITE_IDENTIFIER, 'showHostersLink', sTitle, '', sThumb, '', oOutputParameterHandler) oGui.setEndOfDirectory()
def showLinks(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') # patch for unicode url sUrl = QuoteSafe(sUrl) oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = 'data-src="([^"]+)" target="filmPlayer".+?span class="([^"]+)"></span>.+?class="([^"]+)"></span>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: sUrl2 = aEntry[0] sHost = aEntry[1].capitalize() if 'apidgator' in sHost or 'dl_to' in sHost: continue sLang = aEntry[2].upper().replace('L', '') sTitle = '%s (%s) [COLOR coral]%s[/COLOR]' % (sMovieTitle, sLang, sHost) oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sHost', sHost) oOutputParameterHandler.addParameter('sLang', sLang) oGui.addLink(SITE_IDENTIFIER, 'showHosters', sTitle, sThumb, '', oOutputParameterHandler) sPattern = 'href="(https:\/\/cineactu.co\/.+?").*?span class="([^"]+).*?class="([^"]+)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: sUrl2 = aEntry[0] sHost = aEntry[1] if 'fichier' in sHost: sHost = '1 Fichier' if 'uptobox' in sHost: sHost = 'Uptobox' sHost = sHost.capitalize() # ou autres ? sLang = aEntry[2].upper().replace('L', '') sTitle = '%s (%s) [COLOR coral]%s[/COLOR]' % (sMovieTitle, sLang, sHost) oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('siteReferer', sUrl) oOutputParameterHandler.addParameter('sHost', sHost) oOutputParameterHandler.addParameter('sLang', sLang) oGui.addLink(SITE_IDENTIFIER, 'showHostersDL', sTitle, sThumb, '', oOutputParameterHandler) oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() if sSearch: sUrl = sSearch.replace(' ', '+') else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() oParser = cParser() if '/latest-episodes/' in sUrl: sPattern = '<a href="([^"]+)" class="anm" title="([^"]+)">[^<]+</a>.+?<img src="([^"]+)" alt="(.+?)">' # news else: sPattern = '<h2><a href="([^<]+)">([^<]+)</a></h2>.+?<img src="(.+?)"' # populaire et search aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sUrl = aEntry[0] sThumb = QuoteSafe(aEntry[2]) if 'vostfr' in sUrl or 'Vostfr' in sUrl: sLang = 'VOSTFR' elif 'VF' in sUrl or 'vf' in sUrl: sLang = 'VF' else: sLang = 'VOSTFR' sTitle = aEntry[1] + ' (' + sLang + ')' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addAnime(SITE_IDENTIFIER, 'showEpisodes', sTitle, 'animes.png', sThumb, '', oOutputParameterHandler) progress_.VSclose(progress_) sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) number = re.search('/([0-9]+)', sNextPage).group(1) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory()
def setUrl(self, sUrl): self.__sUrl = str(sUrl) self.__sUrl = self.__sUrl.replace('openload.io', 'openload.co') self.__sUrl = QuoteSafe(sUrl) if self.__sUrl[-4:-3] == '.': self.__sUrl = self.__sUrl.replace(self.__sUrl.split('/')[-1], '')
class cHoster(iHoster): def __init__(self): self.__sDisplayName = 'OpenLoad' self.__sFileName = self.__sDisplayName self.__sHD = '' 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 'openload' 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 __getIdFromUrl(self, sUrl): return '' def setUrl(self, sUrl): self.__sUrl = str(sUrl) self.__sUrl = self.__sUrl.replace('openload.io', 'openload.co') self.__sUrl = QuoteSafe(sUrl) if self.__sUrl[-4:-3] == '.': self.__sUrl = self.__sUrl.replace(self.__sUrl.split('/')[-1], '') def checkUrl(self, sUrl): return True def __getUrl(self, media_id): return def __getHost(self): parts = self.__sUrl.split('//', 1) host = parts[0] + '//' + parts[1].split('/', 1)[0] return host def getMediaLink(self): return self.__getMediaLinkForGuest() def __getMediaLinkForGuest(self): oParser = cParser() #recuperation de la page #xbmc.log('url teste : ' + self.__sUrl) oRequest = cRequestHandler(self.__sUrl) oRequest.addHeaderEntry('referer', self.__sUrl) oRequest.addHeaderEntry('User-Agent', UA) sHtmlContent1 = oRequest.request() #fh = open('c:\\test.txt', "w") #fh.write(sHtmlContent1) #fh.close() #Recuperation url cachee TabUrl = [] #sPattern = '<span style="".+?id="([^"]+)">([^<]+)<\/span>' sPattern = '<p id="([^"]+)" *style=\"\">([^<]+)<\/p>' aResult = re.findall(sPattern, sHtmlContent1) if not aResult: sPattern = '<p style="" *id="([^"]+)" *>([^<]+)<\/p>' aResult = re.findall(sPattern, sHtmlContent1) if (aResult): TabUrl = aResult else: VSlog('OPL er 1') return False, False #xbmc.log("Nbre d'url : " + str(len(TabUrl))) #on essait de situer le code sPattern = '<script src="\/assets\/js\/video-js\/video\.js.+?.js"(.+)*' aResult = re.findall(sPattern, sHtmlContent1, re.DOTALL) if (aResult): sHtmlContent3 = aResult[0] else: VSlog('OPL er 2') return False, False #Deobfuscation, a optimiser pour accelerer le traitement code = '' maxboucle = 4 while (maxboucle > 0): sHtmlContent3 = CheckCpacker(sHtmlContent3) sHtmlContent3 = CheckJJDecoder(sHtmlContent3) sHtmlContent3 = CheckAADecoder(sHtmlContent3) maxboucle = maxboucle - 1 code = sHtmlContent3 #fh = open('c:\\html.txt', 'w') #fh.write(code) #fh.close() id_final = '' sPattern = 'var srclink.*?\/stream\/.*?(#[^\'"]+).*?mime=true' aResult = re.findall(sPattern, code) if (aResult): id_final = aResult[0] else: VSlog('OPL er 9') return False, False if not (code): VSlog('OPL er 3') return False, False #Search the coded url Coded_url = '' for i in TabUrl: if len(i[1]) > 30: Coded_url = i[1] Item_url = '#' + i[0] VSlog(Item_url + ' : ' + Coded_url) if not (Coded_url): VSlog('Url codée non trouvée') return False, False #Nettoyage du code pr traitement code = CleanCode(code, Coded_url) #fh = open('c:\\JS.txt', 'w'w) #fh.write(code) #fh.close() VSlog('Code JS extrait') dialog().VSinfo('Décodage: Peut durer plus d\'une minute.', self.__sDisplayName, 15) #interpreteur JS JP = JsParser() Liste_var = [] JP.AddHackVar(Item_url, Coded_url) JP.ProcessJS(code, Liste_var) url = None #for name in [ '#streamurl', '#streamuri', '#streamurj']: # if JP.IsVar( JP.HackVars, name ): # url = JP.GetVarHack( name ) # VSlog( 'Decoded url ' + name + ' : ' + url ) # break url = JP.GetVarHack(id_final) if not (url): VSlog('Rate, debug: ' + str(Liste_var)) return False, False dialog().VSinfo('Ok, lien décodé.', self.__sDisplayName, 15) api_call = self.__getHost() + '/stream/' + url + '?mime=true' if '::' in api_call: dialog().VSinfo('Possible problème d\'ip V6', self.__sDisplayName, 5) xbmc.sleep(5 * 1000) VSlog(api_call) if (api_call): return True, api_call return False, False