Example #1
0
def searchGlobal():
    oGui = cGui()
    sSearchText = oGui.showKeyBoard()
    if (sSearchText != False and sSearchText != ''):
        aPlugins = []
        aPlugins = cPluginHandler().getAvailablePlugins()
        oGui.dialog = xbmcgui.DialogProgress()
        oGui.dialog.create('xStream',"Searching...")
        numPlugins = len(aPlugins)
        count = 0
        for pluginEntry in aPlugins:
            pluginName = str(pluginEntry['name'])
            pluginSiteName = pluginEntry['id']
            oGui.dialog.update(count*100/numPlugins,'Searching: '+pluginName+'...')
            count += 1
            logger.info('Searching for "'+sSearchText+'" at '+pluginName)
            try:
                plugin = __import__(pluginSiteName, globals(), locals())
                function = getattr(plugin, '_search')
                oGuiElement = cGuiElement('[B][COLOR yellow]----'+pluginName+'----[/COLOR][/B]',pluginSiteName,'spacer')
                if len(pluginEntry)>2:
                    oGuiElement.setThumbnail(pluginEntry['icon'])
                oGui.addFolder(oGuiElement)
                function(oGui, sSearchText)
            except:
                logger.info(pluginName+': search failed')
                import traceback
                print traceback.format_exc()
        oGui.dialog.close()
        oGui.setView()
        oGui.setEndOfDirectory()
    return True
def showSeasons():
    oGui = cGui()
    params = ParameterHandler()
    sTitle = params.getValue('Title')
    seriesId = params.getValue('seriesID')
    sImdb = params.getValue('imdbID')

    logger.info("%s: show seasons of '%s' " % (SITE_NAME, sTitle))

    data = _getJsonContent("series/%s/1" % seriesId)
    rangeStart = not int(data["series"]["movies"])
    total = int(data["series"]["seasons"])
    for i in range(rangeStart, total + 1):
        seasonNum = str(i)
        if i is 0:
            seasonTitle = 'Film(e)'
            dialogType = 'showCinemaMovies'
        else:
            seasonTitle = '%s - Staffel %s' %(sTitle, seasonNum)
            if params.getValue('specific') == 'Episode':
                dialogType = 'randomEpisode'
            else:
                dialogType = 'showEpisodes'
        guiElement = cGuiElement(seasonTitle, SITE_IDENTIFIER, dialogType)
        guiElement.setMediaType('season')
        guiElement.setSeason(seasonNum)
        guiElement.setTVShowTitle(sTitle)

        params.setParam('Season', seasonNum)
        guiElement.setThumbnail(URL_COVER % data["series"]["id"])
        oGui.addFolder(guiElement, params, iTotal = total)
    oGui.setView('seasons')
    oGui.setEndOfDirectory()
def __getHtmlContent(sUrl = None, sSecurityValue=None):
    params = ParameterHandler()

    # Test if a url is available and set it
    if sUrl is None and not params.exist('siteUrl'):
        logger.info("There is no url we can request.")
        return False
    else:
        if sUrl is None:
            sUrl = params.getValue('siteUrl')

    # Test if a security value is available
    if sSecurityValue is None:
        if params.exist('securityCookie'):
            sSecurityValue = params.getValue('securityCookie')
        else :
            sSecurityValue = ''

    # Make the request
    oRequest = cRequestHandler(sUrl)
    #oRequest.addHeaderEntry('Cookie', sSecurityValue)
    #oRequest.addHeaderEntry('Accept', '*/*')
    #oRequest.addHeaderEntry('Host', 'gstream.to')

    return oRequest.request()
def _search(oGui, sSearchText):
    # Create the request with the search value
    sFullSearchUrl = URL_SEARCH + ("?q=%s" % sSearchText)
    logger.info("Search URL: %s" % sFullSearchUrl)
    sHtmlContent = __getHtmlContent(sFullSearchUrl)
    # Display all items returned...
    __displayItems(oGui, sHtmlContent)
def showEpisodes():
    oGui = cGui()
    oParams = ParameterHandler()
    sShowTitle = oParams.getValue('Title')
    seriesId = oParams.getValue('seriesID')
    sImdb = oParams.getValue('imdbID')
    sSeason = oParams.getValue('Season')

    logger.info("%s: show episodes of '%s' season '%s' " % (SITE_NAME, sShowTitle, sSeason))

    data = _getJsonContent("series/%s/%s" % (seriesId, sSeason))
    total = len(data['epi'])
    for episode in data['epi']:
        title = "%d - " % int(episode['epi'])
        if episode['german']:
            title += episode['german'].encode('utf-8')
        else:
            title += episode['english'].encode('utf-8')
        guiElement = cGuiElement(title, SITE_IDENTIFIER, 'showHosters')
        guiElement.setMediaType('episode')
        guiElement.setSeason(data['season'])
        guiElement.setEpisode(episode['epi'])
        guiElement.setTVShowTitle(sShowTitle)
        guiElement.setThumbnail(URL_COVER % data["series"]["id"])
        oParams.setParam('EpisodeNr', episode['epi'])
        oGui.addFolder(guiElement, oParams, bIsFolder = False, iTotal = total)
    oGui.setView('episodes')
    oGui.setEndOfDirectory()
def load():
    logger.info("Load %s" % SITE_NAME)

    sSecurityValue = __getSecurityCookieValue()
    oParams = ParameterHandler()
    if sSecurityValue:
        oParams.setParam('securityCookie', sSecurityValue)
    # Create all main menu entries
    oGui = cGui()

    oParams.setParam('sUrl', URL_NEWS)
    oParams.setParam('page', 1)
    oParams.setParam('mediaType', 'news')
    oGui.addFolder(cGuiElement('Neues von Heute', SITE_IDENTIFIER, 'showNews'), oParams)
    oParams.setParam('sUrl', URL_MOVIE_PAGE)
    oParams.setParam('mediaType', 'movie')
    oGui.addFolder(cGuiElement('Filme', SITE_IDENTIFIER, 'showMovieMenu'), oParams)
    oParams.setParam('sUrl', URL_SERIE_PAGE)
    oParams.setParam('mediaType', 'series')
    oGui.addFolder(cGuiElement('Serien', SITE_IDENTIFIER, 'showSeriesMenu'), oParams)
    oParams.setParam('sUrl', URL_DOCU_PAGE)
    oParams.setParam('mediaType', 'documentation')
    oGui.addFolder(cGuiElement('Dokumentationen', SITE_IDENTIFIER, 'showDocuMenu'), oParams)
    oParams.setParam('sUrl', URL_SEARCH)
    oParams.setParam('mediaType', '')
    oGui.addFolder(cGuiElement('Suche', SITE_IDENTIFIER, 'showSearch'), oParams)
    oGui.setEndOfDirectory()
def showCharacters():
    logger.info('load showCharacters')
    oGui = cGui()

    oParams = ParameterHandler()
    sSecurityValue = oParams.getValue('securityCookie')
    if oParams.exist('sUrl') and oParams.exist('page') and oParams.exist('mediaType'):
        siteUrl = oParams.getValue('sUrl')
        # iPage = oParams.getValue('page')
        # sMediaType = oParams.getValue('mediaType')
        # request
        sHtmlContent = __getHtmlContent(siteUrl, sSecurityValue)
        # parse content
        sPattern = 'class="LetterMode.*?>([^>]+)</a>'
        oParser = cParser()
        aResult = oParser.parse(sHtmlContent, sPattern)

    if aResult[0]:
        for aEntry in aResult[1]:
            oGuiElement = cGuiElement(aEntry, SITE_IDENTIFIER, 'ajaxCall')
            # oOutputParameterHandler = ParameterHandler()
            oParams.setParam('character', aEntry[0])
            # oOutputParameterHandler.addParameter('page', iPage)
            # oOutputParameterHandler.addParameter('mediaType', sMediaType)
            # oOutputParameterHandler.addParameter('securityCookie', sSecurityValue)
            if oParams.exist('mediaTypePageId'):
                sMediaTypePageId = oParams.getValue('mediaTypePageId')
                oParams.setParam('mediaTypePageId', sMediaTypePageId)
            oGui.addFolder(oGuiElement, oParams)

    oGui.setEndOfDirectory()
def parseMovieEntrySite():
    oParams = ParameterHandler()
    sSecurityValue = oParams.getValue('securityCookie')
    if oParams.exist('sUrl'):
        sUrl = oParams.getValue('sUrl')
        # get movieEntrySite content
        sHtmlContent = __getHtmlContent(sUrl, sSecurityValue)
        sMovieTitle = __createMovieTitle(sHtmlContent)
        # get thumbnail
        result = cParser().parse(sHtmlContent, '<div class="Grahpics">.*?<img src="([^"]+)"')
        thumbnail = URL_MAIN + str(result[1][0]) if result[0] else False

        bIsSerie = __isSerie(sHtmlContent)
        if bIsSerie:
            oGui = cGui()
            aSeriesItems = parseSerieSite(sHtmlContent)
            if not aSeriesItems[0]: return
            total = len(aSeriesItems)
            for aEntry in aSeriesItems[1]:
                seasonNum = str(aEntry)
                guiElement = cGuiElement('%s - Staffel %s' % (sMovieTitle, seasonNum), SITE_IDENTIFIER, 'showEpisodes')
                guiElement.setMediaType('season')
                guiElement.setSeason(seasonNum)
                guiElement.setTVShowTitle(sMovieTitle)

                oParams.setParam('Season', seasonNum)
                if thumbnail:
                    guiElement.setThumbnail(thumbnail)
                oGui.addFolder(guiElement, oParams, iTotal=total)
            oGui.setView('seasons')
            oGui.setEndOfDirectory()
        else:
            logger.info('Movie')
            result = showHosters(sHtmlContent, sMovieTitle)
            return result
Example #9
0
    def __addPluginsToSettings(self, data):
        """
        data (dict): containing plugininformations
        """
        import xml.etree.ElementTree as ET

        tree = ET.parse(self.settingsFile)
        # find Element for plugin Settings
        pluginElem = False
        for elem in tree.findall("category"):
            if elem.attrib["label"] == "30022":
                pluginElem = elem
                break
        if not pluginElem:
            logger.info("pluginElement not found")
            return False
        # add plugins to settings
        for pluginID in data:
            plugin = data[pluginID]
            attrib = {"default": "false", "type": "bool"}
            attrib["id"] = "plugin_%s" % pluginID
            attrib["label"] = plugin["name"]
            newPlugin = ET.Element()
            ET.SubElement(pluginElem, "setting", attrib)
        tree.write(self.settingsFile)
def parseSerieEpisodes(sHtmlContent, seasonNum):
    aSeriesItems = []

    sPattern = 'id="SeasonSelection" rel="([^"]+)"'
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)
    if aResult[0]:
        aSeriesUrls = aResult[1][0].split("&amp;")
        sSeriesUrl = '&' + str(aSeriesUrls[0]) + '&' + str(aSeriesUrls[1])

    sPattern = '<option.*?value="%d" rel="([^"]+)".*?>Staffel.*?</option>' % int(seasonNum)

    aResult = oParser.parse(sHtmlContent, sPattern)
    logger.info(aResult[1])
    if aResult[0]:
        aSeriesIds = aResult[1][0].split(",")
        for iSeriesIds in aSeriesIds:
            aSeries = {}
            iEpisodeNum = iSeriesIds
            sTitel = 'Folge ' + str(iEpisodeNum)
            sUrl = URL_EPISODE_URL + sSeriesUrl + '&Season=' + str(seasonNum) + '&Episode=' + str(iEpisodeNum)
            aSeries['title'] = sTitel
            aSeries['url'] = sUrl
            aSeries['season'] = seasonNum
            aSeries['episode'] = iEpisodeNum
            aSeriesItems.append(aSeries)
    return aSeriesItems
    def __callRequest(self):
        cookieJar = mechanize.LWPCookieJar()
        try: #TODO ohne try evtl.
            cookieJar.load(self._cookiePath, self.__bIgnoreDiscard, self.__bIgnoreExpired)
        except Exception as e:
            logger.info(e)
        sParameters = urllib.urlencode(self.__aParameters)

        opener = mechanize.build_opener(SmartRedirectHandler,
                                        mechanize.HTTPEquivProcessor,
                                        mechanize.HTTPRefreshProcessor)
        if (len(sParameters) > 0):
            oRequest = mechanize.Request(self.__sUrl, sParameters)
        else:
            oRequest = mechanize.Request(self.__sUrl)

        for aHeader in self.__aHeaderEntries:                
                for sHeaderKey, sHeaderValue in aHeader.items():
                    oRequest.add_header(sHeaderKey, sHeaderValue)
        cookieJar.add_cookie_header(oRequest)
        
        if self.caching and self.cacheTime > 0:
            sContent = self.readCache(self.getRequestUri())
            if sContent:
                return sContent
        try:
            oResponse = opener.open(oRequest,timeout = 60)             
        except mechanize.HTTPError, e:
            if not self.ignoreErrors:
                xbmcgui.Dialog().ok('xStream','Fehler beim Abrufen der Url:',self.__sUrl, str(e))
                logger.error("HTTPError "+str(e)+" Url: "+self.__sUrl)
                return ''
            else:
                oResponse = e                 
Example #12
0
def getHosters():
    oParams = ParameterHandler()
    sChannelUrl = oParams.getValue('channelUrl')
    sChannelName = oParams.getValue('channelName')
    logger.info('get stream url for URL: ' + sChannelUrl)

    oRequestHandler = cRequestHandler(sChannelUrl)
    oRequestHandler.addHeaderEntry('Referer', URL_MAIN)
    sHtmlContent = oRequestHandler.request();

    hosters = []

    sPattern = "'file': '(.*?)',"
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)
    if aResult[0]:
        sUrl = str(aResult[1])[2:-2]
        logger.info('load channel ' + sChannelName + ' with url ' + sUrl)

        hoster = {}
        hoster['link'] = sUrl
        hoster['name'] = 'streamcloud'  # dummy
        hosters.append(hoster)
    hosters.append('getHosterUrl')
    return hosters
Example #13
0
def showSeries(sUrl=False):
    logger.info('load showSeries')
    oParams = ParameterHandler()

    if not sUrl:
        sUrl = oParams.getValue('sUrl')

    sPagePattern = '<a href="' + sUrl + '(\d+).html">'

    # request
    sHtmlContent = __getHtmlContent(sUrl)
    # parse content
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPagePattern)

    pages = 1
    if aResult[0]:
        if representsInt(aResult[1][-1]):
            pages = aResult[1][-1]

    oGui = cGui()

    # because sometimes 2 pages have the same content
    dupeCheck = []
    for x in range(1, int(pages) + 1):
        dupeCheck = showSeriesPage(oGui, sUrl, x, dupeCheck)

    oGui.setView('tvshows')
    oGui.setEndOfDirectory()
Example #14
0
def showSeasons():
    logger.info('load showSeasons')
    oParams = ParameterHandler()
    sTitle = oParams.getValue('Title')
    sPattern = '<a href="#season-(.*?)" data-parent=".*?>(.*?)</a>'

    # request
    sHtmlContent = __getHtmlContent()
    # parse content
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)

    oGui = cGui()
    if aResult[0]:
        for sId, seasonNum in aResult[1]:
            guiElement = cGuiElement('%s - Staffel %s' % (sTitle, seasonNum), SITE_IDENTIFIER, 'showEpisodes')
            guiElement.setMediaType('season')
            guiElement.setSeason(seasonNum)
            guiElement.setTVShowTitle(sTitle)

            oParams.setParam('Season', seasonNum)
            oGui.addFolder(guiElement, oParams)

    oGui.setView('seasons')
    oGui.setEndOfDirectory()
Example #15
0
def searchGlobal():
    import threading
    oGui = cGui()
    oGui.globalSearch = True
    oGui._collectMode = True
    sSearchText = oGui.showKeyBoard()
    if not sSearchText: return True
    aPlugins = []
    aPlugins = cPluginHandler().getAvailablePlugins()
    dialog = xbmcgui.DialogProgress()
    dialog.create('xStream',"Searching...")
    numPlugins = len(aPlugins)
    threads = []
    for count, pluginEntry in enumerate(aPlugins):
        dialog.update((count+1)*50/numPlugins,'Searching: '+str(pluginEntry['name'])+'...')
        logger.info('Searching for %s at %s' % (sSearchText, pluginEntry['id']))
        t = threading.Thread(target=_pluginSearch, args=(pluginEntry,sSearchText,oGui), name =pluginEntry['name'])
        threads += [t]
        t.start()
    for count, t in enumerate(threads):
        t.join()
        dialog.update((count+1)*50/numPlugins+50, t.getName()+' returned')
    dialog.close()
    # deactivate collectMode attribute because now we want the elements really added
    oGui._collectMode = False
    total=len(oGui.searchResults)
    for result in sorted(oGui.searchResults, key=lambda k: k['guiElement'].getSiteName()):
        oGui.addFolder(result['guiElement'],result['params'],bIsFolder=result['isFolder'],iTotal=total)
    oGui.setView()
    oGui.setEndOfDirectory()
    return True
def searchAlter(params):
    searchText = params.getValue('searchTitle')
    searchImdbId = params.getValue('searchImdbID')
    import threading
    oGui = cGui()
    aPlugins = []
    aPlugins = cPluginHandler().getAvailablePlugins()
    dialog = xbmcgui.DialogProgress()
    dialog.create('xStream',"Searching...")
    numPlugins = len(aPlugins)
    count = 0
    threads = []
    for pluginEntry in aPlugins:
        dialog.update(count*100/numPlugins,'Searching: '+str(pluginEntry['name'])+'...')
        count += 1
        logger.info('Searching for "'+searchText+'" at '+pluginEntry['id'])
        t = threading.Thread(target=pluginSearch, args=(pluginEntry,searchText))
        threads += [t]
        t.start()
    for t in threads: 
        t.join()
    dialog.close()
    oGui.setView()
    oGui.setEndOfDirectory()
    #xbmc.executebuiltin('Container.Update')
    return True
Example #17
0
def showEpisodes():
    logger.info('load showEpisodes')
    oParams = ParameterHandler()
    sTitle = oParams.getValue('Title')
    sSeason = oParams.getValue('Season')

    sPattern = 'class="list-group-item".*?<span itemprop="name">Staffel ' + sSeason + ' Episode(?:[\s]*)(.*?)</span>.*?<a class="episode-name" href="(.*?)" title="(.*?)"'

    # request
    sHtmlContent = __getHtmlContent()
    # parse content
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)

    oGui = cGui()
    if (aResult[0] == True):
        for eNr, link, title in aResult[1]:
            guiElement = cGuiElement('Episode %s - %s' % (eNr, title), SITE_IDENTIFIER, 'showHosters')
            guiElement.setMediaType('episode')
            guiElement.setSeason(sSeason)

            # Special fix for non-int episode numbers (like Attack on Titan 13.5)
            # Can't even check this on thetvdb.com, because AOT 13.5 for example is Season 0 Episode 1
            # May I can use "<airsbefore_episode>" and "<airsbefore_season>" for metadata
            if representsInt(eNr):
                guiElement.setEpisode(eNr)

            guiElement.setTVShowTitle(sTitle)

            oParams.setParam('sUrl', link)
            oGui.addFolder(guiElement, oParams, bIsFolder=False)

    oGui.setView('episodes')
    oGui.setEndOfDirectory()
def load():
    logger.info("Load %s" % SITE_NAME)
    oGui = cGui()
    oGui.addFolder(cGuiElement('Alle Serien', SITE_IDENTIFIER, 'showSeries'))
    oGui.addFolder(cGuiElement('A-Z', SITE_IDENTIFIER, 'showCharacters'))
    oGui.addFolder(cGuiElement('Suche', SITE_IDENTIFIER, 'showSearch'))
    oGui.setEndOfDirectory()
def resolveLinkcrypt(sUrl, hosters):
    oRequest = cRequestHandler(sUrl)
    sHtmlContent = oRequest.request()
    pattern = '<form action="http://linkcrypt.ws/out.html"[^>]*?>.*?'
    pattern += '<input[^>]*?value="(.+?)"[^>]*?name="file"'
    aResult = cParser().parse(sHtmlContent, pattern)
    if not aResult[0]:
        return

    for idx, weblink_id in enumerate(aResult[1]):
        try:
            oRequest = cRequestHandler("http://linkcrypt.ws/out.html")
            oRequest.addParameters('file', weblink_id)
            data = oRequest.request()
            link = re.compile("top.location.href=doNotTrack\('(.+?)'\)").findall(data)[0]
            hname = getHosterName(link)
            hname = "Part %d - %s" % (idx + 1, hname)
            logger.info("Resolved LinkCrypt link: %s" % link)
            hoster = dict()
            hoster['link'] = link
            hoster['name'] = hname
            hoster['displayedName'] = hname
            hosters.append(hoster)
        except Exception, detail:
            logger.info(detail)
            pass
    def getAvailablePlugins(self):
        pluginDB = self.__getPluginDB()
        # default plugins
        update = False
        fileNames = self.__getFileNamesFromFolder(self.defaultFolder)
        for fileName in fileNames:
            try:
                modTime = os.path.getmtime( os.path.join(self.defaultFolder,fileName+'.py'))
            except OSError:
                modTime = 0
            if fileName not in pluginDB or modTime > pluginDB[fileName]['modified']:
                logger.info('load plugin: '+ str(fileName))
                # try to import plugin
                aPlugin = self.__getPluginData(fileName)
                aPlugin['modified'] = modTime
                if aPlugin:
                    pluginDB[fileName] = aPlugin
                    update = True
        # check pluginDB for obsolete entries
        deletions = []
        for pluginID in pluginDB:
            if pluginID not in fileNames:
                deletions.append(pluginID)
        for id in deletions:
            del pluginDB[id]
        if update or deletions:
            self.__updateSettings(pluginDB)
            self.__updatePluginDB(pluginDB)

        return self.getAvailablePluginsFromDB()
def _getHostFromUrl(sUrl, sServername):
    # Seite abrufen
    sHtmlContent = cRequestHandler(sUrl).request()

    # JSon mit den Links ermitteln
    pattern = '(\[{".*?}\])'
    aResult = cParser().parse(sHtmlContent, pattern)

    # Nichts gefunden? => Raus hier
    if not aResult[0] or not aResult[1][0]: 
        logger.info("hoster pattern did not match")
        return False

    # hosterliste initialisieren
    hosters = []

    # Alle Einträge durchlaufen und Hostereintrag erstellen
    for entry in json.loads(aResult[1][0]):
        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
        hoster['resolveable'] = True
        hosters.append(hoster)

    # Hoster zurückgeben
    return hosters
def load():
    logger.info("Load %s" % SITE_NAME)
    oGui = cGui()
    oGui.addFolder(cGuiElement('Filme', SITE_IDENTIFIER, 'showMovieMenu'))
    oGui.addFolder(cGuiElement('Serien', SITE_IDENTIFIER, 'showTvShowMenu'))
    oGui.addFolder(cGuiElement('Suche', SITE_IDENTIFIER, 'showSearch'))
    oGui.setEndOfDirectory()
def showSeasons():
    oGui = cGui()
	
    params = ParameterHandler()
    sTitle = params.getValue('Title')
    seriesId = params.getValue('seriesID')
    sImdb = params.getValue('imdbID')
    
    logger.info("%s: show seasons of '%s' " % (SITE_NAME, sTitle))

    sHtmlContent = _getContent("series/%s/1" % seriesId)
    data = json.loads(sHtmlContent)
    total = int(data["series"]["seasons"])
    for i in range(1,total+1):
        seasonNum = str(i)
        guiElement = cGuiElement('%s - Staffel %s' %(sTitle,seasonNum), SITE_IDENTIFIER, 'showEpisodes')
        guiElement.setMediaType('season')
        guiElement.setSeason(seasonNum)
        guiElement.setTVShowTitle(sTitle)

        params.setParam('Season', seasonNum)
        guiElement.setThumbnail(URL_COVER % data["series"]["id"])
        oGui.addFolder(guiElement, params, iTotal = total)
    oGui.setView('seasons')
    oGui.setEndOfDirectory()
Example #24
0
def searchGlobal():
    import threading
    oGui = cGui()
    sSearchText = oGui.showKeyBoard()
    if (sSearchText != False and sSearchText != ''):
        aPlugins = []
        aPlugins = cPluginHandler().getAvailablePlugins()
        dialog = xbmcgui.DialogProgress()
        dialog.create('xStream',"Searching...")
        numPlugins = len(aPlugins)
        count = 0
        threads = []
        for pluginEntry in aPlugins:
            dialog.update(count*100/numPlugins,'Searching: '+str(pluginEntry['name'])+'...')
            count += 1
            logger.info('Searching for %s at %s' % (sSearchText, pluginEntry['id']))
            t = threading.Thread(target=_pluginSearch, args=(pluginEntry,sSearchText,oGui))
            threads += [t]
            t.start()
        for t in threads: 
            t.join()
        dialog.close()
        oGui.setView()
        oGui.setEndOfDirectory()
    return True
def showEpisodes():
    oGui = cGui()
    oParams = ParameterHandler()
    sShowTitle = oParams.getValue('Title')
    sUrl = oParams.getValue('siteUrl')
    sImdb = oParams.getValue('imdbID')    
    sSeason = oParams.getValue('Season')
    
    logger.info("%s: show episodes of '%s' season '%s' " % (SITE_NAME, sShowTitle, sSeason)) 
    
    oRequestHandler = cRequestHandler(sUrl+"/"+sSeason)
    sHtmlContent = oRequestHandler.request();
    data = json.loads(sHtmlContent)
    total = len(data['epi'])
    for episode in data['epi']:
        if episode['german']:
            title = episode['german'].encode('utf-8')
        else:
            title = episode['english'].encode('utf-8')
        guiElement = cGuiElement(str(episode['epi'])+" - "+title, SITE_IDENTIFIER, 'showHosters')
        guiElement.setMediaType('episode')
        guiElement.setSeason(data['season'])
        guiElement.setEpisode(episode['epi'])
        guiElement.setTVShowTitle(sShowTitle)
        guiElement.setThumbnail(URL_COVER % data["series"]["id"])

        #oParams.setParam('EpisodeNr', episode['epi'])
        oParams.setParam('siteUrl',sUrl+"/"+sSeason+"/"+episode['epi'])
        oGui.addFolder(guiElement, oParams, bIsFolder = False, iTotal = total)  
    oGui.setView('episodes')
    oGui.setEndOfDirectory()
 def writeCache(self, url, content):
     h = hashlib.md5(url).hexdigest()
     cacheFile = os.path.join(self.__cachePath, h)
     try:
         fhdl = file(cacheFile,'w')
         fhdl.write(content)
     except:                
         logger.info('Could not write Cache')
Example #27
0
def getHosterUrl(sUrl):
    logger.info("getHosterUrl with url %s" % (sUrl))
    results = []
    result = {}
    result['streamUrl'] = sUrl
    result['resolved'] = True
    results.append(result)
    return results
Example #28
0
def _mediaIsASerie(sUrl):
    logger.info('check if %s is a serie' % (sUrl))

    oRequestHandler = cRequestHandler(sUrl)
    sHtmlContent = oRequestHandler.request()

    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, '<select class="seasonselect"')
    return aResult[0]
def _pluginSearch(pluginEntry, sSearchText, oGui):
    try:
        plugin = __import__(pluginEntry['id'], globals(), locals())
        function = getattr(plugin, '_search')
        function(oGui, sSearchText)
    except:
        logger.info(pluginEntry['name']+': search failed')
        import traceback
        print traceback.format_exc()
Example #30
0
def showSearch():
    logger.info('load showSearch')
    oGui = cGui()
    sSearchText = oGui.showKeyBoard()
    if (sSearchText != False and sSearchText != ''):
        _search(oGui, sSearchText)
    else:
        return
    oGui.setEndOfDirectory()
Example #31
0
def showValueList():
    oGui = cGui()
    params = ParameterHandler()
    entryUrl = params.getValue('sUrl')
    valueType = params.getValue('valueType')

    sHtmlContent = cRequestHandler(entryUrl).request()
    sPattern = '<select[^>]*name="%s\[\]"[^>]*>(.*?)</select>' % valueType  # container#
    logger.info("sPattern %s" % sPattern)
    isMatch, strContainer = cParser.parseSingleResult(sHtmlContent, sPattern)

    if isMatch:
        sPattern = '<option[^>]*value="(.*?)"[^>]*>(.*?)</option>'  # container
        isMatch, aResult = cParser.parse(strContainer, sPattern)

    if not isMatch:
        return

    for sID, sName in aResult:
        params.setParam('sUrl', entryUrl + '&' + valueType + '[]=' + sID)
        oGui.addFolder(
            cGuiElement(sName.strip(), SITE_IDENTIFIER, 'showEntries'), params)
    oGui.setEndOfDirectory()
Example #32
0
def showGenresMenu():
    logger.info('load displayGenreSite')
    oParams = ParameterHandler()
    sPattern = '<a href="' + URL_GENRE + '(.*?).html".*?>(.*?)</a>'

    # request
    sHtmlContent = __getHtmlContent(URL_MAIN)
    # parse content
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)

    oGui = cGui()
    if (aResult[0] == True):
        for aEntry in aResult[1]:
            guiElement = cGuiElement(aEntry[1], SITE_IDENTIFIER, 'showSeries')
            #guiElement.setMediaType('fGenre') #not necessary
            oParams.addParams({
                'sUrl': URL_GENRE + aEntry[0] + '/',
                'iPage': 1
            })
            oGui.addFolder(guiElement, oParams)

    oGui.setEndOfDirectory()
Example #33
0
def showMovie():
    logger.info('load showMovie')
    oParams = ParameterHandler()
    sPattern = 'class="list-group-item".*?<img.*?src="(.*?)".*?itemprop="image".*?<span itemprop="name">(.*?)</span>.*?class="episode-name".*?href="(.*?)".*?title="(.*?)"'

    # request
    sHtmlContent = __getHtmlContent()
    # parse content
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)

    oGui = cGui()
    if (aResult[0] == True):
        for img, eNr, link, title in aResult[1]:
            guiElement = cGuiElement('Film %s - %s' % (eNr, title), SITE_IDENTIFIER, 'showHosters')
            guiElement.setThumbnail(img)
            guiElement.setMediaType('movie')
            guiElement.setTVShowTitle(title)
            oParams.addParams({'sUrl': link, 'from_moviesever': True})
            oGui.addFolder(guiElement, oParams, bIsFolder=False)

    oGui.setView('movies')
    oGui.setEndOfDirectory()
def load():
    logger.info("Load %s" % SITE_NAME)
    oGui = cGui()
    params = ParameterHandler()
    params.setParam('sUrl', URL_KINO)
    oGui.addFolder(
        cGuiElement('Aktuelle Kino Filme', SITE_IDENTIFIER, 'showEntries'),
        params)
    params.setParam('sUrl', URL_NEU)
    oGui.addFolder(
        cGuiElement('Die Neusten Filme', SITE_IDENTIFIER, 'showEntries'),
        params)
    params.setParam('sUrl', URL_BELIEBT)
    oGui.addFolder(
        cGuiElement('Die Beliebtesten Filme', SITE_IDENTIFIER, 'showEntries'),
        params)
    params.setParam('sUrl', URL_BEST)
    oGui.addFolder(
        cGuiElement('Die Besten Filme Aller Zeiten', SITE_IDENTIFIER,
                    'showEntries'), params)
    oGui.addFolder(cGuiElement('Genre', SITE_IDENTIFIER, 'showGenre'))
    oGui.addFolder(cGuiElement('Suche', SITE_IDENTIFIER, 'showSearch'))
    oGui.setEndOfDirectory()
Example #35
0
def showHosters():
    logger.info('load showHosters')
    oParams = ParameterHandler()
    sPattern = 'a href="(' + oParams.getValue('sUrl') + '.*?/)"'

    # request
    sHtmlContent = __getHtmlContent()
    # parse content
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)
    hosters = []

    hosters = getHoster(sHtmlContent, hosters)

    if aResult[0]:
        for link in aResult[1]:
            sHtmlContentTmp = __getHtmlContent(link)
            hosters = getHoster(sHtmlContentTmp, hosters)

    if hosters:
        hosters.append('getHosterUrl')

    return hosters
Example #36
0
    def addToPlaylist(self, siteResult=False):
        oGui = cGui()
        logger.info('attempt addToPlaylist')
        data = self._getInfoAndResolve(siteResult)
        if not data: return False

        logger.info('addToPlaylist file link: ' + str(data['link']))
        oGuiElement = cGuiElement()
        oGuiElement.setSiteName(self.SITE_NAME)
        oGuiElement.setMediaUrl(data['link'])
        oGuiElement.setTitle(data['title'])
        if data['thumb']:
            oGuiElement.setThumbnail(data['thumb'])
        if data['showTitle']:
            oGuiElement.setEpisode(data['episode'])
            oGuiElement.setSeason(data['season'])
            oGuiElement.setTVShowTitle(data['showTitle'])
        if self.dialog:
            self.dialog.close()
        oPlayer = cPlayer()
        oPlayer.addItemToPlaylist(oGuiElement)
        oGui.showInfo('Playlist', 'Stream wurde hinzugefügt', 5)
        return True
Example #37
0
def showGenres():
    logger.info('load displayGenreSite')
    pattern = '<td class="Title"><a.*?href="/Genre/([^"]+)">([^<]+)</a>.*?Tipp-([0-9]+).html">'
    oParams = ParameterHandler()
    sSecurityValue = oParams.getValue('securityCookie')
    # request
    sHtmlContent = __getHtmlContent(URL_GENRE_PAGE, sSecurityValue)
    # parse content
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, pattern)
    oGui = cGui()
    if aResult[0]:
        for aEntry in aResult[1]:
            iGenreId = aEntry[2]
            __createMenuEntry(
                oGui, 'showCharacters', aEntry[1], {
                    'page': 1,
                    'mediaType': 'fGenre',
                    'mediaTypePageId': iGenreId,
                    'securityCookie': sSecurityValue,
                    'sUrl': URL_MOVIE_PAGE
                })
    oGui.setEndOfDirectory()
Example #38
0
def showSeasons():
    oGui = cGui()
    params = ParameterHandler()
    sTitle = params.getValue('Title')
    seriesId = params.getValue('seriesID')

    logger.info("%s: show seasons of '%s' " % (SITE_NAME, sTitle))

    data = _getJsonContent("series/%s/1" % seriesId)

    if not data:
        oGui.showInfo('xStream', 'Es wurde kein Eintrag gefunden')
        return

    rangeStart = not int(data["series"]["movies"])
    total = int(data["series"]["seasons"])
    for i in range(rangeStart, total + 1):
        seasonNum = str(i)
        if i is 0:
            seasonTitle = 'Film(e)'
            dialogType = 'showCinemaMovies'
        else:
            seasonTitle = '%s - Staffel %s' % (sTitle, seasonNum)
            if params.getValue('specific') == 'Episode':
                dialogType = 'randomEpisode'
            else:
                dialogType = 'showEpisodes'
        guiElement = cGuiElement(seasonTitle, SITE_IDENTIFIER, dialogType)
        guiElement.setMediaType('season')
        guiElement.setSeason(seasonNum)
        guiElement.setTVShowTitle(sTitle)
        guiElement.setDescription(data["series"]["description"])
        guiElement.setThumbnail(URL_COVER % data["series"]["id"])
        params.setParam('Season', seasonNum)
        oGui.addFolder(guiElement, params, iTotal=total)
    oGui.setView('seasons')
    oGui.setEndOfDirectory()
Example #39
0
def parseMovieEntrySite():
    oParams = ParameterHandler()
    sSecurityValue = oParams.getValue('securityCookie')
    if (oParams.exist('sUrl')):
        sUrl = oParams.getValue('sUrl')
        # get movieEntrySite content
        sHtmlContent = __getHtmlContent(sUrl, sSecurityValue)
        sMovieTitle = __createMovieTitle(sHtmlContent)
        # get thumbnail
        result = cParser().parse(sHtmlContent, '<div class="Grahpics">.*?<img src="([^"]+)"')
        thumbnail = ''
        if result[0]:
            thumbnail = URL_MAIN + str(result[1][0])

        bIsSerie = __isSerie(sHtmlContent)
        if (bIsSerie):
            oGui = cGui()
            aSeriesItems = parseSerieSite(sHtmlContent)
            if (len(aSeriesItems) > 0):
                imdbID = oParams.getValue('imdbID')
                for item in aSeriesItems:
                    oGuiElement = cGuiElement(item['title'], SITE_IDENTIFIER, 'showHosters')
                    sShowTitle = sMovieTitle.split('(')[0].split('*')[0]
                    oGuiElement.setThumbnail(thumbnail)
                    oGuiElement.setMediaType('episode')
                    oGuiElement.setSeason(item['season'])
                    oGuiElement.setEpisode(item['episode'])
                    oGuiElement.setTVShowTitle(sShowTitle)

                    oParams.addParams({'sUrl':item['url'], 'episode':item['episode'], 'season':item['season']})
                    oGui.addFolder(oGuiElement, oParams, bIsFolder = False, iTotal = len(aSeriesItems))
            oGui.setView('episodes')
            oGui.setEndOfDirectory()
        else:
            logger.info('Movie')
            result = showHosters(sHtmlContent, sMovieTitle)
            return result    
def load():
    logger.info("Load %s" % SITE_NAME)
    oGui = cGui()
    params = ParameterHandler()
    params.setParam('sUrl', URL_MAIN % 'neu')
    oGui.addFolder(cGuiElement('Neu', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'actionkino')
    oGui.addFolder(cGuiElement('Actionkino', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'animekino')
    oGui.addFolder(cGuiElement('Animekino', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'arthousekino')
    oGui.addFolder(cGuiElement('Arthousekino', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'asiakino')
    oGui.addFolder(cGuiElement('Asiakino', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'dramakino')
    oGui.addFolder(cGuiElement('Dramakino', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'thrillerkino')
    oGui.addFolder(cGuiElement('Thrillerkino', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'liebesfilmkino')
    oGui.addFolder(cGuiElement('Liebesfilmkino', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'scifikino')
    oGui.addFolder(cGuiElement('Scifikino', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'kinderkino')
    oGui.addFolder(cGuiElement('Kinderkino', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'spasskino')
    oGui.addFolder(cGuiElement('Spasskino', SITE_IDENTIFIER, 'showEntries'), params)
    params.setParam('sUrl', URL_MAIN % 'queerkino')
    oGui.addFolder(cGuiElement('Queerkino', SITE_IDENTIFIER, 'showEntries'), params)
    if showAdult():
        params.setParam('sUrl', URL_MAIN % 'horrorkino')
        oGui.addFolder(cGuiElement('Horrorkino', SITE_IDENTIFIER, 'showEntries'), params)
        params.setParam('sUrl', URL_MAIN % 'prickelkino')
        oGui.addFolder(cGuiElement('Prickelkino', SITE_IDENTIFIER, 'showEntries'), params)
        params.setParam('sUrl', URL_MAIN % 'kinoab18')
        oGui.addFolder(cGuiElement('Kino ab 18', SITE_IDENTIFIER, 'showEntries'), params)
    oGui.addFolder(cGuiElement('Suche', SITE_IDENTIFIER, 'showSearch'))
    oGui.setEndOfDirectory()
Example #41
0
def parseMovieEntrySite():
    oParams = ParameterHandler()
    sSecurityValue = oParams.getValue('securityCookie')
    if oParams.exist('sUrl'):
        sUrl = oParams.getValue('sUrl')
        # get movieEntrySite content
        sHtmlContent = __getHtmlContent(sUrl, sSecurityValue)
        sMovieTitle = __createMovieTitle(sHtmlContent)
        # get thumbnail
        result = cParser().parse(
            sHtmlContent, '<div class="Grahpics">.*?<img src="([^"]+)"')
        thumbnail = URL_MAIN + str(result[1][0]) if result[0] else False
        bIsSerie = __isSerie(sHtmlContent)
        if bIsSerie:
            oGui = cGui()
            aSeriesItems = parseSerieSite(sHtmlContent)
            if not aSeriesItems[0]: return
            total = len(aSeriesItems)
            for aEntry in aSeriesItems[1]:
                seasonNum = str(aEntry)
                guiElement = cGuiElement(
                    '%s - Staffel %s' % (sMovieTitle, seasonNum),
                    SITE_IDENTIFIER, 'showEpisodes')
                guiElement.setMediaType('season')
                guiElement.setSeason(seasonNum)
                guiElement.setTVShowTitle(sMovieTitle)
                oParams.setParam('Season', seasonNum)
                if thumbnail:
                    guiElement.setThumbnail(thumbnail)
                oGui.addFolder(guiElement, oParams, iTotal=total)
            oGui.setView('seasons')
            oGui.setEndOfDirectory()
        else:
            logger.info('Movie')
            result = showHosters(sHtmlContent, sMovieTitle)
            return result
def load():
    logger.info("Load %s" % SITE_NAME)
    oGui = cGui()
    params = ParameterHandler()

    sLanguage = _getPrefLanguage()

    if sLanguage == '0' or sLanguage == '2':
        params.setParam('sBaseUrl', URL_MAIN_GER)
        params.setParam('sUrl', URL_MOVIE_GER)
        oGui.addFolder(cGuiElement('Deutsche Horrorfilme', SITE_IDENTIFIER, 'showEntries'), params)
        params.setParam('sBaseUrl', URL_MAIN_GER)
        params.setParam('sUrl', URL_MOVIE_GER)
        oGui.addFolder(cGuiElement('Genre (DE)', SITE_IDENTIFIER, 'showGenresList'), params)
    if sLanguage == '1' or sLanguage == '2':
        params.setParam('sBaseUrl', URL_MAIN_ENG)
        params.setParam('sUrl', URL_MOVIE_ENG)
        oGui.addFolder(cGuiElement('English Horror Movie', SITE_IDENTIFIER, 'showEntries'), params)
        params.setParam('sBaseUrl', URL_MAIN_ENG)
        params.setParam('sUrl', URL_MOVIE_ENG)
        oGui.addFolder(cGuiElement('Genre (EN)', SITE_IDENTIFIER, 'showGenresList'), params)

    oGui.addFolder(cGuiElement('Suche', SITE_IDENTIFIER, 'showSearch'))
    oGui.setEndOfDirectory()
def load():
    logger.info("Load %s" % SITE_NAME)
    parms = ParameterHandler()
    oGui = cGui()
    oRequest = cRequestHandler(URL_MAIN)
    sHtmlContent = oRequest.request()
    parms.setParam('cf', cRequestHandler.createUrl(URL_MAIN, oRequest))
    parms.setParam('sUrl', URL_NEWS)
    parms.setParam('page', 1)
    parms.setParam('mediaType', 'news')
    oGui.addFolder(cGuiElement('Neues von Heute', SITE_IDENTIFIER, 'showNews'), parms)
    parms.setParam('sUrl', URL_MOVIE_PAGE)
    parms.setParam('mediaType', 'movie')
    oGui.addFolder(cGuiElement('Filme', SITE_IDENTIFIER, 'showMovieMenu'), parms)
    parms.setParam('sUrl', URL_SERIE_PAGE)
    parms.setParam('mediaType', 'series')
    oGui.addFolder(cGuiElement('Serien', SITE_IDENTIFIER, 'showSeriesMenu'), parms)
    parms.setParam('sUrl', URL_DOCU_PAGE)
    parms.setParam('mediaType', 'documentation')
    oGui.addFolder(cGuiElement('Dokumentationen', SITE_IDENTIFIER, 'showDocuMenu'), parms)
    parms.setParam('sUrl', URL_SEARCH)
    parms.setParam('mediaType', '')
    oGui.addFolder(cGuiElement('Suche', SITE_IDENTIFIER, 'showSearch'), parms)
    oGui.setEndOfDirectory()
Example #44
0
    def onAVStarted(self):
        if self.enabled:
            logger.info(
                "In KodiGroup[{}], onPlaybackStarted. Group enabled: {},startBehavior: {} , isPlayingVideo: {}, isPlayingAudio: {}, self.mediaType: {},self.playbackType(): {}".format(
                    self.kgroupID, self.enabled, self.startBehavior, self.isPlayingVideo(), self.isPlayingAudio(),
                    self.mediaType, self.playbackType()))
            self.state = STATE_PLAYING
            settings_storage['lastMediaType'] = self.playbackType()

            if self.isPlayingVideo() and self.mediaType == VIDEO:  # If video group, check video activation. Otherwise it's audio so ignore this and check other conditions.
                try:
                    self.videoInfoTag = self.getVideoInfoTag()
                except Exception as exc:
                    logger.debug("Get InfoTag Exception: {}".format(exc))
                    reporting.process_exception(exc)
                    return
                logger.debug("InfoTag: {}".format(self.videoInfoTag))
                if not self.checkVideoActivation(self.videoInfoTag):
                    return
            else:
                self.videoInfoTag = None

            if (self.checkActiveTime() or self.checkAlreadyActive(self.startScene)) and self.checkKeepLightsOffRule(self.startScene) and self.startBehavior and self.mediaType == self.playbackType():
                self.run_play()
 def __addPluginsToSettings(self, data):
     '''
     data (dict): containing plugininformations
     '''
     import xml.etree.ElementTree as ET
     tree = ET.parse(self.settingsFile)
     #find Element for plugin Settings
     pluginElem = False
     for elem in tree.findall('category'):
         if elem.attrib['label']=='30022':
             pluginElem = elem
             break
     if not pluginElem:
         logger.info('pluginElement not found')
         return False
     # add plugins to settings
     for pluginID in data:
         plugin = data[pluginID]
         attrib = {'default': 'false', 'type': 'bool'}
         attrib['id'] = 'plugin_%s' % pluginID
         attrib['label'] = plugin['name']
         newPlugin = ET.Element()
         ET.SubElement(pluginElem, 'setting', attrib)
     tree.write(self.settingsFile)
Example #46
0
def changeWatched(params):
    if not cConfig().getSetting('metahandler') == 'true': return
    meta = get_metahandler()
    if meta:
        season = ''
        episode = ''
        mediaType = params.getValue('mediaType')
        imdbID = params.getValue('imdbID')
        name = params.getValue('title')
        if params.exist('season'):
            season = params.getValue('season')
        if params.exist('episode'):
            episode = params.getValue('episode')
        if imdbID:
            meta.change_watched(mediaType,
                                name,
                                imdbID,
                                season=season,
                                episode=episode)
            xbmc.executebuiltin("XBMC.Container.Refresh")
    else:
        META = False
        logger.info("Could not import package 'metahandler'")
    return
def __getHtmlContent(sUrl=False, sSecurityValue=False, ignoreErrors=False):
    params = ParameterHandler()
    # Test if a url is available and set it
    if not sUrl:
        sUrl = params.getValue('siteUrl')
        if not sUrl:
            logger.info('no request url given')

    # Test is a security value is available
    if not sSecurityValue:
        sSecurityValue = params.getValue('securityCookie')
        if not sSecurityValue:
            sSecurityValue = ''
    # preferred language
    sPrefLang = __getPreferredLanguage()
    # adult Cookie
    if showAdult():
        adultCookie = 'xxx2=ok;'
    else:
        adultCookie = ''
    # Make the request
    oRequest = cRequestHandler(sUrl, ignoreErrors=ignoreErrors)
    oRequest.addHeaderEntry('Cookie', sPrefLang + sSecurityValue + adultCookie)
    return oRequest.request()
    def __callRequest(self):
        cookieJar = mechanize.LWPCookieJar()
        try:  #TODO ohne try evtl.
            cookieJar.load(self._cookiePath, self.__bIgnoreDiscard,
                           self.__bIgnoreExpired)
        except Exception as e:
            logger.info(e)
        sParameters = urllib.urlencode(self.__aParameters)

        opener = mechanize.build_opener(SmartRedirectHandler,
                                        mechanize.HTTPEquivProcessor,
                                        mechanize.HTTPRefreshProcessor)
        if (len(sParameters) > 0):
            oRequest = mechanize.Request(self.__sUrl, sParameters)
        else:
            oRequest = mechanize.Request(self.__sUrl)

        for aHeader in self.__aHeaderEntries:
            for sHeaderKey, sHeaderValue in aHeader.items():
                oRequest.add_header(sHeaderKey, sHeaderValue)
        cookieJar.add_cookie_header(oRequest)

        if self.caching and self.cacheTime > 0:
            sContent = self.readCache(self.getRequestUri())
            if sContent:
                return sContent
        try:
            oResponse = opener.open(oRequest, timeout=60)
        except mechanize.HTTPError, e:
            if not self.ignoreErrors:
                xbmcgui.Dialog().ok('xStream', 'Fehler beim Abrufen der Url:',
                                    self.__sUrl, str(e))
                logger.error("HTTPError " + str(e) + " Url: " + self.__sUrl)
                return ''
            else:
                oResponse = e
def load():
    oGui = cGui()
    params = ParameterHandler()
    logger.info("Load %s" % SITE_NAME)
    if showAdult(True):  #Adult object off
        params.setParam('entryMode', "a_z")
        oGui.addFolder(cGuiElement('A BIS Z', SITE_IDENTIFIER, 'showMovies'),
                       params)
        params.setParam('entryMode', "top_animes")
        oGui.addFolder(cGuiElement('Top', SITE_IDENTIFIER, 'showMovies'),
                       params)
        params.setParam('entryMode', "new")
        oGui.addFolder(
            cGuiElement('Neuste Animes', SITE_IDENTIFIER, 'showMovies'),
            params)
        params.setParam('entryMode', "a_z")
        oGui.addFolder(cGuiElement('Suche', SITE_IDENTIFIER, 'showSearch'),
                       params)
    else:
        oGui.addFolder(
            cGuiElement(
                'Um Inhalte sehen zu können, muss der Adult Content aktiviert werden. \n(Klicke hier, um diese zu öffnen)',
                SITE_IDENTIFIER, 'getConf'), params)
    oGui.setEndOfDirectory()
 def __init__(self):
     #TODO pfade in eine common datei verpacken
     self.addon = common.addon
     self.rootFolder = common.addonPath
     self.settingsFile = os.path.join(self.rootFolder, 'resources', 'settings.xml')
     self.profilePath = common.profilePath
     self.pluginDBFile = translatePath(os.path.join(self.profilePath,'pluginDB'))
     logger.info('profile folder: %s' % self.profilePath)
     logger.info('root folder: %s' % self.rootFolder)
     self.defaultFolder =  translatePath(os.path.join(self.rootFolder, 'sites'))
     logger.info('default sites folder: %s' % self.defaultFolder)
 def __init__(self):
     self.addon = common.addon
     self.rootFolder = common.addonPath
     self.settingsFile = os.path.join(self.rootFolder, 'resources',
                                      'settings.xml')
     self.profilePath = common.profilePath
     self.pluginDBFile = os.path.join(self.profilePath, 'pluginDB')
     logger.info('profile folder: %s' % self.profilePath)
     logger.info('root folder: %s' % self.rootFolder)
     self.defaultFolder = os.path.join(self.rootFolder, 'sites')
     logger.info('default sites folder: %s' % self.defaultFolder)
Example #52
0
def menu():
    route = sys.argv[0]
    addon_handle = int(sys.argv[1])
    base_url = sys.argv[0]
    command = sys.argv[2][1:]
    parsed = parse_qs(command)


    logger.debug("Menu started.  route: {}, handle: {}, command: {}, parsed: {}, Arguments: {}".format(route, addon_handle, command, parsed, sys.argv))

    if route == "plugin://script.service.hue/":
        if not command:

            build_menu(base_url, addon_handle)

        elif command == "settings":
            logger.debug("Opening settings")
            ADDON.openSettings()

        elif command == "toggle":
            if cache.get("script.service.hue.service_enabled") and get_status() != "Disabled by daylight":
                logger.info("Disable service")
                cache.set("script.service.hue.service_enabled", False)

            elif get_status() != "Disabled by daylight":
                logger.info("Enable service")
                cache.set("script.service.hue.service_enabled", True)
            else:
                logger.info("Disabled by daylight, ignoring")

            xbmc.executebuiltin('Container.Refresh')

    elif route == "plugin://script.service.hue/actions":
        action = parsed['action'][0]
        kgroupid = parsed['kgroupid'][0]
        logger.debug("Actions: {}, kgroupid: {}".format(action, kgroupid))
        if action == "menu":
            items = [

                (base_url + "?action=play&kgroupid=" + kgroupid, ListItem(_("Play"))),
                (base_url + "?action=pause&kgroupid=" + kgroupid, ListItem(_("Pause"))),
                (base_url + "?action=stop&kgroupid=" + kgroupid, ListItem(_("Stop"))),
            ]

            xbmcplugin.addDirectoryItems(addon_handle, items, len(items))
            xbmcplugin.endOfDirectory(handle=addon_handle, cacheToDisc=True)

        else:
            cache.set("script.service.hue.action", (action, kgroupid), expiration=(timedelta(seconds=5)))

    else:
        logger.error("Unknown command. Handle: {}, route: {}, Arguments: {}".format(addon_handle, route, sys.argv))
 def __updateSettings(self, pluginData):
     '''
     data (dict): containing plugininformations
     '''
     xmlString = '<plugin_settings>%s</plugin_settings>'
     import xml.etree.ElementTree as ET
     tree = ET.parse(self.settingsFile)
     #find Element for plugin Settings
     pluginElem = False
     for elem in tree.findall('category'):
         if elem.attrib['label'] == '30021':
             pluginElem = elem
             break
     if pluginElem is None:
         logger.info('could not update settings, pluginElement not found')
         return False
     pluginElements = pluginElem.findall('setting')
     for elem in pluginElements:
         pluginElem.remove(elem)
     # add plugins to settings
     for pluginID in sorted(pluginData):
         plugin = pluginData[pluginID]
         subEl = ET.SubElement(pluginElem, 'setting', {
             'type': 'lsep',
             'label': plugin['name']
         })
         subEl.tail = '\n\t'
         attrib = {'default': 'true', 'type': 'bool'}
         attrib['id'] = 'plugin_%s' % pluginID
         attrib['label'] = '30050'
         subEl = ET.SubElement(pluginElem, 'setting', attrib)
         subEl.tail = '\n\t'
         if 'settings' in plugin:
             customSettings = []
             try:
                 customSettings = ET.XML(
                     xmlString % plugin['settings']).findall('setting')
             except:
                 logger.info('Parsing of custom settings for % failed.' %
                             plugin['name'])
             for setting in customSettings:
                 setting.tail = '\n\t'
                 pluginElem.append(setting)
     pluginElements = pluginElem.findall('setting')[-1].tail = '\n'
     try:
         ET.dump(pluginElem)
     except:
         logger.info('Settings update failed')
         return
     tree.write(self.settingsFile)
Example #54
0
 def getCookieString(self, content):
     vars = re.findall('toNumbers\("([^"]+)"', content)
     if not vars:
         logger.info('vars not found')
         return False
     value = self._decrypt(vars[2], vars[0], vars[1])
     if not value:
         logger.info('value decryption failed')
         return False
     pattern = '"%s=".*?";([^"]+)"' % cBFScrape.COOKIE_NAME
     cookieMeta = re.findall(pattern, content)
     if not cookieMeta:
         logger.info('cookie meta not found')
     cookie = "%s=%s;%s" % (cBFScrape.COOKIE_NAME, value, cookieMeta[0])
     return cookie
 def setYear(self, year):
     try:
         year = int(year)
     except:
         logger.info('Year given for %s seems not to be a valid number' %
                     self.getTitle())
         return False
     if len(str(year)) != 4:
         logger.info('Year given for %s has %s digits, required 4 digits' %
                     (self.getTitle(), len(str(year))))
         return False
     if year > 0:
         self._sYear = str(year)
         self.__aItemValues['year'] = year
         return True
     else:
         logger.info('Year given for %s must be greater than 0' %
                     self.getTitle())
         return False
Example #56
0
def __getSecurityCookieValue():
    oRequestHandler = cRequestHandler(URL_NEWS, False)
    oRequestHandler.removeNewLines(False)
    oRequestHandler.removeBreakLines(False)
    sHtmlContent = oRequestHandler.request()
    sPattern = "var hash=\[(.*?)\]"
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)
    if not aResult[0]:
        logger.error("Can't find script file for cookie")
    result = jsunprotect.jsunprotect(sHtmlContent)
    if not result:
        logger.error("Not protected or Deactivator not found")
        return False
    else:
        logger.info(result)
        oRequestHandler = cRequestHandler(URL_MAIN + '/?' + result, False)
        oRequestHandler.addHeaderEntry('Referer', URL_MAIN)
        # oRequestHandler.addHeaderEntry('Accept', '*/*')
        oRequestHandler.addHeaderEntry('Host', domain)
        oRequestHandler.request()
        return False

    sPattern = "escape\(hsh \+ \"([^\"]+)\"\)"
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)

    if not aResult[0]:
        logger.info("No hash value found for the cookie")
        return False

    sHash = aResult[1][0]

    sHash = sHashSnippet + sHash
    sSecurityCookieValue = "sitechrx=" + str(sHash) + ";Path=/"

    oRequestHandler = cRequestHandler(URL_MAIN)
    oRequestHandler.addHeaderEntry("Cookie", sSecurityCookieValue)
    oRequestHandler.request()

    logger.info("Token: %s" % sSecurityCookieValue)

    return sSecurityCookieValue
Example #57
0
def __getSecurityCookieValue():
    oRequest = cRequestHandler(URL_MAIN, False, True)
    oRequest.ignoreDiscard(True)
    sHtmlContent = oRequest.request()
    header = oRequest.getResponseHeader()

    sPattern = '>DDoS protection by CloudFlare<'
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)
    if not aResult[0]:
        logger.info('No known protection found')
        return ''
    logger.info('CF DDos protection active')
    #Challengeform suchen
    sPattern = (
        'a\.value = ([0-9\*\+\-]+);.*?<form id="challenge-form" action="([^"]+)".*?'
        'name="([^"]+)" value="([^"]+)".*?name="([^"]+)"/>.*?</form>')
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)
    if not aResult[0]:
        logger.info('ChallengeForm not found')
        return False
    aResult = aResult[1][0]
    constant = len(oRequest.getRealUrl().split('/')[2])
    exp = aResult[0]
    url = aResult[1]
    valueName1 = aResult[2]
    value1 = aResult[3]
    valueName2 = aResult[4]
    value2 = str(eval(exp) + constant)
    url = '%s%s?%s=%s&%s=%s&pp=200' % (URL_MAIN, url, valueName1, value1,
                                       valueName2, value2)
    oRequest = cRequestHandler(url, caching=False, ignoreErrors=True)
    oRequest.addHeaderEntry('Host', 'gstream.to')
    oRequest.addHeaderEntry('Referer', URL_MAIN)
    oRequest.addHeaderEntry('Connection', 'keep-alive')
    oRequest.addHeaderEntry('DNT', '1')
    oRequest.ignoreDiscard(True)
    sHtmlContent = oRequest.request()
    return True
Example #58
0
def showAllSeasons():
    oGui = cGui()

    iParams = ParameterHandler()
    sUrl = iParams.getValue(PARAM_URL_KEY)
    sMovieTitle = iParams.getValue('sMovieTitle')
    sHtmlContent = cRequestHandler(sUrl).request()

    sPattern = '<option value="([0-9]+)">Staffel'
    oParser = cParser()
    aResult = oParser.parse(sHtmlContent, sPattern)

    if aResult[0] == True:
        logger.info("create season menu")
        Seasons = sorted([int(i) for i in aResult[1]])
        total = len(Seasons)
        for season in Seasons:
            oGuiElement = cGuiElement()
            oGuiElement.setSiteName(SITE_IDENTIFIER)
            oGuiElement.setFunction('showEpisodes')
            oGuiElement.setTitle('Staffel ' + str(season))
            oGuiElement.setMediaType('season')
            oGuiElement.setSeason(season)

            oOutputParameterHandler = ParameterHandler()
            oOutputParameterHandler.setParam(
                PARAM_MOVIESEGMENT_KEY,
                iParams.getValue(PARAM_MOVIESEGMENT_KEY))
            oOutputParameterHandler.setParam(PARAM_ROOTURL_KEY, sUrl)
            oOutputParameterHandler.setParam(PARAM_URL_KEY, sUrl)
            oOutputParameterHandler.setParam('sMovieTitle', sMovieTitle)
            oOutputParameterHandler.setParam('season', season)

            oGui.addFolder(oGuiElement, oOutputParameterHandler, iTotal=total)
            logger.info('add object for season %s' % (season))

        logger.info("done")

    oGui.setView('seasons')
    oGui.setEndOfDirectory()
Example #59
0
# -*- coding: utf-8 -*-

from resources.lib import core, logger, ADDONVERSION, KODIVERSION
from resources.lib import reporting

logger.info("Starting service.py, version {}, Kodi: {}".format(
    ADDONVERSION, KODIVERSION))
try:
    core.core()  #Run Hue service
except Exception as exc:
    logger.exception("Core service exception")
    reporting.process_exception(exc)

logger.info("Shutting down service.py, version {}, Kodi: {}".format(
    ADDONVERSION, KODIVERSION))
Example #60
0
    def resolve(self, url, cookie_jar, user_agent):
        headers = {'User-agent': user_agent, 'Referer': url}

        try:
            cookie_jar.load(ignore_discard=True)
        except Exception as e:
            logger.info(e)

        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))

        request = urllib2.Request(url)
        for key in headers:
            request.add_header(key, headers[key])

        try:
            response = opener.open(request)
        except urllib2.HTTPError as e:
            response = e

        body = response.read()

        cookie_jar.extract_cookies(response, request)
        cookie_helper.check_cookies(cookie_jar)

        pattern = 'xhr\.open\("GET","([^,]+),'
        match = cParser.parse(body, pattern)
        if not match[0]:
            return
        urlParts = match[1][0].split('"')
        parsed_url = urlparse(url)
        sid = '1200'
        script_url = '%s://%s%s%s%s' % (parsed_url.scheme, parsed_url.netloc, urlParts[0], sid, urlParts[2])
        request = urllib2.Request(script_url)
        for key in headers:
            request.add_header(key, headers[key])
        try:
            response = opener.open(request)
        except urllib2.HTTPError as e:
            response = e

        body = response.read()
        cookie_jar.extract_cookies(response, request)
        cookie_helper.check_cookies(cookie_jar)

        if not self.checkBFCookie(body):
            return body  # even if its false its probably not the right content, we'll see
        cookie = self.getCookieString(body)
        if not cookie:
            return

        name, value = cookie.split(';')[0].split('=')
        cookieData = dict((k.strip(), v.strip()) for k, v in (item.split("=") for item in cookie.split(";")))
        cookie = cookie_helper.create_cookie(name, value, domain=cookieData['domain'], expires=sys.maxint, discard=False)
        cookie_jar.set_cookie(cookie)
        request = urllib2.Request(url)
        for key in headers:
            request.add_header(key, headers[key])

        try:
            response = opener.open(request)
        except urllib2.HTTPError as e:
            response = e
        return response