def showEpisodes(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('entryUrl') sThumbnail = params.getValue("sThumbnail") sSeason = params.getValue('season') sShowName = params.getValue('TVShowTitle') sHtmlContent = cRequestHandler(sUrl).request() pattern = '<div[^>]*class="staffelWrapperLoop[^"]*"[^>]*data-sid="%s">(.*?)</div></li></ul></div>' % sSeason isMatch, sContainer = cParser.parseSingleResult(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = '<a[^>]*href="([^"]*)"[^>]*class="getStaffelStream"[^>]*>.*?<small>([^>]*?)</small>' isMatch, aResult = cParser.parse(sContainer, pattern) isMatchDesc, sDesc = cParser.parseSingleResult(sHtmlContent, '"description">([^<]+)') total = len(aResult) for sEpisodeUrl, sTitle in aResult: oGuiElement = cGuiElement(sTitle, SITE_IDENTIFIER, "showHosters") oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) oGuiElement.setTVShowTitle(sShowName) oGuiElement.setSeason(sSeason) oGuiElement.setMediaType('episode') params.setParam('entryUrl', sEpisodeUrl) if isMatchDesc: oGuiElement.setDescription(sDesc) oGui.addFolder(oGuiElement, params, False, total) oGui.setView('episodes') oGui.setEndOfDirectory()
def showEpisodes(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('entryUrl') sThumbnail = params.getValue('sThumbnail') sSeasonNr = params.getValue('sSeasonNr') sHtmlContent = cRequestHandler(sUrl).request() pattern = 'id="s%s">.*?</table>' % sSeasonNr isMatch, sHtmlContainer = cParser.parseSingleResult(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = "href = '([^']+).*?episodeNumber.*?>([\d]+)" isMatch, aResult = cParser.parse(sHtmlContainer, pattern) isMatchDesc, sDesc = cParser.parseSingleResult(sHtmlContent, '<p>([^<]+)') if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return total = len(aResult) for sUrl, sEpisodeNr in aResult: oGuiElement = cGuiElement('Folge ' + str(sEpisodeNr), SITE_IDENTIFIER, 'showHosters') oGuiElement.setMediaType('episode') oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) oGuiElement.setEpisode(sEpisodeNr) if sDesc: oGuiElement.setDescription(sDesc) params.setParam('entryUrl', sUrl) oGui.addFolder(oGuiElement, params, False, total) oGui.setView('episodes') oGui.setEndOfDirectory()
def getHosterUrl(sUrl=False): results = [] parms = ParameterHandler() sTitle = parms.getValue('title') if not sUrl: sUrl = parms.getValue('url') oRequest = cRequestHandler(sUrl) oRequest.addHeaderEntry('Referer', URL_MAIN) sHtmlContent = oRequest.request() pattern = '<a rel=\\\\"(.*?)\\\\"' aResult = cParser().parse(sHtmlContent, pattern) if aResult[0]: aMovieParts = aResult[1] ii = 1 for sPartUrl in aMovieParts: oRequest = cRequestHandler(sUrl + '&Part=' + str(ii)) oRequest.addHeaderEntry('Referer', URL_MAIN) sHtmlContent = oRequest.request() pattern = '<a\shref=\\\\".*?(https?:.*?)\\\\"' aResult = cParser().parse(sHtmlContent, pattern) if aResult[0]: aParts = aResult[1] sPartUrl = aParts[0] result = {'streamUrl': sPartUrl, 'resolved': False, 'title': sTitle + ' Part ' + str(ii)} results.append(result) ii += 1 else: isMatch, sStreamUrl = cParser.parseSingleResult(sHtmlContent, '<a\shref=\\\\".*?(https?:.*?)\\\\"') if not isMatch: isMatch, sStreamUrl = cParser.parseSingleResult(sHtmlContent, '<iframe src=[^"]*"([^"]+)') if isMatch: results.append({'streamUrl': sStreamUrl, 'resolved': False}) return results
def showEpisodes(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('entryUrl') oRequest = cRequestHandler(sUrl) sHtmlContent = oRequest.request() pattern = 'click="loadEpisode\S([\d]+).*?subheading">([^<]+)' isMatch, aResult = cParser.parse(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return isMatchDesc, sDesc = cParser.parseSingleResult( sHtmlContent, '<div class="v-card__text">([^<]+)') isMatchFanart, sFanart = cParser.parseSingleResult( sHtmlContent, "background-image[^>]*url[^>]'([^']+)") cf = createUrl(sUrl, oRequest) total = len(aResult) for sName, sTitle in aResult: oGuiElement = cGuiElement(sName + ' - ' + sTitle, SITE_IDENTIFIER, 'showHosterserie') if sFanart: oGuiElement.setThumbnail(sFanart + cf) oGuiElement.setFanart(sFanart + cf) if sDesc: oGuiElement.setDescription(sDesc) params.setParam('Episodes', sName) oGui.addFolder(oGuiElement, params, False, total) oGui.setView('episodes') oGui.setEndOfDirectory()
def showEpisodes(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('entryUrl') sThumbnail = params.getValue('sThumbnail') sSeasonNr = params.getValue('sSeasonNr') sHtmlContent = cRequestHandler(sUrl).request() pattern = '">[^>]Staffel %s.*?</div>' % sSeasonNr isMatch, sHtmlContainer = cParser.parseSingleResult(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = 'href="([^"]+).*?">([^<]+)' isMatch, aResult = cParser.parse(sHtmlContainer, pattern) isDesc, sDesc = cParser.parseSingleResult(sHtmlContent, '<po3>.*?<p>(.*?)<po3>') if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return total = len(aResult) for sUrl, sEpisodeNr in aResult: oGuiElement = cGuiElement(sEpisodeNr, SITE_IDENTIFIER, 'showHosters') oGuiElement.setMediaType('episode') oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) if isDesc: oGuiElement.setDescription(sDesc) params.setParam('entryUrl', sUrl) oGui.addFolder(oGuiElement, params, False, total) oGui.setView('episodes') oGui.setEndOfDirectory()
def showEpisodes(): oGui = cGui() params = ParameterHandler() entryUrl = params.getValue('entryUrl') sSeason = params.getValue('Season') oRequest = cRequestHandler(entryUrl) sHtmlContent = oRequest.request() pattern = 'Season <span>%s.*?></tbody>' % sSeason isMatch, sContainer = cParser.parseSingleResult(sHtmlContent, pattern) if isMatch: pattern = 'Num">([\d]+).*?href="([^"]+)' isMatch, aResult = cParser.parse(sContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return isDesc, sDesc = cParser.parseSingleResult(sHtmlContent, 'class="Description">(.*?)</p>') total = len(aResult) for sEpisode, sUrl in aResult: oGuiElement = cGuiElement('Folge ' + sEpisode, SITE_IDENTIFIER, 'showHosters') oGuiElement.setMediaType('season') oGuiElement.setSeason(sSeason) oGuiElement.setEpisode(sEpisode) oGuiElement.setMediaType('episode') oGuiElement.setThumbnail(params.getValue('sThumbnail')) if isDesc: oGuiElement.setDescription(sDesc) oGuiElement.setFanart(params.getValue('sThumbnail')) params.setParam('entryUrl', sUrl) oGui.addFolder(oGuiElement, params, False, total) oGui.setView('episodes') oGui.setEndOfDirectory()
def showEntries(entryUrl=False, sGui=False, sSearchText=False): import time oGui = sGui if sGui else cGui() params = ParameterHandler() if not entryUrl: entryUrl = params.getValue('sUrl') sortBy = params.getValue('sortBy') page = params.getValue('page') type = params.getValue('type') sHtmlContent = cRequestHandler(entryUrl, ignoreErrors=(sGui is not False)).request() isMatch, url = cParser.parseSingleResult(sHtmlContent, "url : '([^']+)") isMatch, token = cParser.parseSingleResult(sHtmlContent, "token':'([^']+)") oRequest = cRequestHandler(url, ignoreErrors=(sGui is not False)) if sSearchText: oRequest.addParameters('search', sSearchText) page = '1' type = 'Alle' sortBy = 'latest' oRequest.addHeaderEntry('X-Requested-With', 'XMLHttpRequest') oRequest.addParameters('_token', token) oRequest.addParameters('from', 1900) oRequest.addParameters('page', page) oRequest.addParameters('rating', 0) oRequest.addParameters('sortBy', sortBy) oRequest.addParameters('to', time.strftime("%Y", time.localtime())) oRequest.addParameters('type', type) oRequest.setRequestType(1) sHtmlContent = oRequest.request() pattern = '<a title=[^>]"(.*?)" href=[^>]"([^"]+).*?src=[^>]"([^"]+)' isMatch, aResult = cParser.parse(sHtmlContent, pattern) if not isMatch: if not sGui: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return cf = cRequestHandler.createUrl(entryUrl, oRequest) total = len(aResult) for sName, sUrl, sThumbnail in aResult: if sSearchText and not cParser().search(sSearchText, sName): continue isTvshow = True if 'folge' in sUrl else False sThumbnail = sThumbnail + cf oGuiElement = cGuiElement(sName[:-1], SITE_IDENTIFIER, 'showSeasons' if isTvshow else 'showHosters') oGuiElement.setThumbnail(sThumbnail[:-1]) oGuiElement.setFanart(sThumbnail[:-1]) oGuiElement.setMediaType('tvshow' if isTvshow else 'movie') params.setParam('sThumbnail', sThumbnail) params.setParam('sName', sName) params.setParam('entryUrl', sUrl[:-1]) oGui.addFolder(oGuiElement, params, isTvshow, total) if not sGui: pattern = 'Next.*?data-p=[^>]"([\d]+).*?d-flex' isMatch, sUrl = cParser.parseSingleResult(sHtmlContent, pattern) if isMatch: params.setParam('page', sUrl) oGui.addNextPage(SITE_IDENTIFIER, 'showEntries', params) oGui.setView('tvshows' if 'folge' in entryUrl else 'movies') oGui.setEndOfDirectory()
def showEpisodes(): oGui = cGui() params = ParameterHandler() entryUrl = params.getValue('entryUrl') sThumbnail = params.getValue('sThumbnail') sTVShowTitle = params.getValue('TVShowTitle') oRequest = cRequestHandler(entryUrl) oRequest.addHeaderEntry('Referer', entryUrl) sHtmlContent = oRequest.request() pattern = 'vk.show.*?</script>' isMatch, sContainer = cParser.parseSingleResult(sHtmlContent, pattern) if isMatch: pattern = "(http[^',]+)" isMatch, aResult = cParser.parse(sContainer, pattern) if not isMatch: pattern = '<iframe[^>]src="([^"]+)' isMatch, sUrl = cParser().parse(sHtmlContent, pattern) if isMatch: oRequest = cRequestHandler('' + sUrl[0]) oRequest.addHeaderEntry('Referer', entryUrl) sUrl = oRequest.request() pattern = '<iframe[^>]src="([^"]+)' isMatch, sUrl = cParser().parse(sUrl, pattern) if isMatch: oRequest = cRequestHandler('http:' + sUrl[0]) oRequest.addHeaderEntry('Referer', entryUrl) sUrl = oRequest.request() pattern = "var[^>]season_list.*?var" isMatch, sContainer = cParser.parseSingleResult(sUrl, pattern) pattern = '"([^",]+)' isMatch, aResult = cParser.parse(sContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return i = 0 isDesc, sDesc = cParser.parseSingleResult( sHtmlContent, 'description[^>]*content="([^"]+)') total = len(aResult) for sUrl in aResult: i = i + 1 oGuiElement = cGuiElement('Episode ' + str(i), SITE_IDENTIFIER, 'showHosters') oGuiElement.setTVShowTitle(sTVShowTitle) oGuiElement.setEpisode(i) if sThumbnail: oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) if isDesc: oGuiElement.setDescription(sDesc) if 'hdgo' in sUrl: params.setParam('entryUrl', sUrl) else: params.setParam('entryUrl', 'http://s1.f53mbcg4ak.ru' + sUrl) oGui.addFolder(oGuiElement, params, False, total) oGui.setView('episodes') oGui.setEndOfDirectory()
def getHosterUrlandPlay(sUrl=False): results = [] oParams = ParameterHandler() sSecurityValue = oParams.getValue('securityCookie') sTitle = oParams.getValue('title') if not sUrl: sUrl = oParams.getValue('url') sUrl = sUrl.replace('&', '&') oRequest = cRequestHandler(sUrl) # if "kinox.ag" not in domain: # oRequest.addHeaderEntry('Cookie', sSecurityValue) oRequest.addHeaderEntry('Referer', URL_MAIN) sHtmlContent = oRequest.request() # pattern for multipart stream pattern = '<a rel=\\\\"(.*?)\\\\"' oParser = cParser() aResult = oParser.parse(sHtmlContent, pattern) if aResult[0]: aMovieParts = aResult[1] ii = 1 for sPartUrl in aMovieParts: sPartUrl = sPartUrl.replace('\\/', '/') oRequest = cRequestHandler(sUrl + '&Part=' + str(ii)) # if "kinox.ag" not in domain: # oRequest.addHeaderEntry('Cookie', sSecurityValue) oRequest.addHeaderEntry('Referer', URL_MAIN) sHtmlContent = oRequest.request() # pattern for stream url (single part) pattern = '<a\shref=\\\\".*?(https?:.*?)\\\\"' oParser = cParser() aResult = oParser.parse(sHtmlContent, pattern) if aResult[0]: aParts = aResult[1] sPartUrl = aParts[0].replace('\\/', '/') result = { 'streamUrl': sPartUrl, 'resolved': False, 'title': sTitle + ' Part ' + str(ii) } results.append(result) ii += 1 else: # pattern for stream url (single part) isMatch, sStreamUrl = cParser.parseSingleResult( sHtmlContent, '<a\shref=\\\\".*?(https?:.*?)\\\\"') if not isMatch: isMatch, sStreamUrl = cParser.parseSingleResult( sHtmlContent, '<iframe src=[^"]*"([^"]+)') if isMatch: results.append({ 'streamUrl': sStreamUrl.replace('\\/', '/'), 'resolved': False }) return results
def showSeasons(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('sUrl') sThumbnail = params.getValue('sThumbnail') sTVShowTitle = params.getValue('TVShowTitle') request = cRequestHandler(sUrl) sHtmlContent = request.request() pattern = '<div[^>]*class="hosterSiteDirectNav"[^>]*>.*?<ul>(.*?)<\/ul>' isMatch, sMainContent = cParser.parseSingleResult(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = '<a[^>]*href="([^"]*)"[^>]*title="([^"]*)"[^>]*>(.*?)<\/a>.*?' isMatch, aResult = cParser.parse(sMainContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return isMatchDesc, sDesc = cParser.parseSingleResult( sHtmlContent, '<p[^>]*data-full-description="(.*?)"[^>]*>') if not sThumbnail: isMatchThumb, sThumbnail = cParser.parseSingleResult( sHtmlContent, '<div[^>]*class="seriesCoverBox"[^>]*>.*?<img[^>]*src="([^"]*)"[^>]*>' ) if isMatchThumb: sThumbnail = cCFScrape().createUrl(sThumbnail, request) params.setParam('sThumbnail', sThumbnail) total = len(aResult) for sEntryUrl, sName, sText in aResult: isMovie = sEntryUrl.endswith('filme') oGuiElement = cGuiElement(sName, SITE_IDENTIFIER, 'showEpisodes') oGuiElement.setMediaType('season' if not isMovie else 'movie') if sThumbnail: oGuiElement.setThumbnail(sThumbnail) if sDesc: oGuiElement.setDescription(sDesc) if not isMovie: oGuiElement.setTVShowTitle(sTVShowTitle) oGuiElement.setSeason(sText) params.setParam('sSeason', sText) params.setParam('sUrl', URL_MAIN + sEntryUrl) oGui.addFolder(oGuiElement, params, True, total) oGui.setView('seasons') oGui.setEndOfDirectory()
def showEpisodes(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('sUrl') sTVShowTitle = params.getValue('TVShowTitle') sSeason = params.getValue('sSeason') if not sSeason: sSeason = "0" isMovieList = sUrl.endswith('filme') oRequest = cRequestHandler(sUrl) sHtmlContent = oRequest.request() pattern = '<table[^>]*class="seasonEpisodesList"[^>]*>(.*?)<\/table>' isMatch, sContainer = cParser.parseSingleResult(sHtmlContent, pattern) if isMatch: pattern = '<tr[^>]*data-episode-season-id="(\d+).*?<a href="([^"]+).*?(?:<strong>(.*?)</strong>.*?)?(?:<span>(.*?)</span>.*?)?<' isMatch, aResult = cParser.parse(sContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return isDesc, sDesc = cParser.parseSingleResult( sHtmlContent, '<p[^>]*data-full-description="(.*?)"[^>]*>') isThumbnail, sThumbnail = cParser.parseSingleResult( sHtmlContent, '<div[^>]*class="seriesCoverBox"[^>]*>.*?<img[^>]*src="([^"]*)"[^>]*>') if isThumbnail: cf = cRequestHandler.createUrl(URL_MAIN, oRequest) sThumbnail = sThumbnail + cf total = len(aResult) for sID, sUrl, sNameGer, sNameEng in aResult: sName = "%d - " % int(sID) sName += sNameGer if sNameGer else sNameEng oGuiElement = cGuiElement(sName, SITE_IDENTIFIER, 'showHosters') oGuiElement.setMediaType('episode' if not isMovieList else 'movie') if isThumbnail: oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) if isDesc: oGuiElement.setDescription(sDesc) if not isMovieList: oGuiElement.setSeason(sSeason) oGuiElement.setEpisode(int(sID)) oGuiElement.setTVShowTitle(sTVShowTitle) params.setParam('sUrl', URL_MAIN + sUrl) oGui.addFolder(oGuiElement, params, False, total) oGui.setView('episodes' if not isMovieList else 'movies') oGui.setEndOfDirectory()
def showEntries(entryUrl=False, sGui=False, sSearchText=False): oGui = sGui if sGui else cGui() params = ParameterHandler() if not entryUrl: entryUrl = params.getValue('sUrl') sHtmlContent = cRequestHandler(entryUrl, ignoreErrors=(sGui is not False)).request() pattern = '<div[^>]*class="poster">.*?<img[^>]*src="([^"]+).*?<a[^>]*href="([^"]+)">([^<]+).*?(?:<span>([^<]+)?).*?(?:<div[^>]*class="texto">([^<]+)?)' isMatch, aResult = cParser.parse(sHtmlContent, pattern) if not isMatch: pattern = '<div[^>]*class="search_page_form">.*?</div></div></div>' isMatch, sHtmlContainer = cParser.parseSingleResult( sHtmlContent, pattern) if not isMatch: if not sGui: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = '<img[^>]*src="([^"]+).*?<a[^>]*href="([^"]+)">([^<]+)</a>.*?(?:<span[^>]*class="year">([^<]+)?).*?<p>([^<]+)' isMatch, aResult = cParser.parse(sHtmlContainer, pattern) if not isMatch: if not sGui: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return total = len(aResult) for sThumbnail, sUrl, sName, sYear, sDesc in aResult: if sSearchText and not cParser().search(sSearchText, sName): continue sThumbnail = cParser.replace('-\d+x\d+\.', '.', sThumbnail) isTvshow = True if "tvshow" in sUrl else False oGuiElement = cGuiElement(sName, SITE_IDENTIFIER, 'showSeasons' if isTvshow else 'showHosters') oGuiElement.setMediaType('tvshow' if isTvshow else 'movie') oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) oGuiElement.setYear(sYear) oGuiElement.setDescription(sDesc) params.setParam('entryUrl', sUrl) params.setParam('sName', sName) params.setParam('sThumbnail', sThumbnail) oGui.addFolder(oGuiElement, params, isTvshow, total) if not sGui: pattern = "class=[^>]current.*?href='([^']+)" isMatchNextPage, sNextUrl = cParser.parseSingleResult( sHtmlContent, pattern) if isMatchNextPage: params.setParam('sUrl', sNextUrl) oGui.addNextPage(SITE_IDENTIFIER, 'showEntries', params) oGui.setView('tvshows' if 'serien' in entryUrl else 'movies') oGui.setEndOfDirectory()
def showSeasons(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('entryUrl') sThumbnail = params.getValue('sThumbnail') sTVShowTitle = params.getValue('sName') sHtmlContent = cRequestHandler(sUrl).request() pattern = '<div[^>]class="hosterSiteDirectNav".*?<div[^>]class="cf">' isMatch, sHtmlContainer = cParser.parseSingleResult(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = 'href="([^"]+)"[^>]title="([^"]+)">([\d]+)' isMatch, aResult = cParser.parse(sHtmlContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return total = len(aResult) for sUrl, sName, sSeasonNr in aResult: oGuiElement = cGuiElement(sName, SITE_IDENTIFIER, 'showEpisodes') oGuiElement.setMediaType('season') oGuiElement.setTVShowTitle(sTVShowTitle) oGuiElement.setSeason(sSeasonNr) oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) params.setParam('sUrl', sUrl) oGui.addFolder(oGuiElement, params, True, total) oGui.setView('seasons') oGui.setEndOfDirectory()
def showSeasons(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('entryUrl') sThumbnail = params.getValue("sThumbnail") sName = params.getValue('sName') sHtmlContent = cRequestHandler(sUrl).request() pattern = '<a[^>]*class="staffTab"[^>]*data-sid="(\d+)"[^>]*>' isMatch, aResult = cParser.parse(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return isDesc, sDesc = cParser.parseSingleResult(sHtmlContent, '"description">([^<]+)') total = len(aResult) for sSeason in aResult: oGuiElement = cGuiElement("Staffel " + str(sSeason), SITE_IDENTIFIER, 'showEpisodes') oGuiElement.setTVShowTitle(sName) oGuiElement.setSeason(sSeason) oGuiElement.setMediaType('season') oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) if isDesc: oGuiElement.setDescription(sDesc) oGui.addFolder(oGuiElement, params, True, total) oGui.setView('seasons') oGui.setEndOfDirectory()
def showValue(): oGui = cGui() params = ParameterHandler() entryUrl = params.getValue('baseURL') valueType = params.getValue('valueType') sHtmlContent = cRequestHandler(entryUrl).request() pattern = 'name="%s.*?</option>.*?</option></select>' % valueType isMatch, sHtmlContainer = cParser.parseSingleResult(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = '<option[^>]value="([^"]+)">.*?([^<]+)' isMatch, aResult = cParser.parse(sHtmlContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return for sName, sUrl in aResult: params.setParam('sUrl', entryUrl + '?' + valueType + '=' + sUrl) oGui.addFolder(cGuiElement(sName, SITE_IDENTIFIER, 'showEntries'), params) oGui.setEndOfDirectory()
def showEntries(entryUrl=False, sGui=False): oGui = sGui if sGui else cGui() params = ParameterHandler() if not entryUrl: entryUrl = params.getValue('sUrl') sHtmlContent = cRequestHandler(entryUrl, ignoreErrors=(sGui is not False)).request() pattern = '<div[^>]*class="clear">.*?<a[^>]*href="([^"]+)">.*?<img[^>]*src="([^"]+)".*?<h2[^>]*class="entry-title">([^<]+)' isMatch, aResult = cParser.parse(sHtmlContent, pattern) if not isMatch: if not sGui: oGui.showInfo('streamon', 'Es wurde kein Eintrag gefunden') return total = len(aResult) for sUrl, sThumbnail, sName in aResult: oGuiElement = cGuiElement(sName, SITE_IDENTIFIER, 'getHosterUrl') oGuiElement.setThumbnail(sThumbnail) params.setParam('entryUrl', sUrl) oGui.addFolder(oGuiElement, params, False, total) if not sGui: sPattern = '<a[^>]*class="nextpostslink"[^>]*rel="next"[^>]*href="([^"]+)' isMatchNextPage, sNextUrl = cParser.parseSingleResult( sHtmlContent, sPattern) if isMatchNextPage: params.setParam('sUrl', sNextUrl) oGui.addNextPage(SITE_IDENTIFIER, 'showEntries', params) oGui.setEndOfDirectory()
def _getHostFromUrl(sUrl, sServername): # Seite abrufen sHtmlContent = cRequestHandler(sUrl).request() # JSon mit den Links ermitteln pattern = '(\[{".*?}\])' isMatch, sJson = cParser.parseSingleResult(sHtmlContent, pattern) # Nichts gefunden? => Raus hier if not isMatch: logger.info("hoster pattern did not match") return [] # hosterliste initialisieren hosters = [] # Alle Einträge durchlaufen und Hostereintrag erstellen for entry in json.loads(sJson): if 'file' not in entry or 'label' not in entry: continue sLabel = sServername + ' - ' + entry['label'].encode('utf-8') hoster = dict() hoster['link'] = entry['file'] if entry['label'].encode('utf-8')[:-1] in QUALITY_ENUM: hoster['quality'] = QUALITY_ENUM[entry['label'].encode('utf-8') [:-1]] hoster['name'] = sLabel hosters.append(hoster) # Hoster zurückgeben return hosters
def showEntries(entryUrl=False, sGui=False): oGui = sGui if sGui else cGui() params = ParameterHandler() if not entryUrl: entryUrl = params.getValue('sUrl') oRequest = cRequestHandler(entryUrl, ignoreErrors=(sGui is not False)) sHtmlContent = oRequest.request() pattern = 'data-src="([^"]+).*?alt="([^"]+).*?href="([^"]+).*?primary">([^<]+)' isMatch, aResult = cParser().parse(sHtmlContent, pattern) if not isMatch: if not sGui: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return total = len(aResult) for sThumbnail, sName, sUrl, sType in aResult: isTvshow = True if "EPISODEN" in sType else False oGuiElement = cGuiElement(sName, SITE_IDENTIFIER, 'showSeasons' if isTvshow else 'showHosters') oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) oGuiElement.setMediaType('tvshow' if isTvshow else 'movie') params.setParam('entryUrl', sUrl) params.setParam('sThumbnail', sThumbnail) params.setParam('sName', sName) oGui.addFolder(oGuiElement, params, isTvshow, total) if not sGui: isMatchNextPage, sNextUrl = cParser.parseSingleResult( sHtmlContent, 'href="([^"]+)"[^>]data-ci-pagination-page="\d"[^>]rel="next">') if isMatchNextPage: params.setParam('sUrl', sNextUrl) oGui.addNextPage(SITE_IDENTIFIER, 'showEntries', params) oGui.setView('tvshows' if 'EPISODEN' in sType else 'movies') oGui.setEndOfDirectory()
def showSeasons(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('entryUrl') sHtmlContent = cRequestHandler(sUrl).request() aResult = cParser().parse(sHtmlContent, "var[ ]subcats[ ]=[ ](.*?);") if not aResult[0] or not aResult[1][0]: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return data = json.loads(aResult[1][0]) seasons = [] for key, value in data.items(): SeasonsNr = int(value['info']['staffel']) if SeasonsNr not in seasons: seasons.append(SeasonsNr) sThumbnail = params.getValue('sThumbnail') sName = params.getValue('sName') seasons = sorted(seasons) isMatchDesc, sDesc = cParser.parseSingleResult( sHtmlContent, '<img[^>]class.*?>(.*?)<br><br>') total = len(seasons) for iSeason in seasons: oGuiElement = cGuiElement("Staffel " + str(iSeason), SITE_IDENTIFIER, 'showEpisodes') oGuiElement.setTVShowTitle(sName) oGuiElement.setSeason(iSeason) oGuiElement.setMediaType('season') if sDesc: oGuiElement.setDescription(sDesc) oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) oGui.addFolder(oGuiElement, params, True, total) oGui.setView('seasons') oGui.setEndOfDirectory()
def showEpisodes(): oGui = cGui() params = ParameterHandler() sTVShowTitle = params.getValue('TVShowTitle') entryUrl = params.getValue('entryUrl') sSeasonNr = params.getValue('sSeasonNr') sHtmlContent = __getContent(entryUrl) pattern = '<span[^>]*class="se-t[^"]*">%s</span>.*?<ul[^>]*class="episodios"[^>]*>(.*?)</ul>' % sSeasonNr isMatch, sContainer = cParser.parseSingleResult(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = '<a[^>]*href="([^"]+)"[^>]*>\s*<img src="([^"]+).*?<div[^>]*class="numerando">[^-]*-\s*(\d+)\s*?</div>.*?<a[^>]*>([^<]*)</a>' isMatch, aResult = cParser.parse(sContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return total = len(aResult) for sUrl, sThumbnail, sEpisodeNr, sName in aResult: oGuiElement = cGuiElement("%s - %s" % (sEpisodeNr, sName.strip()), SITE_IDENTIFIER, 'showHosters') oGuiElement.setTVShowTitle(sTVShowTitle) oGuiElement.setSeason(sSeasonNr) oGuiElement.setEpisode(sEpisodeNr) sThumbnail = re.sub('-\d+x\d+\.', '.', sThumbnail) oGuiElement.setThumbnail(sThumbnail) oGuiElement.setMediaType('episode') params.setParam('entryUrl', sUrl.strip()) oGui.addFolder(oGuiElement, params, False, total) oGui.setView('seasons') oGui.setEndOfDirectory()
def showEpisodes(): oGui = cGui() params = ParameterHandler() sTVShowTitle = params.getValue('sName') entryUrl = params.getValue('entryUrl') sSeasonNr = params.getValue('sSeasonNr') sHtmlContent = cRequestHandler(entryUrl).request() pattern = '<span[^>]*class="se-t[^"]*">%s</span>.*?<ul[^>]*class="episodios"[^>]*>(.*?)</ul>' % sSeasonNr isMatch, sContainer = cParser.parseSingleResult(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = '<a[^>]*href="([^"]+)"[^>]*>([^<]+)' isMatch, aResult = cParser.parse(sContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return total = len(aResult) for sUrl, sEpisodeNr in aResult: oGuiElement = cGuiElement('Folge' + sEpisodeNr, SITE_IDENTIFIER, 'showHosters') oGuiElement.setTVShowTitle(sTVShowTitle) oGuiElement.setSeason(sSeasonNr) oGuiElement.setEpisode(sEpisodeNr) oGuiElement.setMediaType('episode') params.setParam('entryUrl', sUrl.strip()) oGui.addFolder(oGuiElement, params, False, total) oGui.setView('episodes') oGui.setEndOfDirectory()
def showHosters(sUrl=False): params = ParameterHandler() sUrl = sUrl if sUrl else params.getValue('sUrl') sHtmlContent = _getRequestHandler(sUrl).request() pattern = "<div[^>]*data-url='([^']*)'[^>]*>" isMatch, sStreamUrl = cParser.parseSingleResult(sHtmlContent, pattern) hosters = [] if isMatch: oRequestHandler = _getRequestHandler(sStreamUrl) oRequestHandler.addHeaderEntry('Referer', sUrl) sJson = oRequestHandler.request() if not sJson: return [] data = json.loads(base64.decodestring(sJson)) if "playinfo" in data: if isinstance(data["playinfo"], list): for urlData in data["playinfo"]: hoster = dict() hoster['link'] = urlData["link_mp4"] hoster['name'] = urlData["quality"] if urlData["quality"] in QUALITY_ENUM: hoster['quality'] = QUALITY_ENUM[urlData["quality"]] hoster['resolveable'] = True hosters.append(hoster) else: hoster = dict() hoster['link'] = data["playinfo"] hoster['name'] = SITE_NAME hoster['resolveable'] = True hosters.append(hoster) if hosters: hosters.append('play') return hosters
def showLinkList(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('sUrl') sHtmlContent = cRequestHandler(sUrl).request() isMatch, sContainer = cParser.parseSingleResult( sHtmlContent, '<ul[^>]*class="%s"[^>]*>(.*?)<\/ul>' % params.getValue('sCont')) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return isMatch, aResult = cParser.parse( sContainer, '<li>\s*<a[^>]*href="([^"]*)"[^>]*>(.*?)<\/a>\s*<\/li>') if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return for sEntryUrl, sName in aResult: sEntryUrl = sEntryUrl if sEntryUrl.startswith( 'http') else URL_MAIN + sEntryUrl params.setParam('sUrl', sEntryUrl) oGui.addFolder( cGuiElement(sName.strip(), SITE_IDENTIFIER, 'showEntries'), params) oGui.setEndOfDirectory()
def showEpisodes(): oGui = cGui() params = ParameterHandler() sTVShowTitle = params.getValue('TVShowTitle') entryUrl = params.getValue('entryUrl') sHtmlContent = cRequestHandler(entryUrl).request() pattern = '<ul[^>]class="list-group">.*?<div[^>]style="clear' isMatch, sContainer = cParser.parseSingleResult(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = '">([\d]+)' isMatch, aResult = cParser.parse(sContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return total = len(aResult) for sEpisodeNr in aResult: oGuiElement = cGuiElement('Folge ' + sEpisodeNr, SITE_IDENTIFIER, 'showHosters') oGuiElement.setTVShowTitle(sTVShowTitle) oGuiElement.setEpisode(sEpisodeNr) oGuiElement.setMediaType('episode') params.setParam('sEpisodeNr', sEpisodeNr) params.setParam('isTvshow', 'true') oGui.addFolder(oGuiElement, params, False, total) oGui.setView('episodes') oGui.setEndOfDirectory()
def showSeasons(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('entryUrl') sThumbnail = params.getValue('sThumbnail') sTVShowTitle = params.getValue('sName') sHtmlContent = cRequestHandler(sUrl).request() pattern = 'class="season">.*?Staffel[^>]([\d]+)' isMatch, aResult = cParser().parse(sHtmlContent, pattern) isDesc, sDesc = cParser.parseSingleResult(sHtmlContent, '<po3>.*?<p>(.*?)<po3>') if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return total = len(aResult) for sSeasonNr in aResult: oGuiElement = cGuiElement('Staffel ' + sSeasonNr, SITE_IDENTIFIER, 'showEpisodes') oGuiElement.setMediaType('season') oGuiElement.setTVShowTitle(sTVShowTitle) oGuiElement.setSeason(sSeasonNr) oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) if isDesc: oGuiElement.setDescription(sDesc) params.setParam('sSeasonNr', sSeasonNr) oGui.addFolder(oGuiElement, params, True, total) oGui.setView('seasons') oGui.setEndOfDirectory()
def showSeasons(): oGui = cGui() params = ParameterHandler() entryUrl = params.getValue('entryUrl') sThumbnail = params.getValue('sThumbnail') sTVShowTitle = params.getValue('TVShowTitle') sHtmlContent = cRequestHandler(entryUrl).request() pattern = "hdgo.show.*?</script>" isMatch, sContainer = cParser.parseSingleResult(sHtmlContent, pattern) if isMatch: pattern = "'([^\]]+)" isMatch, aResult = cParser.parse(sContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return i = 0 total = len(aResult) for sSeasonNr in aResult: i = i + 1 oGuiElement = cGuiElement('Staffel ' + str(i), SITE_IDENTIFIER, 'showEpisodes') oGuiElement.setTVShowTitle(sTVShowTitle) oGuiElement.setSeason(i) if sThumbnail: oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) params.setParam('sNr', i) params.setParam('sSeasonNr', sSeasonNr) oGui.addFolder(oGuiElement, params, True, total) oGui.setView('seasons') oGui.setEndOfDirectory()
def showValue(): oGui = cGui() params = ParameterHandler() value = params.getValue("value") sHtmlContent = cRequestHandler(URL_MAIN).request() pattern = '">%s.*?</ul>[^>]*</div>[^>]*</div>' % value isMatch, sContainer = cParser.parseSingleResult(sHtmlContent, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return pattern = 'href="([^"]+)">([^<]+)' isMatch, aResult = cParser.parse(sContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return for sUrl, sName in aResult: params.setParam('sUrl', sUrl) if not 'mehr' in sName.lower(): oGui.addFolder(cGuiElement(sName, SITE_IDENTIFIER, 'showEntries'), params) oGui.setEndOfDirectory()
def showEpisodes(): oGui = cGui() params = ParameterHandler() sUrl = params.getValue('entryUrl') sSeasonNr = params.getValue('sSeasonNr') sThumbnail = params.getValue('sThumbnail') sHtmlContent = cRequestHandler(sUrl).request() pattern = 'episodeBBox%s">.*?</div>' % sSeasonNr isMatch, sHtmlContainer = cParser.parseSingleResult(sHtmlContent, pattern) if isMatch: pattern = 'href="([^"]+).*?">(\d+)' isMatch, aResult = cParser.parse(sHtmlContainer, pattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return isDesc, sDesc = cParser.parse(sHtmlContent, 'name="description" content="([^"]+)') total = len(aResult) for sUrl, sEpisodeNr in aResult: oGuiElement = cGuiElement('Folge ' + sEpisodeNr, SITE_IDENTIFIER, 'showHosters') oGuiElement.setThumbnail(sThumbnail) oGuiElement.setFanart(sThumbnail) if isDesc: oGuiElement.setDescription(sDesc[0]) params.setParam('entryUrl', URL_MAIN + sUrl) oGui.addFolder(oGuiElement, params, False, total) oGui.setView('episodes') oGui.setEndOfDirectory()
def __checkForNextPage(sHtmlContent, iCurrentPage): iNextPage = int(iCurrentPage) + 1 sPattern = '<a[^>]*href="([^"]+)">\s*%s\s*</a>' % str(iNextPage) isMatch, sNextUrl = cParser.parseSingleResult(sHtmlContent, sPattern) if isMatch: return sNextUrl return False
def showValueList(): oGui = cGui() params = ParameterHandler() entryUrl = params.getValue('sUrl') valueType = params.getValue('valueType') sHtmlContent = cRequestHandler(entryUrl).request() sPattern = '<ul[^>]*class="[^"]*%s[^"]*">(.*?)</ul>' % valueType isMatch, sHtmlContainer = cParser.parseSingleResult(sHtmlContent, sPattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return sPattern = '<a[^>]*href="([^"]+)"[^>]*>([^<]+)</a>\s*<i>(\d+)</i>' isMatch, aResult = cParser.parse(sHtmlContainer, sPattern) if not isMatch: oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden') return for sUrl, sName, sCount in aResult: params.setParam('sUrl', sUrl) oGui.addFolder( cGuiElement('%s (%s) ' % (sName, sCount), SITE_IDENTIFIER, 'showEntries'), params) oGui.setEndOfDirectory()