示例#1
0
def showEntries(entryUrl=False, sGui=False):
    oGui = sGui if sGui else cGui()
    params = ParameterHandler()
    if not entryUrl: entryUrl = params.getValue('sUrl')
    request = cRequestHandler(entryUrl)
    sHtmlContent = request.request()
    pattern = '6">.*?<a href="([^"]+)" title="([^"]+).*?<img src="([^"]+)'
    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 sUrl, sName, sThumbnail in aResult:
        isTvshow = True if 'folge' in sUrl else False
        sThumbnail = cCFScrape.createUrl(sThumbnail, request)
        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('sThumbnail', sThumbnail)
        params.setParam('sName', sName)
        params.setParam('entryUrl', sUrl)
        oGui.addFolder(oGuiElement, params, isTvshow, total)
    if not sGui:
        oGui.setView('tvshows' if 'folge' in entryUrl else 'movies')
        oGui.setEndOfDirectory()
def showEntries(entryUrl=False, sGui=False):
    oGui = sGui if sGui else cGui()
    params = ParameterHandler()
    if not entryUrl: entryUrl = params.getValue('sUrl')
    oRequest = _getRequestHandler(entryUrl, ignoreErrors=(sGui is not False))
    sHtmlContent = oRequest.request()
    pattern = '<div[^>]*class="ml-item-content"[^>]*>.*?'  # start element
    pattern += '<a[^>]*href="([^"]*)"[^>]*>.*?'  # url
    pattern += '(?:<span[^>]*class="quality-label (\w+)"[^>]*>.*?)?'  # quality
    pattern += '<img[^>]*src="([^"]*)"[^>]*>.*?'  # thumbnail
    pattern += '(?:<span[^>]*class="season-label"[^>]*>.*?<span[^>]*class="el-num"[^>]*>\s+(\d+)\s+</span>.*?)?'  # season
    pattern += '</a>.*?'  # end link
    pattern += '<h\d+>(.*?)</h\d+>.*?'  # title
    pattern += '(?:<span[^>]*class="[^"]*glyphicon-time[^"]*"[^>]*></span>[^\d]*(\d+) min[^<]*</li>.*?)?'  # duration
    pattern += '(?:<span[^>]*class="[^"]*glyphicon-calendar[^"]*"[^>]*></span>(.*?)</li>.*?)'  # year
    pattern += '(?:<p>IMDb:</p>([^<]*)</li>.*?)'  # imdb
    pattern += '(?:<div[^>]*class="caption-description"[^>]*>(.*?)</div>.*?)'  # description
    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, sQuality, sThumbnail, sSeason, sName, sDuration, sYear, sImdb, sDesc in aResult:
        isTvshow = True if sSeason else False
        sName = sName.strip()
        sThumbnail = cCFScrape.createUrl(sThumbnail, oRequest)
        oGuiElement = cGuiElement(sName, SITE_IDENTIFIER, 'showHosters')
        res = re.search('(.*?)\s(?:staf+el|s)\s*(\d+)', sName, re.I)
        if res:
            sName = res.group(1)
            sSeason = res.group(2)
            isTvshow = True
            oGuiElement.setTVShowTitle(sName)
            oGuiElement.setFunction('showEpisodes')
            oGuiElement.setTitle('%s - Staffel %s' % (sName, sSeason))
            params.setParam('sSeason', sSeason)
        oGuiElement.setYear(sYear)
        oGuiElement.setThumbnail(sThumbnail)
        oGuiElement.setMediaType('tvshow' if isTvshow else 'movie')
        oGuiElement.setDescription(sDesc)
        oGuiElement.addItemValue('rating', sImdb)
        if sDuration:
            oGuiElement.addItemValue('duration', int(sDuration) * 60)
        params.setParam('sUrl', sUrl)
        params.setParam('sName', sName)
        params.setParam('sThumbnail', sThumbnail)
        oGui.addFolder(oGuiElement, params, isTvshow, total)

    if not sGui:
        sPattern = '<li[^>]*class="active".*?<a[^>]*href="([^"]*)"[^>]*>\d+</a>'
        isMatch, sPageUrl = cParser.parseSingleResult(sHtmlContent, sPattern)
        if isMatch:
            params.setParam('sUrl', sPageUrl)
            oGui.addNextPage(SITE_IDENTIFIER, 'showEntries', params)
        oGui.setView('tvshows' if '/tv' in entryUrl else 'movies')
        oGui.setEndOfDirectory()
def showEntries(entryUrl=False, sGui=False, sSearchText=None):
    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).request()
    isMatch, url = cParser.parseSingleResult(sHtmlContent, "url : '([^']+)")
    isMatch, token = cParser.parseSingleResult(sHtmlContent, "token':'([^']+)")
    oRequest = cRequestHandler(url)
    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

    total = len(aResult)
    for sName, sUrl, sThumbnail in aResult:
        isTvshow = True if 'folge' in sUrl else False
        sThumbnail = sThumbnail.replace('\/', '/')
        sThumbnail = cCFScrape.createUrl(sThumbnail, oRequest)
        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.replace('\/', '/')[:-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()
示例#4
0
def showHosters():
    sUrl = ParameterHandler().getValue('entryUrl')
    sHtmlContent = cRequestHandler(sUrl).request()
    pattern = 'src="([^"]+)"[^>]*frameborder'
    aResult = cParser().parse(sHtmlContent, pattern)
    hosters = []
    for hUrl in aResult[1]:
        if not hUrl.startswith('http'):
            hUrl = 'https:' + hUrl
        if 'view.php' in hUrl:
            oRequest = cRequestHandler(hUrl)
            oRequest.addHeaderEntry('Referer', hUrl)
            sHtmlContent = oRequest.request()
            aResult = cParser().parse(
                sHtmlContent, "(?:jbdaskgs|m3u8File)[^>]=[^>]'([^']+)")
            cf = cCFScrape.createUrl(sUrl, oRequest)
            for sUrl in aResult[1]:
                if 'downloaded.' in sUrl:
                    sUrl = 'https://fast.streamservice.online/public/dist/index.html?id=' + sUrl
                    hoster = {'link': sUrl, 'name': 'play'}
                    hosters.append(hoster)
                    continue
                import base64
                sUrl = base64.b64decode(sUrl)
                isMatch, aResult = cParser.parse(
                    sUrl, '"file":"([^"]+).*?label":"([^"]+)')
                for sUrl, sQuality in aResult:
                    if 'google' in sUrl:
                        hoster = {
                            'link': sUrl,
                            'name': sQuality,
                            'quality': QUALITY_ENUM[sQuality]
                        }
                    else:
                        hoster = {
                            'link': sUrl + cf,
                            'name': sQuality,
                            'quality': QUALITY_ENUM[sQuality]
                        }
                    hosters.append(hoster)
        if 'wp-embed.php' in hUrl:
            oRequest = cRequestHandler(hUrl)
            oRequest.addHeaderEntry('Referer', hUrl)
            sHtmlContent = oRequest.request()
            aResult = cParser.parse(sHtmlContent, '<iframe[^>]src="([^"]+)')
            for sUrl in aResult[1]:
                isMatch, hname = cParser().parseSingleResult(
                    sUrl, '^(?:https?://)?(?:[^@\n]+@)?([^:/\n]+)')
                hoster = {'link': sUrl, 'name': hname}
                hosters.append(hoster)
    if hosters:
        hosters.append('getHosterUrl')
    return hosters
示例#5
0
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 = '<div[^>]*class="poster"><img[^>]src="([^"]+)"[^>]alt="([^"]+).*?(.*?)<a[^>]href="([^"]+).*?<span>([\d]+)</span>.*?<div[^>]class="texto">([^"]+)</div>'
    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, sDummy, sUrl, sYear, sDesc in aResult:
        isTvshow = True if "serie" in sUrl else False
        if sThumbnail.startswith('//'):
            sThumbnail = 'https:' + sThumbnail
        sThumbnail = cCFScrape.createUrl(sThumbnail, oRequest)
        if sUrl.startswith('//'):
            sUrl = 'https:' + sUrl
        oGuiElement = cGuiElement(sName, SITE_IDENTIFIER,
                                  'showSeasons' if isTvshow else 'showHosters')
        oGuiElement.setMediaType('tvshow' if isTvshow else 'movie')
        oGuiElement.setThumbnail(sThumbnail)
        oGuiElement.setFanart(sThumbnail)
        if 'German' in sDummy:
            oGuiElement.setLanguage('Deutsch')
        if 'English' in sDummy:
            oGuiElement.setLanguage('Englisch')
        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 = '"next"[^>]*href="([^"]+)'
        isMatchNextPage, sNextUrl = cParser.parseSingleResult(
            sHtmlContent, pattern)
        if isMatchNextPage:
            if sNextUrl.startswith('//'):
                sNextUrl = 'https:' + sNextUrl
            params.setParam('sUrl', sNextUrl)
            oGui.addNextPage(SITE_IDENTIFIER, 'showEntries', params)
        oGui.setView('tvshows' if 'serie' in sUrl else 'movies')
        oGui.setEndOfDirectory()
示例#6
0
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 = '"><a[^>]href="([^"]+)"[^>]title="([^"]+)"><img[^>]src="([^"]+)'
    isMatch, aResult = cParser.parse(sHtmlContent, pattern)
    if not isMatch:
        pattern = '</div><a[^>]href="([^"]+)"[^>]title="([^"]+)">.*?src="([^"]+)'
        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 sUrl, sName, sThumbnail in aResult:
        isTvshow, aResult = cParser.parse(sName, 'S\d\dE\d\d')
        if sThumbnail.startswith('/'):
            sThumbnail = URL_MAIN + sThumbnail
        sThumbnail = cCFScrape.createUrl(sThumbnail, oRequest)
        oGuiElement = cGuiElement(sName, SITE_IDENTIFIER, 'showSeasons' if isTvshow else 'showHosters')
        oGuiElement.setMediaType('tvshow' if isTvshow else 'movie')
        oGuiElement.setThumbnail(sThumbnail)
        oGuiElement.setFanart(sThumbnail)
        if sUrl.startswith('//'):
            params.setParam('entryUrl', 'https:' + sUrl)
        else:
            params.setParam('entryUrl', sUrl)
        params.setParam('sName', sName)
        params.setParam('sThumbnail', sThumbnail)
        oGui.addFolder(oGuiElement, params, isTvshow, total)
    if not sGui:
        pattern = '<a[^>]class="pageing.*?href=([^>]+)>[^>]v'
        isMatchNextPage, sNextUrl = cParser.parseSingleResult(sHtmlContent, pattern)
        if isMatchNextPage:
            if sNextUrl.startswith('/'):
                sNextUrl = URL_MAIN + sNextUrl
            params.setParam('sUrl', sNextUrl.replace("'", "").replace('"', ''))
            oGui.addNextPage(SITE_IDENTIFIER, 'showEntries', params)
        oGui.setView('tvshow' if isTvshow else 'movie')
        oGui.setEndOfDirectory()
def showEntries(entryUrl=False, sGui=False):
    # GUI-Element erzeugen wenn nötig
    oGui = sGui if sGui else cGui()

    # ParameterHandler erzeugen
    params = ParameterHandler()

    # URL ermitteln falls nicht übergeben
    if not entryUrl: entryUrl = params.getValue('sUrl')

    # Aktuelle Seite ermitteln und ggf. URL anpassen
    iPage = int(params.getValue('page'))

    # Daten ermitteln
    oRequest = cRequestHandler(entryUrl + '&page=' + str(iPage) if iPage > 0 else entryUrl,
                               ignoreErrors=(sGui is not False))
    sHtmlContent = oRequest.request()

    # Filter out the main section
    pattern = '<ul class="products row">(.*?)</ul>'
    isMatch, aMainContents = cParser.parse(sHtmlContent, pattern)

    # Funktion verlassen falls keine Daten ermittelt werden konnten
    if not isMatch:
        if not sGui: oGui.showInfo('streamon', 'Es wurde kein Eintrag gefunden')
        return

    # Gefundenen Bereiche zusammenführen (tritt z.b bei der Suche auf)
    sMainContent = ''
    for content in aMainContents:
        sMainContent += content

    # Funktion verlassen falls keine Daten ermittelt werden konnten
    if not sMainContent:
        if not sGui: oGui.showInfo('streamon', 'Es wurde kein Eintrag gefunden')
        return

    # URL ermitteln
    pattern = '<div[^>]*class="box-product clearfix"[^>]*>\s*?'
    pattern += '<a[^>]*href="([^"]*)"[^>]*>.*?'

    # Thumbnail ermitteln
    pattern += '<img[^>]*src="([^"]*)"[^>]*>.*?'

    # Prüfung auf Episoden-Einträge
    pattern += '(?:<div[^>]*class="episode"[^>]*>([^"]*)</div>.*?)?'

    # Name ermitteln
    pattern += '<div[^>]*class="popover-title"[^>]*>.*?'
    pattern += '<span[^>]*class="name"[^>]*>([^<>]*)</span>.*?'

    # Beschreibung ermitteln
    pattern += '<div[^>]*class="popover-content"[^>]*>.*?<p>([^<]+)</p>'

    # HTML parsen
    isMatch, aResult = cParser.parse(sMainContent, pattern)

    # Kein Einträge gefunden? => Raus hier
    if not isMatch:
        if not sGui: oGui.showInfo('streamon', 'Es wurde kein Eintrag gefunden')
        return

    # Listengröße ermitteln
    total = len(aResult)

    # Alle Ergebnisse durchlaufen
    for sUrl, sThumbnail, sEpisodeNrs, sName, sDesc in aResult:
        # Bei Filmen das Jahr vom Title trennen
        aYear = re.compile("(.*?)\((\d*)\)").findall(sName)
        iYear = False
        for name, year in aYear:
            sName = name
            iYear = year
            break

        # prüfen ob der Eintrag ein Serie/Staffel ist
        isTvshow = True if sEpisodeNrs else False

        # Listen-Eintrag erzeugen
        sUIElementName = sName

        if URL_PARMS_ORDER_YEAR in entryUrl:
            sUIElementName += ' (' + str(iYear) + ')'

        oGuiElement = cGuiElement(sUIElementName, SITE_IDENTIFIER, 'showHosters')

        # Bei Serien Title anpassen
        res = re.search('(.*?)\s(?:staf+el|s)\s*(\d+)', sName, re.I)
        if res:
            oGuiElement.setTVShowTitle(res.group(1))
            oGuiElement.setTitle('%s - Staffel %s' % (res.group(1), int(res.group(2))))
            params.setParam('sSeason', int(res.group(2)))
        elif not res and isTvshow:
            oGuiElement.setTVShowTitle(sName)
            oGuiElement.setTitle('%s - Staffel %s' % (sName, "1"))
            params.setParam('sSeason', "1")

        # Thumbnail und Beschreibung für Anzeige anpassen
        sThumbnail = sThumbnail.replace('_thumb', '')
        sThumbnail = cCFScrape.createUrl(sThumbnail, oRequest)

        # Falls vorhanden Jahr ergänzen
        if iYear:
            oGuiElement.setYear(iYear)

        # Eigenschaften setzen und Listeneintrag hinzufügen
        oGuiElement.setThumbnail(sThumbnail)
        oGuiElement.setMediaType('tvshow' if isTvshow else 'movie')
        oGuiElement.setDescription(sDesc)
        params.setParam('entryUrl', sUrl)
        params.setParam('sName', sName)
        params.setParam('sThumbnail', sThumbnail)
        params.setParam('isTvshow', isTvshow)
        oGui.addFolder(oGuiElement, params, isTvshow, total)

    # Nur ausführen wenn das Gui-Element Plugin intern ist
    if not sGui:
        # Pattern um die Aktuelle Seite zu ermitteln
        # pattern = '<ul[^>]*class="pagination[^>]*>.*?'
        # pattern += '<li[^>]*class="\s*active\s*"[^>]*>.*?</li>.*?<a[^>]*>(\d*)</a>.*?</ul>'

        # Seite parsen
        # isMatch, sPageNr = cParser.parse(sHtmlContent, pattern)

        sPageNr = int(params.getValue('page'))
        if sPageNr == 0:
            sPageNr = 2
        else:
            sPageNr += 1

        # TODO: Fallunterscheidung entfernt, weil hdfilme die pagination unzuverlässig anzeigt
        # Falls ein Ergebniss gefunden wurden "Next-Page" ergänzen
        # if isMatch:
        params = ParameterHandler()
        params.setParam('page', int(sPageNr))
        params.setParam('sUrl', entryUrl)
        oGui.addNextPage(SITE_IDENTIFIER, 'showEntries', params)

        # Liste abschließen und View setzen
        oGui.setView('tvshows' if URL_SHOWS in entryUrl else 'movies')
        oGui.setEndOfDirectory()