def parseSerieSite(sHtmlContent): print("#########sHTMLConeten Series: %s" % sHtmlContent) aSeriesItems = [] sPattern = 'id="SeasonSelection" rel="([^"]+)"' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): aSeriesUrls = aResult[1][0].split("&") sSeriesUrl = '&' + str(aSeriesUrls[0]) + '&' + str(aSeriesUrls[1]) sPattern = '<option.*?rel="([^"]+)".*?>Staffel ([^<]+)</option' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: aSeriesIds = aEntry[0].split(",") for iSeriesIds in aSeriesIds: aSeries = [] iSeriesId = iSeriesIds iSeasonId = aEntry[1] sTitel = 'Staffel '+ str(iSeasonId) + ' - ' + str(iSeriesId) sUrl = URL_EPISODE_URL + sSeriesUrl + '&Season=' + str(iSeasonId) + '&Episode=' + str(iSeriesId) aSeries.append(sTitel) aSeries.append(sUrl) aSeriesItems.append(aSeries) return aSeriesItems
def showAllMovies(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request(); sPattern = '<div class="actorsindex">(.*?)<div class="boxfooter">' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sPattern = '<li><a href="([^"]+)" title=".*?">(.*?)</a></li>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showHosters') sTitle = cUtil().removeHtmlTags(str(aEntry[1])) oGuiElement.setTitle(sTitle) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + str(aEntry[0])) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def showGenre(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request(); sPattern = '<ul class="subnav">(.*?)</ul>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sPattern = '<a href="([^"]+)" title=".*?">(.*?)</a></li>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showMovieEntries') oGuiElement.setTitle(cUtil().removeHtmlTags(str(aEntry[1]))) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + str(aEntry[0])) oOutputParameterHandler.addParameter('page', 1) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def showHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request(); sPattern = '<h3>Hoster dieser Episode(.*?)</ul>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sPattern = '<a href="([^"]+)">.*?title="([^"]+)" />(.*?)</a>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: oHoster = __checkHoster(str(aEntry[1])) if (oHoster != False): oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('getHosterUrlandPlay') oGuiElement.setTitle(str(aEntry[2])) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + str(aEntry[0])) oOutputParameterHandler.addParameter('hosterName', oHoster.getPluginIdentifier()) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def showSeries(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request(); sPattern = '<table>(.*?)</table>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sPattern = '<a href="([^"]+)"><strong>(.*?)</strong>.*?<span lang="en">(.*?)</span></a>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showHosters') oGuiElement.setTitle(str(aEntry[1]) + ' - ' + str(aEntry[2])) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + str(aEntry[0])) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def __getMediaLinkForGuest(self): oRequest = cRequestHandler(self.__sUrl) sHtmlContent = oRequest.request() sPattern = 'flashvars.initItemXML = "([^"]+)";' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sXmlFile = aResult[1][0] try: oRequest = cRequestHandler(sXmlFile) sHtmlContent = oRequest.request() except: try: oRequest = cRequestHandler(sXmlFile) sHtmlContent = oRequest.request() except: # http error 502 :( return False sPattern = '<url>(.*?)</url>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sStreamUrl = aResult[1][0] return True, sStreamUrl return False, False
def showEntries(entryUrl=False, sGui=False): oGui = sGui if sGui else cGui() params = ParameterHandler() if not entryUrl: entryUrl = params.getValue('sUrl') sHtmlContent = cRequestHandler(entryUrl).request() pattern = 'class="list_film.*?img src="([^"]+).*?\s=\s\'([^\']+).*?>([^"(]+).*?\(([^")]+)' aResult = cParser().parse(sHtmlContent, pattern) if aResult[0] and aResult[1][0]: total = len(aResult[1]) util = cUtil() for sThumbnail, sUrl, sName, sJahr in aResult[1]: oGuiElement = cGuiElement( util.unescape(sName.decode('utf-8')).encode('utf-8'), SITE_IDENTIFIER, 'showHosters') oGuiElement.setThumbnail(sThumbnail) oGuiElement.setYear(sJahr) oGuiElement.setMediaType('movie') params.setParam('entryUrl', URL_MAIN + sUrl) oGui.addFolder(oGuiElement, params, False, total) pattern = '"><a href="([^"]+)"([^>]+)?>»' aResult = cParser().parse(sHtmlContent, pattern) if aResult[0] and aResult[1][0] and 'void' not in aResult[1][0][0]: params.setParam('sUrl', URL_MAIN + aResult[1][0][0]) oGui.addNextPage(SITE_IDENTIFIER, 'showEntries', params) if not sGui: oGui.setView('movies') oGui.setEndOfDirectory()
def showHosters(): #oGui = cGui() oParams= ParameterHandler() sTitle = oParams.getValue('Title') sUrl = oParams.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() #if not META: # __createInfo(oGui, sHtmlContent, sTitle) sPattern = '<h3>Hoster dieser Episode(.*?)</ul>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): hosters = [] sHtmlContent = aResult[1][0] sPattern = 'href="([^"]+)">.*?class="icon ([^"]+)"></span> ([^<]+?)</a>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: hoster = dict() hoster['link'] = URL_MAIN + '/' + str(aEntry[0]) hoster['name'] = str(aEntry[2]).split(' - Teil')[0] hoster['displayedName'] = str(aEntry[2]) hosters.append(hoster) hosters.append('getHosterUrl') return hosters
def __getMediaLinkForGuest(self): oRequest = cRequestHandler(self.__sUrl) sHtmlContent = oRequest.request() sPattern = 'vid=([^;]+);' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): videoId = aResult[1][0] oRequest = cRequestHandler(self.URL_XML) oRequest.addParameters('vid', videoId) oRequest.addParameters('hiLoPref', 'lo') sHtmlContent = oRequest.request() sPattern = '<src>([^<]+)</src>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sStreamUrl = aResult[1][0] return True, sStreamUrl return False, False
def __getSecurityCookieValue(): oRequestHandler = cRequestHandler(URL_MAIN) sHtmlContent = oRequestHandler.request() sPattern = ( '<HTML><HEAD><SCRIPT language="javascript" src="([^"]+)">' + "</SCRIPT></HEAD><BODY onload=\"scf\('(.*?)'\+'(.*?)','/'\);\"></BODY></HTML>" ) oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0] == False: return "" sScriptFile = URL_MAIN + str(aResult[1][0][0]) sHashSnippet = str(aResult[1][0][1]) + str(aResult[1][0][2]) oRequestHandler = cRequestHandler(sScriptFile) oRequestHandler.addHeaderEntry("Referer", "http://g-stream.in/") sHtmlContent = oRequestHandler.request() sPattern = 'escape\(hsh \+ "([^"]+)"\)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) sHash = aResult[1][0] sHash = sHashSnippet + sHash sSecurityCookieValue = "sitechrx=" + str(sHash) logger.info("Token: " + sSecurityCookieValue) return sSecurityCookieValue
def displaySeasions(): oGui = cGui() sPattern = '<div id="staffeln">(.*?)<div id=' oRequest = cRequestHandler(URL_MAIN) sHtmlContent = oRequest.request() oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sPattern = '<a href="([^"]+)">([^<]+)</a>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) for aEntry in aResult[1]: oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showEpisodes') oGuiElement.setTitle(aEntry[1]) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('sPage', aEntry[0]) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def parseSerieSite(sHtmlContent): aSeriesItems = [] sPattern = 'id="SeasonSelection" rel="([^"]+)"' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): aSeriesUrls = aResult[1][0].split("&") sSeriesUrl = '&' + str(aSeriesUrls[0]) + '&' + str(aSeriesUrls[1]) sPattern = '<option.*?rel="([^"]+)".*?>Staffel ([^<]+)</option' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: aSeriesIds = aEntry[0].split(",") for iSeriesIds in aSeriesIds: aSeries = {} iEpisodeNum = iSeriesIds iSeasonNum = aEntry[1] sTitel = 'Staffel '+ str(iSeasonNum) + ' - ' + str(iEpisodeNum) sUrl = URL_EPISODE_URL + sSeriesUrl + '&Season=' + str(iSeasonNum) + '&Episode=' + str(iEpisodeNum) aSeries['title'] = sTitel aSeries['url'] = sUrl aSeries['season'] = iSeasonNum aSeries['episode'] = iEpisodeNum aSeriesItems.append(aSeries) return aSeriesItems
def __getMediaLinkForGuest(self): sPattern = '([^/]+)$' vid = self.__sUrl vidId = cParser().parse(vid,sPattern) url = 'http://embed.movshare.net/embed.php?v=' + vidId[1][0] oRequest = cRequestHandler(url) sHtmlContent = oRequest.request() sPattern = '<form id="watch" name="watch" method="post" action=""><input type="hidden" name="wm" value="([^"]+)">' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sUid = aResult[1][0] oRequest = cRequestHandler(self.__sUrl) oRequest.setRequestType(cRequestHandler.REQUEST_TYPE_POST) oRequest.addParameters('submit.x','149') oRequest.addParameters('submit.y', '19') oRequest.addParameters('wm', sUid) sHtmlContent = oRequest.request() aMediaLink = cParser().parse(sHtmlContent, self.getPattern()) if (aMediaLink[0] == True): link = str(aMediaLink[1][0]) link = 'http://w00.' + link[link.find('movshare'):] return True, link else: sPattern = 'type="video/divx"\s*src="([^"]+)"' aMediaLink = cParser().parse(sHtmlContent, sPattern) if (aMediaLink[0] == True): link = str(aMediaLink[1][0]) link = 'http://w00.' + link[link.find('movshare'):] return True, link return False, False
def __getMediaLinkByPremiumUser(self, sUsername, sPassword): oRequestHandler = cRequestHandler('http://www.megavideo.com/?s=account') oRequestHandler.setRequestType(cRequestHandler.REQUEST_TYPE_POST) oRequestHandler.addParameters('login', '1') oRequestHandler.addParameters('username', sUsername) oRequestHandler.addParameters('password', sPassword) oRequestHandler.request() aHeader = oRequestHandler.getResponseHeader(); sReponseCookie = aHeader.getheader("Set-Cookie") self.__sUrl = self.__getIdFromUrl() sPattern = 'user=([^;]+);' oParser = cParser() aResult = oParser.parse(sReponseCookie, sPattern) if (aResult[0] == True): sUserId = aResult[1][0] sUrl = 'http://www.megavideo.com/xml/player_login.php?u=' + str(sUserId) + '&v=' + str(self.__sUrl) oRequestHandler = cRequestHandler(sUrl) sXmlContent = oRequestHandler.request() sPattern = 'downloadurl="([^"]+)"' oParser = cParser() aResult = oParser.parse(sXmlContent, sPattern) if (aResult[0] == True): sMediaLink = cUtil().urlDecode(str(aResult[1][0])) return True, sMediaLink return False, ''
def __showCharacters(sUrl): oGui = cGui() sHtmlContent = cRequestHandler(sUrl).request(); sPattern = '<div class="apz_container">(.*?)</div>' aResult = cParser().parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sPattern = '<a class="letter"\s*href="([^"]+)">([^<]+)</a>' aResult = cParser().parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: newUrl = str(aEntry[0]).strip().replace('&','&') if not newUrl.startswith('http'): newUrl = URL_MAIN + newUrl sTitle = aEntry[1].replace('&','&').replace(''','\'') oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showSeries') oGuiElement.setTitle(sTitle) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', newUrl) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def __showSeries(sUrl): oGui = cGui() log('neu: ' + sUrl) oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request(); sPattern = '<ul>(.*?)</ul>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sPattern = '<li>\s*<a href="([^"]+)">([^<]+)</a>\s*</li>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: newUrl = str(aEntry[0]).strip().replace('&','&') if not newUrl.startswith('http'): newUrl = URL_MAIN + newUrl oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showSeasons') sTitle = aEntry[1].replace('&','&').replace(''','\'') oGuiElement.setTitle(sTitle) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', newUrl) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def listShow(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() if (oInputParameterHandler.exist('showUrl')): sShowUrl = oInputParameterHandler.getValue('showUrl') #Video im Player sPattern = '<h3 class="imgHeadline black defaultMarginBottom">\s*(.*?)\s*</h3>' sTitleCurrent = cParser().parse(cRequestHandler(sShowUrl).request(), sPattern)[1][0].strip() __showHoster(oGui, sTitleCurrent, sShowUrl) #andere Videos sPattern = '<li class="half (?:playlist )?dashed_bottom".*?<a title="([^"]+)"\s*href="([^"]+)".*?</li>' oRequest = cRequestHandler(sShowUrl) sHtmlContent = oRequest.request() oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sUrl = URL_MAIN + str(aEntry[1]) __showHoster(oGui, aEntry[0], sUrl) oGui.setEndOfDirectory()
def getHosterUrlandPlay(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sHoster = oInputParameterHandler.getValue('hosterName') sTitle = oInputParameterHandler.getValue('sTitle') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request(); sPattern = '<iframe id="iframe" src="([^"]+)"' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sStreamUrl = aResult[1][0] oHoster = cHosterHandler().getHoster(sHoster) if (sTitle != False): oHoster.setFileName(sTitle) cHosterGui().showHosterMenuDirect(oGui, oHoster, sStreamUrl) oGui.setEndOfDirectory() return else: sPattern = '<param name="movie" value="([^"]+)"' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sStreamUrl = aResult[1][0] oHoster = cHosterHandler().getHoster(sHoster) if (sTitle != False): oHoster.setFileName(sTitle) cHosterGui().showHosterMenuDirect(oGui, oHoster, sStreamUrl) oGui.setEndOfDirectory() return oGui.setEndOfDirectory()
def __getSecurityCookieValue(): oRequestHandler = cRequestHandler(URL_MAIN) sHtmlContent = oRequestHandler.request() sPattern = "<HTML><HEAD><SCRIPT language=\"javascript\" src=\"([^\"]+)\">"+\ "</SCRIPT></HEAD><BODY onload=\"scf\('(.*?)'\+'(.*?)','/'\);\"></BODY></HTML>" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0] == False: return '' sScriptFile = URL_MAIN + str(aResult[1][0][0]) sHashSnippet = str(aResult[1][0][1])+str(aResult[1][0][2]) oRequestHandler = cRequestHandler(sScriptFile) oRequestHandler.addHeaderEntry('Referer', 'http://g-stream.in/') oRequestHandler.addHeaderEntry('Accept', '*/*') oRequestHandler.addHeaderEntry('Host', 'g-stream.in') sHtmlContent = oRequestHandler.request() sPattern = "escape\(hsh \+ \"([^\"]+)\"\)" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) sHash = aResult[1][0] sHash = sHashSnippet + sHash sSecurityCookieValue = 'sitechrx=' + str(sHash) print 'Token: '+sSecurityCookieValue return sSecurityCookieValue
def __parseCharts(sUrl): oGui = cGui() sPattern = '<td class="ch_place">.*?"/>(.*?)</td>.*?<td class="ch_last">(.*?)</td>.*?<td class="ch_artist">(.*?)</td>.*?<td class="ch_track">(.*?)</td>.*?<td class="ch_buy">(.*?)</td>' oRequest = cRequestHandler(sUrl) sHtmlContent = oRequest.request() oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sInterpretName = cUtil().removeHtmlTags(str(aEntry[2]), '') sTitle = str(aEntry[0]) + ' (' + str(aEntry[1]) + ') : ' + sInterpretName + ' - ' + str(aEntry[3]) sPattern = '.*?<a href="([^"]+)".*?<img.*?<img.*?src="([^"]+)"' sCode = aEntry[4] oParser = cParser() aResultMeta = oParser.parse(sCode, sPattern) if (aResultMeta[0] == True): sLink = aResultMeta[1][0][0] sUrl = URL_MAIN + str(sLink) __showHoster(oGui, sTitle, sUrl) oGui.setEndOfDirectory()
def showFeaturedSeries(): oInputParameterHandler = ParameterHandler() if (oInputParameterHandler.exist('sUrl')): sUrl = oInputParameterHandler.getValue('sUrl') oRequest = cRequestHandler(sUrl) sHtmlContent = oRequest.request() sPattern = '<div id="maincontenttvshow">(.*?)<BR><BR>' aResult = cParser().parse(sHtmlContent,sPattern) if aResult[0] == True: sPattern = '<div style="float:left"><a href="([^"]+)"><img src="([^"]+)" border=0.*?title="([^"]+)"></a>.*?<img src="http://img.movie4k.to/img/(.*?).png"' sHtmlContent = aResult[1][0] aResult = cParser().parse(sHtmlContent, sPattern) if aResult[0] == True: oGui = cGui() for aEntry in aResult[1]: newUrl = str(aEntry[0]).strip() if not (newUrl.startswith('http')): newUrl = URL_MAIN + newUrl sThumbnail = aEntry[1] sMovieTitle = aEntry[2].strip().replace('\t', '') oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showAllSeasons') oGuiElement.setTitle(sMovieTitle) oGuiElement.setThumbnail(sThumbnail) oGuiElement.setLanguage(__getLanguage(aEntry[3])) oOutputParameterHandler = ParameterHandler() oOutputParameterHandler.setParam('sUrl', newUrl) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setView('tvshows') oGui.setEndOfDirectory()
def __showCategories(sHtmlContent, sPattern, sNextFunction): oGui = cGui() oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = str(aResult[1][0]) sPattern = '<a href="([^"]+)">([^"]+)</a>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) if (str(aEntry[1]) == 'All'): oGuiElement.setFunction('showLiveVideos') else: oGuiElement.setFunction(sNextFunction) oGuiElement.setTitle(aEntry[1]) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('sSiteUrl', URL_MAIN + str(aEntry[0])) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def showBRonlineVideothekSeasons(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request(); sPattern = '<ul class="ebene1">(.*?)</ul>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sPattern = '<li><a href="([^"]+)">(.*?)</a>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showBRonlineMovies') oGuiElement.setTitle(aEntry[1]) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + str(aEntry[0])) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def __getMediaLinkForGuest(self): oRequest = cRequestHandler(self.__sUrl) sHtmlContent = oRequest.request() sPattern = 'unescape.+?"(.+?)"' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): decoder = cUtil().urlDecode(aResult[1][0]) sPattern = 'file: "(.+?)"' oParser = cParser() aResult = oParser.parse(decoder, sPattern) if (aResult[0] == True): cGui().showInfo(self.__sDisplayName, 'Streaming', 5) return True, aResult[1][0] else: cGui().showInfo(self.__sDisplayName, 'Fichier introuvable' , 5) return False, False else: cGui().showInfo(self.__sDisplayName, 'Fichier introuvable' , 5) return False, False return False, False
def showCurrentMovies(): oGui = cGui() params = cInputParameterHandler() sUrl = params.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request(); sPattern = '<h2>Aktuelle Anime Serienfolgen</h2>(.*?)</ul>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sPattern = "<a href='([^']+)'>(.*?)<" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sSiteUrl = str(aEntry[0]) sMovieTitle = str(aEntry[1]) oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showMovieTitles') oGuiElement.setTitle(str(aEntry[1])) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sSiteUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def showAnimesAlphabetic(): oGui = cGui() params = cInputParameterHandler() sUrl = params.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request(); sPattern = '<h2>Animes von A - Z</h2>(.*?)</select>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sPattern = "<option value='([^']+)'>(.*?)<" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showMovieTitles') oGuiElement.setTitle(str(aEntry[1])) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', str(aEntry[0])) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def showEntries(entryUrl = False, sGui = False): oGui = sGui if sGui else cGui() params = ParameterHandler() if not entryUrl: entryUrl = params.getValue('sUrl') oRequest = cRequestHandler(entryUrl) oGui.setView('tvshows' if 'serien/' in entryUrl else 'movies') sHtmlContent = oRequest.request() # Grab the link and title pattern = '<a[^>]*href="([^"]*)"[^>]*title="([^"]*)"[^>]*>[^<]*' # Grab the thumbnail pattern +='<img[^>]*src=["\']([^"\']*)["\'][^>]*class="cover-opacity"[^>]*>' aResult = cParser().parse(sHtmlContent, pattern) if not aResult[0]: return for sUrl, sName, sThumbnail in aResult[1]: oGuiElement = cGuiElement(sName, SITE_IDENTIFIER, 'showHosters') oGuiElement.setMediaType('movie') oGuiElement.setThumbnail(__checkUrl(sThumbnail)) params.setParam('entryUrl', __checkUrl(sUrl)) oGui.addFolder(oGuiElement, params, bIsFolder = False) pattern = '<a[^>]*class="[^"]*pageing[^"]*"[^>]*' pattern += 'href=["\']([^"\']*)["\'][^>]*>[ ]*vorw' aResult = cParser().parse(sHtmlContent, pattern) if aResult[0] and aResult[1][0]: params.setParam('sUrl', aResult[1][0]) oGui.addNextPage(SITE_IDENTIFIER, 'showEntries', params) if not sGui: oGui.setEndOfDirectory()
def showStatisticData(self): oGui = cGui() oInputParameterHandler = cInputParameterHandler() if (oInputParameterHandler.exist('sDate')): sDate = oInputParameterHandler.getValue('sDate') sTitle = 'Statistik fuer den ' + str(sDate) self.__createDummyFolder(oGui, sTitle) oRequest = cRequestHandler(self.URL_MAIN) oRequest.addParameters('date', sDate) sHtmlContent = oRequest.request() print sHtmlContent sPattern = 'totalCount="([^"]+)"' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): iTotalCount = aResult[1][0] sTitle = 'Tagesaufrufe: ' + str(iTotalCount) self.__createDummyFolder(oGui, sTitle) sPattern = '<plugin name="([^"]+)">(.*?)</plugin>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) print aResult if (aResult[0] == True): for aEntry in aResult[1]: sTitle = 'Plugin: ' + str(aEntry[0]) + ' - ' + str(aEntry[1]) + ' Aufrufe' self.__createDummyFolder(oGui, sTitle) oGui.setEndOfDirectory()
def __getUrlFromJavascriptCode(self, sHtmlContent): sPattern = "<script type='text/javascript'>eval.*?return p}\((.*?)</script>" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) log("JavascriptCode Parameter: %s" % aResult[1]) if (aResult[0] == True): sJavascript = aResult[1][1] sUnpacked = cJsUnpacker().unpackByString(sJavascript) log("Unpacked String: %s" % sUnpacked) sPattern = '<param name="src"0="(.*?)"' oParser = cParser() aResultLink = oParser.parse(sUnpacked, sPattern) if (aResultLink[0] == True): aResult = [] aResult.append(True) aResult.append(aResultLink[1][0]) return aResult return False, ''
def showHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request(); sPattern = "<h\d+ class='post-title entry-title'>(.*?)<div style='clear: both;'></div>" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = aResult[1][0] sHtmlContent = str(sHtmlContent).lower() sPattern = "src=([^ ]+) " oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sHosterUrl = str(aEntry).replace("'", '').replace('"', '') hosterPattern = '([^\.]+)\.(?:com|eu|net|de|ru)?/' aResult = cParser().parse(sHosterUrl, hosterPattern) if aResult[0] == True: hosterId = aResult[1][0] oHoster = cHosterHandler().getHoster2(hosterId) if (oHoster != False): oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl) oGui.setEndOfDirectory()
def showTV(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() oParser = cParser() #sPattern = '<url>([^<>]+?)</url><title>([^<>]+?)</title><order>' + sOrder + '</order><icon>(.+?)</icon>' sPattern = '<title>(.+?)</title><link>(.+?)</link>' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): dialog = cConfig().createDialog(SITE_NAME) #affiche par if (oInputParameterHandler.exist('AZ')): sAZ = oInputParameterHandler.getValue('AZ') string = filter( lambda t: t[0].strip().capitalize().startswith(sAZ), aResult[1]) string = sorted(string, key=lambda t: t[0].strip().capitalize()) else: string = sorted(aResult[1], key=lambda t: t[0].strip().capitalize()) total = len(string) for aEntry in string: cConfig().updateDialog(dialog, total) if dialog.iscanceled(): break oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', aEntry[1]) oOutputParameterHandler.addParameter('sMovieTitle', aEntry[0]) oOutputParameterHandler.addParameter('sThumbnail', str('tv.png')) oOutputParameterHandler.addParameter('sThumbnail', str(sRootArt + '/tv.png')) oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('play__') oGuiElement.setTitle(aEntry[0]) oGuiElement.setFileName(aEntry[0]) oGuiElement.setIcon('tv.png') oGuiElement.setMeta(0) #oGuiElement.setThumbnail('tv.png') oGuiElement.setDirectTvFanart() oGuiElement.setCat(6) oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'direct_epg', 'Guide tv Direct') oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'soir_epg', 'Guide tv Soir') oGui.createContexMenuFav(oGuiElement, oOutputParameterHandler) oGui.addFolder(oGuiElement, oOutputParameterHandler) cConfig().finishDialog(dialog) oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() # ouvre l'affichage oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue( 'siteUrl') # recupere l'url sortie en parametre if sSearch: # si une url et envoyer directement grace a la fonction showSearch sUrl = sSearch.replace(' ', '+') oRequestHandler = cRequestHandler(sUrl) # envoye une requete a l'url sHtmlContent = oRequestHandler.request() # requete aussi sHtmlContent = sHtmlContent.replace('<span class="likeThis">', '').replace('</span>', '') # la fonction replace est pratique pour supprimer un code du resultat sPattern = 'class="movie movie-block"><img src="([^"]+)" alt=".+?" title="([^"]+)"/>.+?<h2 onclick="window.location.href=\'([^"]+)\'">.+?<div style="color:#F29000">.+?<div.+?>(.+?)</div>' # pour faire simple recherche ce bout de code dans le code source de l'url # - "([^"]+)" je veux cette partie de code qui se trouve entre guillemets mais pas de guillemets dans la chaine # - .+? je ne veux pas cette partie et peux importe ceux qu'elle contient # - >(.+?)< je veux cette partie de code qui se trouve entre > et < mais il peut y avoir n'inporte quoi entre les 2. # - (https*://[^"]) je veux l'adresse qui commence par https ou http jusqu'au prochain guillemet. # Pour tester vos Regex, vous pouvez utiliser le site https://regex101.com/ en mettant dans les modifiers "gmis" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) # le plus simple et de faire un VSlog(str(aResult)) # dans le fichier log de Kodi vous pourrez voir un array de ce que recupere le script # et modifier sPattern si besoin VSlog(str(aResult)) # Commenter ou supprimer cette ligne une fois fini # affiche une information si aucun resulat if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) # dialog barre de progression progress_ = progress().VScreate(SITE_NAME) oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: # dialog update progress_.VSupdate(progress_, total) if progress_.iscanceled(): break # L'array affiche vos info dans l'ordre de sPattern en commencant a 0, attention dans ce cas la on recupere 6 information # Mais selon votre regex il ne peut y en avoir que 2 ou 3. sThumb = aEntry[0] sTitle = aEntry[1] sUrl2 = aEntry[2] sLang = aEntry[3] sQual = aEntry[4] sHoster = aEntry[5] sDesc = '' sTitle = sTitle.replace('En streaming', '') # Si vous avez des information dans aEntry Qualiter lang organiser un peux vos titre exemple. # Si vous pouvez la langue et la Qualite en MAJ ".upper()" vostfr.upper() = VOSTFR sTitle = ('%s [%s] (%s) [COLOR coral]%s[/COLOR]') % ( sTitle, sQual, sLang.upper(), sHoster) # mettre les informations de streaming entre [] et le reste entre () vStream s'occupe de la couleur automatiquement. # Utile si les liens recupere ne commencent pas par (http://www.nomdusite.com/) # sUrl2 = URL_MAIN + sUrl2 oOutputParameterHandler.addParameter('siteUrl', sUrl2) # sortie de l'url oOutputParameterHandler.addParameter('sMovieTitle', sTitle) # sortie du titre oOutputParameterHandler.addParameter('sThumb', sThumb) # sortie du poster oOutputParameterHandler.addParameter( 'sDesc', sDesc) # sortie de la description oOutputParameterHandler.addParameter( 'referer', sUrl) # URL d'origine, parfois utile comme référence if '/series' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'ShowSerieSaisonEpisodes', sTitle, '', sThumb, sDesc, oOutputParameterHandler) # addTV pour sortir les series tv (identifiant, fonction, titre, icon, poster, description, sortie parametre) elif '/animes' in sUrl: oGui.addAnime(SITE_IDENTIFIER, 'ShowSerieSaisonEpisodes', sTitle, '', sThumb, sDesc, oOutputParameterHandler) # addAnime pour sortir les series animés (mangas) (identifiant, fonction, titre, icon, poster, description, sortie parametre) else: oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler) # addMovies pour sortir les films (identifiant, fonction, titre, icon, poster, description, sortie parametre) # Il existe aussi addMisc(identifiant, function, titre, icon, poster, description, sortie parametre) # A utiliser pour les autres types, tels que : documentaires, spectacles, etc. # qui ne nécessitent pas de metadonnées (recherches de la description, de la bande annonces, des acteurs, etc.) progress_.VSclose(progress_) # fin du dialog if not sSearch: sNextPage = __checkForNextPage( sHtmlContent) # cherche la page suivante if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) sNumPage = re.search('/page/([0-9]+)', sNextPage).group(1) oGui.addNext(SITE_IDENTIFIER, 'showSeries', 'Page ' + sNumPage, oOutputParameterHandler) # Si pas de numero de page dans l'url du nextPage, utiliser la ligne suivante et désactiver les 2 précédentes # oGui.addNext(SITE_IDENTIFIER, 'showMovies', Suivant, oOutputParameterHandler) # Ajoute une entree pour le lien Suivant | pas de addMisc pas de poster et de description inutile donc oGui.setEndOfDirectory() # ferme l'affichage
def showMovies(sSearch=''): oGui = cGui() oParser = cParser() if sSearch: sUrl = URL_SEARCH[0] else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) if sSearch: oRequestHandler.addHeaderEntry('Referer', URL_SEARCH[0]) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Content-Type', 'application/x-www-form-urlencoded') oRequestHandler.setRequestType(cRequestHandler.REQUEST_TYPE_POST) oRequestHandler.addParametersLine('do=search') oRequestHandler.addParametersLine('subaction=search') oRequestHandler.addParametersLine('story=' + sSearch) sHtmlContent = oRequestHandler.request() sPattern = 'shortstory-in.+?<img src="([^"]+)".+?short-link"><a href="(.+?)".+?>(.+?)</a>' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) dialog = cConfig().createDialog(SITE_NAME) for aEntry in aResult[1]: cConfig().updateDialog(dialog, total) if dialog.iscanceled(): break sTitle = str(aEntry[2]) sUrl = URL_MAIN + aEntry[1].replace( '/animes/films/', '/films/').replace('/animes/series/', '/series/') sThumb = URL_MAIN + aEntry[0] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) if '/series/' in sUrl or '/animes/' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showSerieSaisons', sTitle, 'series.png', sThumb, '', oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showLink', sTitle, 'films.png', sThumb, '', oOutputParameterHandler) cConfig().finishDialog(dialog) sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') if sSearch: sUrl = sSearch.replace(' ', '+') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() if sSearch: sPattern = '<span class="image"><img src="([^"]+)" alt="([^"]+).+?<a href="([^"]+).+?desc">([^<]+)' elif '/films-vf-vostfr/' in sUrl: sPattern = 'href="([^"]+)" alt="([^"]+).+?src="([^"]+).+?desc">([^<]+)' else: sPattern = 'href="([^"]+)" alt="([^"]+).+?src="([^"]+).+?desc">([^<]+).+?</i>Saison</span><b>([^<]+).+?Ep</span><b>([^<]+)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break if sSearch: sThumb = aEntry[0] if 'http' not in sThumb: sThumb = URL_MAIN + sThumb sUrl2 = aEntry[2] else: sUrl2 = aEntry[0] sThumb = aEntry[2] if 'http' not in sThumb: sThumb = URL_MAIN + sThumb sMovieTitle = aEntry[1] sDesc = aEntry[3] sLang = '' if 'FRENCH' in sMovieTitle or 'French' in sMovieTitle: sLang = 'VF' if 'VOSTFR' in sMovieTitle: sLang = 'VOSTFR' sMovieTitle = sMovieTitle.replace(' VOSTFR', '').replace(' FRENCH', '').replace(' French', '') sDisplayTitle = sMovieTitle + ' (' + sLang + ')' if len(aEntry) > 4: sDisplayTitle = sDisplayTitle + ' S' + aEntry[4] + ' E' + aEntry[5] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addAnime(SITE_IDENTIFIER, 'seriesHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: sNextPage, sPaging = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', 'Page ' + sPaging, oOutputParameterHandler) oGui.setEndOfDirectory()
def seriesHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') url = URL_MAIN + 'templates/Animix/js/anime.js' oRequestHandler = cRequestHandler(url) playerContent = oRequestHandler.request() oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # On récupere l'id associé a l'épisode sPattern = '<option value="buttons_([0-9]+)">([^<]+)</option>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) epNumber = '' sHosterUrl = '' if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break # Streaming sTitle = sMovieTitle + ' ' + aEntry[1] if epNumber != aEntry[1]: epNumber = aEntry[1] oGui.addText(SITE_IDENTIFIER, '[COLOR red]' + epNumber + '[/COLOR]') # On récupere l'info du player sPattern = '<div id="buttons_' + aEntry[0] + '" class="button_box">(.+?)/div></div>' htmlCut = oParser.parse(sHtmlContent, sPattern)[1][0] #sPattern = '<div id="player_([0-9]+)".+?">([^<]+)<' sPattern = '<div id="player_([0-9]+)".+?class="new_player_([^"]+)' data = oParser.parse(htmlCut, sPattern) for aEntry1 in data[1]: sPattern = '<div id="content_player_' + aEntry1[0] + '" class="player_box">([^<]+)</div>' playerData = oParser.parse(sHtmlContent, sPattern)[1][0] if 'http' not in playerData: sPattern = 'player_type.*=="new_player_' + aEntry1[1].lower()+ '"\|.+?(?:src=\\\\")([^"]*).*?player_content.*?"([^\\\\"]*)' aResult2 = oParser.parse(playerContent, sPattern) if aResult2[0] == True: sHosterUrl = aResult2[1][0][0] + playerData + aResult2[1][0][1] if 'http' not in sHosterUrl: sHosterUrl = 'https:' + sHosterUrl else: sHosterUrl = playerData oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sTitle) oHoster.setFileName(sTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) sPattern = '<div class="lien-episode">.+?<b>' + epNumber + '<.+?href="([^"]+).+?<b>([^<]+)<' ddlData = oParser.parse(sHtmlContent, sPattern) for aEntry2 in ddlData[1]: sTitle = sMovieTitle + ' ' + epNumber + ' ' + aEntry2[1] url = aEntry2[0] if 'ouo' in url: oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', url) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addLink(SITE_IDENTIFIER, 'DecryptOuo', sTitle, sThumb, '', oOutputParameterHandler) else: sHosterUrl = url oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sTitle) oHoster.setFileName(sTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) oGui.setEndOfDirectory()
class cHoster(iHoster): def __init__(self): self.__sDisplayName = 'MailRu' self.__sFileName = self.__sDisplayName self.__sHD = '' def getDisplayName(self): return self.__sDisplayName def setDisplayName(self, sDisplayName): self.__sDisplayName = sDisplayName + ' [COLOR skyblue]' + self.__sDisplayName + '[/COLOR]' def setFileName(self, sFileName): self.__sFileName = sFileName def getFileName(self): return self.__sFileName def getPluginIdentifier(self): return 'mailru' def setHD(self, sHD): self.__sHD = '' def getHD(self): return self.__sHD def isDownloadable(self): return True def isJDownloaderable(self): return True def getPattern(self): return '' def __getIdFromUrl(self, sUrl): return '' def setUrl(self, sUrl): self.__sUrl = str(sUrl) def checkUrl(self, sUrl): return True def __getUrl(self, media_id): return def getMediaLink(self): return self.__getMediaLinkForGuest() def __getMediaLinkForGuest(self): api_call = False UA = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0' headers = {"User-Agent":UA} req1 = urllib2.Request(self.__sUrl, None, headers) resp1 = urllib2.urlopen(req1) sHtmlContent = resp1.read() resp1.close() sPattern = '{"metadataUrl":"([^"]+)",' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) vurl = 'http://my.mail.ru/' + aResult[1][0] req = urllib2.Request(vurl, None, headers) try: response = urllib2.urlopen(req) except urllib2.URLError, e: print e.read() print e.reason data = response.read() head = response.headers response.close() #get cookie cookies = '' if 'Set-Cookie' in head: oParser = cParser() sPattern = '(?:^|,) *([^;,]+?)=([^;,\/]+?);' aResult = oParser.parse(str(head['Set-Cookie']), sPattern) #print aResult if (aResult[0] == True): for cook in aResult[1]: cookies = cookies + cook[0] + '=' + cook[1] + ';' sPattern = '{"url":"([^"]+)",.+?"key":"(\d+p)"}' aResult = oParser.parse(data, sPattern) if (aResult[0] == True): #initialisation des tableaux url=[] qua=[] #Remplissage des tableaux for i in aResult[1]: url.append(str(i[0])) qua.append(str(i[1])) #Affichage du tableau api_call = dialog().VSselectqual(qua, url) if (api_call): return True, 'http:' + api_call + '|User-Agent=' + UA + '&Cookie=' + cookies return False, False
def showSeriesHosters(): # recherche et affiche les hotes #xbmc.log('showSeriesHosters') oGui = cGui() oInputParameterHandler = cInputParameterHandler( ) #apelle l'entree de paramettre sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sUrl = oInputParameterHandler.getValue('siteUrl') sThumbnail = oInputParameterHandler.getValue('sThumbnail') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() #Fonction pour recuperer uniquement les liens #sHtmlContent = Cutlink(sHtmlContent) #Pour les series on fait l'inverse des films on vire les liens premiums if 'Premium' in sHtmlContent or 'PREMIUM' in sHtmlContent or 'premium' in sHtmlContent: sHtmlContent = CutPremiumlinks(sHtmlContent) oParser = cParser() sPattern = '<div style="font-weight:bold;color:[^"]+?">([^<]+)</div>|<a target="_blank" href="https://([^"]+)/([^"]+?)">([^<]+)<' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): total = len(aResult[1]) dialog = cConfig().createDialog(SITE_NAME) for aEntry in aResult[1]: cConfig().updateDialog(dialog, total) #print aEntry if dialog.iscanceled(): break if aEntry[0]: oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', aEntry[1]) oOutputParameterHandler.addParameter('sMovieTitle', str(sMovieTitle)) oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) if 'Télécharger' in aEntry[0]: oGui.addText(SITE_IDENTIFIER, '[COLOR olive]' + str(aEntry[0]) + '[/COLOR]') else: oGui.addText(SITE_IDENTIFIER, '[COLOR red]' + str(aEntry[0]) + '[/COLOR]') else: sName = aEntry[3] sName = sName.replace('Télécharger', '') sName = sName.replace('pisodes', 'pisode') sUrl2 = 'https://' + aEntry[1] + '/' + aEntry[2] #cConfig().log(sUrl2) sTitle = sMovieTitle + ' ' + sName sDisplayTitle = cUtil().DecoTitle(sTitle) URL_DECRYPT = aEntry[1] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', str(sUrl2)) oOutputParameterHandler.addParameter('sMovieTitle', str(sTitle)) oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) oGui.addMovie(SITE_IDENTIFIER, 'Display_protected_link', sDisplayTitle, '', sThumbnail, '', oOutputParameterHandler) cConfig().finishDialog(dialog) oGui.setEndOfDirectory()
def showLinks(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sRefUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') oParser = cParser() oRequestHandler = cRequestHandler(sRefUrl) sHtmlContent = oRequestHandler.request() sDesc = '' try: sPattern = '<p>([^<>"]+)<\/p>' aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0]: sDesc = aResult[1][0].replace('’', '\'').replace('…', '...') except: pass sPattern = 'var movie.+?id.+?"(.+?)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): MovieUrl = URL_MAIN + 'playery/?id=' + aResult[1][0] req = urllib2.Request(MovieUrl, None, headers) req.add_header('Referer', sRefUrl) response = urllib2.urlopen(req) head = response.headers sHtmlContent = response.read() response.close() cookies = getcookie(head) sPattern = '<input type="hidden" name="videov" id="videov" value="([^"]+)">.+?<\/b>([^<]+)<span class="dt_flag">.+?\/flags\/(.+?)\.' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sHost = aEntry[1].replace(' ', '').replace('.ok.ru', 'ok.ru') sHost = re.sub('\.\w+', '', sHost) if 'nowvideo' in sHost: continue sHost = sHost.capitalize() sLang = aEntry[2].upper() sTitle = ('%s (%s) [COLOR coral]%s[/COLOR]') % (sMovieTitle, sLang, sHost) sUrl = URL_MAIN[:-1] + aEntry[0] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sRefUrl', sRefUrl) oOutputParameterHandler.addParameter('cookies', cookies) oGui.addLink(SITE_IDENTIFIER, 'showHosters', sTitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() oParser = cParser() if sSearch: sUrl = sSearch.replace(' ', '+') else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = '<a href="([^"]+)" data-url=".+?" class=".+?" title="([^"]+)"><img.+?src="([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break #encode/decode pour affichage des accents sTitle = unicode(aEntry[1], 'utf-8') sTitle = unicodedata.normalize('NFD', sTitle).encode( 'ascii', 'ignore').decode("unicode_escape") sTitle = sTitle.encode("latin-1") sThumb = aEntry[2] sUrl = aEntry[0] #tris search if sSearch and total > 3: if cUtil().CheckOccurence(sSearch.replace(URL_SEARCH[0], ''), sTitle) == 0: continue oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) if '/series/' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showSeries', sTitle, '', sThumb, '', oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showLinks', sTitle, '', sThumb, '', oOutputParameterHandler) progress_.VSclose(progress_) sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory()
def showHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') if 'forum-tv' in sUrl: dialog().VSinfo('Décodage en cours', "Patientez", 5) s = requests.Session() response = s.get(sUrl, headers={'User-Agent': UA}) sHtmlContent = str(response.content) cookie_string = "; ".join( [str(x) + "=" + str(y) for x, y in s.cookies.items()]) oParser = cParser() sPattern = '<input type="hidden".+?value="([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): data = "_method=" + aResult[1][0] + "&_csrfToken=" + aResult[1][ 1] + "&ad_form_data=" + Quote( aResult[1][2]) + "&_Token%5Bfields%5D=" + Quote( aResult[1][3]) + "&_Token%5Bunlocked%5D=" + Quote( aResult[1][4]) #Obligatoire pour validé les cookies. xbmc.sleep(6000) oRequestHandler = cRequestHandler( "https://forum-tv.org/adslinkme/links/go") oRequestHandler.setRequestType(1) oRequestHandler.addHeaderEntry('Referer', sUrl) oRequestHandler.addHeaderEntry( 'Accept', 'application/json, text/javascript, */*; q=0.01') oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Content-Length', len(data)) oRequestHandler.addHeaderEntry( 'Content-Type', "application/x-www-form-urlencoded; charset=UTF-8") oRequestHandler.addHeaderEntry('X-Requested-With', 'XMLHttpRequest') oRequestHandler.addHeaderEntry('Cookie', cookie_string) oRequestHandler.addParametersLine(data) sHtmlContent = oRequestHandler.request() sPattern = 'url":"([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHosterUrl = aResult[1][0] oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sMovieTitle) oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) else: sHosterUrl = sUrl oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sMovieTitle) oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) oGui.setEndOfDirectory()
def showMovies2(sSearch = ''): oGui = cGui() #ouvre l'affichage if sSearch: #si une url et envoyer directement grace a la fonction showSearch sUrl = sSearch else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') #recupere l'url sortie en parametre oRequestHandler = cRequestHandler(sUrl) #envoye une requete a l'url sHtmlContent = oRequestHandler.request() #requete aussi #sHtmlContent = sHtmlContent.replace('<span class="likeThis">', '').replace('</span>', '') #la fonction replace est pratique pour supprimer un code du resultat sPattern = '<img src="([^"]+)"\s*alt=".+?"\s*"/>\s*</div>\s*<div class=".+?"\s*data-ajax=".+?"\s*data-id=".+?"\s*data-type=".+?"\s*<a href="([^"]+)"\s*title=".+?">([^<>]+)</a>' #pour faire simple recherche ce bout de code dans le code source de l'url #- "([^"]+)" je veux cette partie de code qui se trouve entre guillemets mais pas de guillemets dans la chaine #- .+? je ne veux pas cette partie et peux importe ceux qu'elle contient #- >(.+?)< je veux cette partie de code qui se trouve entre < et > mais il peut y avoir n'inporte quoi entre les 2. #- (https*://[^"]) je veux l'adresse qui commence par https ou http jusqu'au prochain guillemet. # #Pour tester vos Regex, vous pouvez utiliser le site https://regex101.com/ en mettant dans les modifiers "gmis" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) #le plus simple et de faire un VSlog(str(aResult)) #dans le fichier log d'xbmc vous pourrez voir un array de ce que recupere le script #et modifier sPattern si besoin VSlog(str(aResult)) #Commenter ou supprimer cette ligne une fois fini #affiche une information si aucun resulat if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) #dialog barre de progression progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) #dialog update if progress_.iscanceled(): break #L'array affiche vos info dans l'orde de sPattern en commencant a 0, attention dans ce cas la on recupere 6 information #Mais selon votre regex il ne peut y en avoir que 2 ou 3. sTitle = str(aEntry[2]) sUrl2 = str(aEntry[1]) sThumb = str(aEntry[0]) #sLang = str(aEntry[3]) #sQual = str(aEntry[4]) #sHoster = str(aEntry[5]) sDesc = '' #sTitle = sTitle.replace('En streaming', '') #Si vous avez des information dans aEntry Qualiter lang organiser un peux vos titre exemple. #Si vous pouvez la langue et la Qualite en MAJ ".upper()" vostfr.upper() = VOSTFR #sTitle = ('%s [%s] (%s) [COLOR coral]%s[/COLOR]') % (sTitle, sQual, sLang.upper(), sHoster) #mettre les information de streaming entre [] et le reste entre () vstream s'occupe de la couleur automatiquement. #Utile que si les liens recuperer ne commence pas par (http://www.nomdusite.com/) #sUrl2 = URL_MAIN + sUrl2 oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) #sortie de l'url oOutputParameterHandler.addParameter('sMovieTitle', sTitle) #sortie du titre oOutputParameterHandler.addParameter('sThumb', sThumb) #sortie du poster if '/series' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'ShowSerieSaisonEpisodes', sTitle, '', sThumb, sDesc, oOutputParameterHandler) #addTV pour sortir les series tv (identifiant, function, titre, icon, poster, description, sortie parametre) else: oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler) #addMovies pour sortir les films (identifiant, function, titre, icon, poster, description, sortie parametre) #il existe aussi addMisc(identifiant, function, titre, icon, poster, description, sortie parametre) #la difference et pour les metadonner serie, films ou sans progress_.VSclose(progress_) #fin du dialog sNextPage = __checkForNextPage(sHtmlContent) #cherche la page suivante if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies2', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler) #Ajoute une entree pour le lien Next | pas de addMisc pas de poster et de description inutile donc if not sSearch: oGui.setEndOfDirectory() #ferme l'affichage
def Display_protected_link(): #xbmc.log('Display_protected_link') oGui = cGui() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sUrl = oInputParameterHandler.getValue('siteUrl') sThumbnail = oInputParameterHandler.getValue('sThumbnail') oParser = cParser() #cConfig().log(sUrl) #Ne marche pas if (False): code = { '123455600123455602123455610123455615': 'http://uptobox.com/', '1234556001234556071234556111234556153': 'http://turbobit.net/', '123455600123455605123455615': 'http://ul.to/', '123455600123455608123455610123455615': 'http://nitroflare.com/', '123455601123455603123455610123455615123455617': 'https://1fichier.com/?', '123455600123455606123455611123455615': 'http://rapidgator.net/' } for k in code: match = re.search(k + '(.+)$', sUrl) if match: sHosterUrl = code[k] + match.group(1) sHosterUrl = sHosterUrl.replace('123455615', '/') oHoster = cHosterGui().checkHoster(sHosterUrl) sTitle = sMovieTitle if (oHoster != False): sDisplayTitle = cUtil().DecoTitle(sTitle) oHoster.setDisplayName(sDisplayTitle) oHoster.setFileName(sTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumbnail) oGui.setEndOfDirectory() return #Est ce un lien dl-protect ? if URL_DECRYPT in sUrl: sHtmlContent = DecryptDlProtecte(sUrl) if sHtmlContent: #Si redirection if sHtmlContent.startswith('http'): aResult_dlprotecte = (True, [sHtmlContent]) else: sPattern_dlprotecte = '<div class="lienet"><a href="(.+?)">' aResult_dlprotecte = oParser.parse(sHtmlContent, sPattern_dlprotecte) else: oDialog = cConfig().createDialogOK('Erreur décryptage du lien') aResult_dlprotecte = (False, False) #Si lien normal else: if not sUrl.startswith('http'): sUrl = 'http://' + sUrl aResult_dlprotecte = (True, [sUrl]) #print aResult_dlprotecte if (aResult_dlprotecte[0]): episode = 1 for aEntry in aResult_dlprotecte[1]: sHosterUrl = aEntry #print sHosterUrl sTitle = sMovieTitle if len(aResult_dlprotecte[1]) > 1: sTitle = sMovieTitle + ' episode ' + str(episode) sDisplayTitle = cUtil().DecoTitle(sTitle) episode += 1 if not 'uptobox' or '1fichier' or 'ul' or 'turbobit' or 'nitroflare' or 'rapidgator' in str( sHosterUrl): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', str(sHosterUrl)) oOutputParameterHandler.addParameter('sMovieTitle', str(sDisplayTitle)) oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) oGui.addMovie(SITE_IDENTIFIER, 'showStreamingHosters', sDisplayTitle, '', sThumbnail, '', oOutputParameterHandler) else: oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sDisplayTitle) oHoster.setFileName(sTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumbnail) oGui.setEndOfDirectory()
def showSeriesLinks(): #xbmc.log('mode serie') oGui = cGui() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumbnail = oInputParameterHandler.getValue('sThumbnail') sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() #cConfig().log(sUrl) oParser = cParser() #Mise àjour du titre sPattern = 'content="Telecharger (.+?)Qualité [^\|]+?\| [^\|]+?\| (.+?) la serie' aResult = oParser.parse(sHtmlContent, sPattern) #print aResult if (aResult[0]): sMovieTitle = aResult[1][0][0] + aResult[1][0][1] oGui.addText( SITE_IDENTIFIER, '[COLOR olive]Qualités disponibles pour cette saison :[/COLOR]') #on recherche d'abord la qualité courante sPattern = '<div style="[^"]+?">.+?Qualité (.+?)<' aResult = oParser.parse(sHtmlContent, sPattern) #print aResult sQual = '' if (aResult[1]): sQual = aResult[1][0] sDisplayTitle = cUtil().DecoTitle( sMovieTitle) + ' [COLOR skyblue]' + sQual + '[/COLOR]' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', str(sMovieTitle)) oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) oGui.addTV(SITE_IDENTIFIER, 'showSeriesHosters', sDisplayTitle, '', sThumbnail, '', oOutputParameterHandler) #on regarde si dispo dans d'autres qualités sHtmlContent1 = CutQual(sHtmlContent) #sPattern1 = '<a href="([^"]+)"><span class="otherquality">([^<]+)<' sPattern1 = '<a href="([^"]+)"><span class="otherquality"><span style="color:#.{6}"><b>([^<]+)<\/b><\/span><span style="color:#.{6}"><b>([^<]+)<\/b><\/span>' aResult1 = oParser.parse(sHtmlContent1, sPattern1) #print aResult1 if (aResult1[0] == True): total = len(aResult1[1]) dialog = cConfig().createDialog(SITE_NAME) for aEntry in aResult1[1]: cConfig().updateDialog(dialog, total) if dialog.iscanceled(): break sDisplayTitle = cUtil().DecoTitle( sMovieTitle ) + ' [COLOR skyblue]' + aEntry[1] + aEntry[2] + '[/COLOR]' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter( 'siteUrl', URL_MAIN + 'telecharger-series' + aEntry[0]) oOutputParameterHandler.addParameter('sMovieTitle', str(sMovieTitle)) oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) oGui.addTV(SITE_IDENTIFIER, 'showSeriesHosters', sDisplayTitle, '', sThumbnail, '', oOutputParameterHandler) cConfig().finishDialog(dialog) #on regarde si dispo d'autres saisons sHtmlContent2 = CutSais(sHtmlContent) #sPattern2 = '<a href="([^"]+)"><span class="otherquality">([^<]+)<' sPattern2 = '<a href="([^"]+)"><span class="otherquality">([^<]+)<b>([^<]+)<span style="color:#.{6}">([^<]+)<\/span><span style="color:#.{6}">([^<]+)<\/b><\/span>' aResult2 = oParser.parse(sHtmlContent2, sPattern2) #print aResult2 if (aResult2[0] == True): oGui.addText( SITE_IDENTIFIER, '[COLOR olive]Autres Saisons disponibles pour cette série :[/COLOR]' ) for aEntry in aResult2[1]: sTitle = '[COLOR skyblue]' + aEntry[1] + aEntry[2] + aEntry[ 3] + aEntry[4] + '[/COLOR]' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter( 'siteUrl', URL_MAIN + 'telecharger-series' + aEntry[0]) oOutputParameterHandler.addParameter('sMovieTitle', str(sMovieTitle)) oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) oGui.addTV(SITE_IDENTIFIER, 'showSeriesLinks', sTitle, 'series.png', sThumbnail, '', oOutputParameterHandler) oGui.setEndOfDirectory()
def showHosters(): # recherche et affiche les hotes #xbmc.log('showHosters') oGui = cGui() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sUrl = oInputParameterHandler.getValue('siteUrl') sThumbnail = oInputParameterHandler.getValue('sThumbnail') #xbmc.log(sUrl) oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry( 'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0' ) oRequestHandler.addHeaderEntry( 'Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8') oRequestHandler.addHeaderEntry('Accept-Language', 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3') sHtmlContent = oRequestHandler.request() #fh = open('c:\\test.txt', "w") #fh.write(sHtmlContent.replace('\n','')) #fh.close() #Fonction pour recuperer uniquement les liens #sHtmlContent = Cutlink(sHtmlContent) #Si ca ressemble aux lien premiums on vire les liens non premium if 'Premium' in sHtmlContent or 'PREMIUM' in sHtmlContent: oParser = cParser() sPattern = '<font color=red>([^<]+?)</font>' aResult = oParser.parse(sHtmlContent, sPattern) sHtmlContent = CutNonPremiumlinks(sHtmlContent) #print sHtmlContent oParser = cParser() sPattern = '<font color=red>([^<]+?)</font>|<div style="font-weight:bold;[^"]+?">([^>]+?)</div></b><b><a target="_blank" href="([^<>"]+?)">Télécharger<\/a>|>\[(Liens Premium) \]<|<span style="color:#FF0000">(.+?)</div></b><b><a target="_blank" href=href="https://([^"]+)/([^"]+?)">' aResult = oParser.parse(sHtmlContent, sPattern) #xbmc.log(str(aResult)) if (aResult[0] == True): total = len(aResult[1]) dialog = cConfig().createDialog(SITE_NAME) for aEntry in aResult[1]: cConfig().updateDialog(dialog, total) if dialog.iscanceled(): break if aEntry[0]: if ('Interchangeables' not in aEntry[0]): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', str(sUrl)) oOutputParameterHandler.addParameter( 'sMovieTitle', str(sMovieTitle)) oOutputParameterHandler.addParameter( 'sThumbnail', str(sThumbnail)) oGui.addText(SITE_IDENTIFIER, '[COLOR red]' + str(aEntry[0]) + '[/COLOR]') #elif aEntry[1]: #oOutputParameterHandler = cOutputParameterHandler() #oOutputParameterHandler.addParameter('siteUrl', str(sUrl)) #oOutputParameterHandler.addParameter('sMovieTitle', str(sMovieTitle)) #oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) #if 'Télécharger' in aEntry[1]: #oGui.addText(SITE_IDENTIFIER, '[COLOR olive]'+str(aEntry[1])+'[/COLOR]') #else: #oGui.addText(SITE_IDENTIFIER, '[COLOR red]'+str(aEntry[1])+'[/COLOR]') else: sTitle = '[COLOR skyblue]' + aEntry[ 1] + '[/COLOR] ' + sMovieTitle URL_DECRYPT = aEntry[3] oOutputParameterHandler = cOutputParameterHandler() if sUrl.startswith('https') or sUrl.startswith('http'): oOutputParameterHandler.addParameter('siteUrl', aEntry[2]) else: sUrl2 = 'https://' + aEntry[3] + '/' + aEntry[4] oOutputParameterHandler.addParameter('siteUrl', str(sUrl2)) oOutputParameterHandler.addParameter('sMovieTitle', str(sMovieTitle)) oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) oGui.addMovie(SITE_IDENTIFIER, 'Display_protected_link', sTitle, '', sThumbnail, '', oOutputParameterHandler) cConfig().finishDialog(dialog) oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() bGlobal_Search = False qual = False if sSearch: if URL_SEARCH[0] in sSearch: bGlobal_Search = True sSearch = sSearch.replace(URL_SEARCH[0], '') query_args = (('do', 'search'), ('subaction', 'search'), ('story', sSearch), ('titleonly', '3')) data = urllib.urlencode(query_args) request = urllib2.Request(URL_SEARCH[0], data, headers) sPattern = '<div style="height:[0-9]{3}px;"> *<a href="([^"]+)" *><img class="[^"]+?" data-newsid="[^"]+?" src="([^<"]+)".+?<div class="[^"]+?" style="[^"]+?"> *<a href="[^"]+?" *> ([^<]+?)<' else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') request = urllib2.Request(sUrl, None, headers) sPattern = '<div style="height:[0-9]{3}px;"> *<a href="([^"]+)"><img class="[^"]+?" data-newsid="[^"]+?" src="([^<"]+)".+?<div class="[^"]+?" style="[^"]+?"> *<a href="[^"]+?"> ([^<]+?)<' reponse = urllib2.urlopen(request) sHtmlContent = reponse.read() #xbmc.log(sHtmlContent) reponse.close() oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) #print aResult if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) dialog = cConfig().createDialog(SITE_NAME) for aEntry in aResult[1]: cConfig().updateDialog(dialog, total) if dialog.iscanceled(): break sTitle = str(aEntry[2]) sUrl2 = aEntry[0] #traite les qualités liste = [ '4k', '1080p', '720p', 'bdrip', 'hdrip', 'dvdrip', 'cam-md' ] for i in liste: if i in sUrl2: sTitle = '%s (%s)' % (sTitle, i) #Si recherche et trop de resultat, on nettoye #31/12/17 Ne fonctionne plus ? if sSearch and total > 2: if cUtil().CheckOccurence(sSearch, sTitle) == 0: continue if 'http' in aEntry[1]: sThumbnail = aEntry[1] else: sThumbnail = URL_MAIN + aEntry[1] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', str(sUrl2)) oOutputParameterHandler.addParameter('sMovieTitle', str(sTitle)) oOutputParameterHandler.addParameter('sThumbnail', sThumbnail) sDisplayTitle = cUtil().DecoTitle(sTitle) if 'films-gratuit' in sUrl2 or '4k' in sUrl2: oGui.addMovie(SITE_IDENTIFIER, 'showMoviesLinks', sDisplayTitle, '', sThumbnail, '', oOutputParameterHandler) else: oGui.addTV(SITE_IDENTIFIER, 'showSeriesLinks', sDisplayTitle, '', sThumbnail, '', oOutputParameterHandler) sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory()
def showMoviesLinks(): #xbmc.log('mode film') oGui = cGui() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumbnail = oInputParameterHandler.getValue('sThumbnail') sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() #print sUrl oParser = cParser() sCom = '' #Affichage du menu oGui.addText( SITE_IDENTIFIER, '[COLOR olive]' + 'Qualités disponibles pour ce film :' + '[/COLOR]') #on recherche d'abord la qualité courante sPattern = '<div style="[^"]+?"> *Qualité (.+?)<\/div>' aResult = oParser.parse(sHtmlContent, sPattern) #print aResult sQual = '' if (aResult[0]): sQual = aResult[1][0] sTitle = sMovieTitle + ' [COLOR skyblue]' + sQual + '[/COLOR]' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', str(sMovieTitle)) oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumbnail, sCom, oOutputParameterHandler) #on regarde si dispo dans d'autres qualités sPattern = '<a href="([^"]+)"><span class="otherquality"><span style="color:#.{6}"><b>([^<]+)<\/b><\/span><span style="color:#.{6}"><b>([^<]+)<\/b><\/span>' aResult = oParser.parse(sHtmlContent, sPattern) #print aResult if (aResult[0] == True): total = len(aResult[1]) dialog = cConfig().createDialog(SITE_NAME) for aEntry in aResult[1]: cConfig().updateDialog(dialog, total) if dialog.iscanceled(): break sTitle = sMovieTitle + ' [COLOR skyblue]' + aEntry[1] + aEntry[ 2] + '[/COLOR]' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_MAIN[:-1] + aEntry[0]) oOutputParameterHandler.addParameter('sMovieTitle', str(sMovieTitle)) oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumbnail, sCom, oOutputParameterHandler) cConfig().finishDialog(dialog) oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sType = '' if sSearch: sUrl = sSearch #partie en test oInputParameterHandler = cInputParameterHandler() sType = oInputParameterHandler.getValue('type') else: sUrl = oInputParameterHandler.getValue('siteUrl') sPattern = 'fullstreaming".*?img src="(.+?)".+?<span class="xquality">(.+?)</span>.+?href="(.+?)">(.+?)<\/a>.*?style="font-family:.*?>(.+?)<\/span>' oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request() #page bloquee? if sHtmlContent.startswith('<noscript>'): code = re.search('value="([^"]+)"\/>', sHtmlContent, re.DOTALL).group(1) oRequestHandler2 = cRequestHandler(sUrl) oRequestHandler2.addHeaderEntry('Referer', URL_MAIN) oRequestHandler2.addHeaderEntry('User-Agent', UA) oRequestHandler2.addHeaderEntry('Content-Type', 'application/x-www-form-urlencoded') oRequestHandler2.setRequestType(cRequestHandler.REQUEST_TYPE_POST) oRequestHandler2.addParametersLine('_authfer=' + code) sHtmlContent = oRequestHandler2.request() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sThumb = str(aEntry[0]) if sThumb.startswith('/'): sThumb = URL_MAIN[:-1] + sThumb sQual = str(aEntry[1]).replace('Haute-qualité', 'HQ').replace(' ', '') sUrl2 = str(aEntry[2]) sDesc = str(aEntry[4]).replace('<br />', '') #traitement pour affichage de la langue sLang = '' if '/vf/' in sUrl or '/vostfr/' in sUrl: sLang = '' elif 'VF' in str(aEntry[3]): sLang = 'VF' elif 'VOSTFR' in str(aEntry[3]): sLang = 'VOSTFR' sTitle = str(aEntry[3]).replace('VOSTFR', '').replace('VF', '').replace( 'VOST', '') sDisplayTitle = ('%s [%s] (%s)') % (sTitle, sQual, sLang) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) if '/seriestv/' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showEpisode', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showLink', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_) sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') if sSearch: sUrl = sSearch sPattern = 'class="image">.*?<a href="([^"]+)">\s*<img src="([^"]+)" alt="([^"]+)".+?<p>([^<]*)' elif 'episodes' in sUrl: sPattern = 'class="poster">.*?<img src="([^"]+)" alt="([^"]+)".+?<a href="([^"]+)' else: sPattern = 'class="poster"> *<img src="([^"]+)".+?<a href="([^"]+)" *title="([^"]+)".+?class="texto">([^<]*)' oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break # Si recherche et trop de resultat, on filtre if sSearch and total > 5: if cUtil().CheckOccurence(sSearch.replace(URL_SEARCH[0], ''), aEntry[2]) == 0: continue if sSearch: sUrl = aEntry[0] sThumb = aEntry[1] sTitle = aEntry[2] sDesc = aEntry[3] elif 'episodes' in sUrl: sThumb = aEntry[0] sTitle = aEntry[1] sUrl = aEntry[2] sDesc = '' else: sThumb = aEntry[0] sUrl = aEntry[1] sTitle = aEntry[2].replace('streaming', ' ') sDesc = aEntry[3] # si utile il faut retirer oOutputParameterHandler.addParameter(sDesc) # if sDesc: # désactivé le 17/06/2020, # try: # sDesc = cUtil().unescape(sDesc.decode('utf8')) # except AttributeError: # sDesc = cUtil().unescape(sDesc) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) if 'series' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showSxE', sTitle, '', sThumb, sDesc, oOutputParameterHandler) elif 'episodes' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showLinks', sTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showLinks', sTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) number = re.search('page/([0-9]+)', sNextPage).group(1) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory()
def showFile(sSearch=''): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') # VSlog('input ' + str(sUrl)) oParser = cParser() sOffset = 0 if (oInputParameterHandler.exist('sOffset')): sOffset = int(oInputParameterHandler.getValue('sOffset')) sNext = 0 if (oInputParameterHandler.exist('sNext')): sNext = int(oInputParameterHandler.getValue('sNext')) sToken = '' if (oInputParameterHandler.exist('sToken')): sToken = oInputParameterHandler.getValue('sToken') sFoldername = '' if (oInputParameterHandler.exist('sFoldername')): sFoldername = oInputParameterHandler.getValue('sFoldername') sUrl = sUrl + Quote(sFoldername).replace('//', '%2F%2F') # VSlog('folder ' + str(sUrl)) sPath = '' if (oInputParameterHandler.exist('sPath')): sPath = oInputParameterHandler.getValue('sPath') sUrl = sUrl + Quote(sPath).replace('//', '%2F%2F') # VSlog('sPath ' + str(sUrl)) oPremiumHandler = cPremiumHandler('uptobox') if 'uptobox.com' in sUrl: sHtmlContent = oPremiumHandler.GetHtml(sUrl) else: if sToken == '': sHtmlContent = oPremiumHandler.GetHtml(BURL) sPattern = 'token":"(.+?)",' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sToken = aResult[1][0] if sSearch: sHtmlContent = oPremiumHandler.GetHtml( API_URL.replace('none', sToken) + '%2F%2F' + sSearch) else: sHtmlContent = oPremiumHandler.GetHtml( API_URL.replace('none', sToken) + '%2F%2F') content = json.loads(sHtmlContent) content = content['data'] if content: total = len(content) progress_ = progress().VScreate(SITE_NAME) sPath = getpath(content) for x in content: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break if x == 'files': for y in content[x]: if xbmc.getInfoLabel('system.buildversion')[0:2] >= '19': sTitle = y['file_name'] else: sTitle = y['file_name'].encode('utf-8') sHosterUrl = URL_MAIN + y['file_code'] oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sTitle) oHoster.setFileName(sTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, '') sNext += 1 if x == 'folders': for z in content[x]: if xbmc.getInfoLabel('system.buildversion')[0:2] >= '19': sTitle = z['name'] sFoldername = z['fld_name'] else: sTitle = z['name'].encode('utf-8') sFoldername = z['fld_name'].encode('utf-8') sUrl = API_URL.replace('none', sToken) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter( 'sFoldername', sFoldername) oOutputParameterHandler.addParameter('sToken', sToken) oGui.addDir(SITE_IDENTIFIER, 'showFile', sTitle, 'genres.png', oOutputParameterHandler) if x == 'currentFolder': if content[x]['fileCount'] != int(sNext): oOutputParameterHandler = cOutputParameterHandler() sOffset = int(sOffset) + 100 oOutputParameterHandler.addParameter( 'siteUrl', API_URL.replace('none', sToken).replace( 'offset=0', 'offset=' + str(sOffset))) oOutputParameterHandler.addParameter('sToken', sToken) oOutputParameterHandler.addParameter('sNext', sNext) oOutputParameterHandler.addParameter('sOffset', sOffset) oOutputParameterHandler.addParameter('sPath', sPath) oGui.addNext(SITE_IDENTIFIER, 'showFile', 'Suite', oOutputParameterHandler) progress_.VSclose(progress_) oGui.setEndOfDirectory()
def getMediaLink(self): self.oPremiumHandler = cPremiumHandler('uptobox') premium = self.oPremiumHandler.isPremiumModeAvailable() api_call = False SubTitle = "" if premium: self.oPremiumHandler.Authentificate() else: dialog().VSok('Ce hoster demande un login, meme gratuit.') return False, False cookies = GestionCookie().Readcookie("uptobox") s = requests.Session() s.headers.update({"Cookie": cookies}) r = s.get('https://uptobox.com/api/streaming?file_code=' + self.__sUrl.split('/')[-1]).json() if r["statusCode"] != 0: # Erreur dialog().VSinfo(r["data"]) return False, False r1 = s.get(r["data"]["user_url"]).text tok = re.search('token.+?;.+?;(.+?)&', r1).group(1) if not xbmc.getCondVisibility('system.platform.android'): # Si possible on ouvre la page automatiquement dans un navigateur internet. import webbrowser webbrowser.open(r['data']['user_url']) with CountdownDialog("Autorisation nécessaire", "Pour voir cette vidéo, veuillez vous connecter", "Allez sur ce lien : " + r['data']['user_url'], "Et valider le pin : " + r['data']['pin'], True, r["data"]['expired_in'], 10) as cd: js_result = cd.start(self.__check_auth, [r["data"]["check_url"]])["data"] else: from resources.lib import pyqrcode from resources.lib.librecaptcha.gui import cInputWindowYesNo qr = pyqrcode.create(r['data']['user_url']) qr.png('special://home/userdata/addon_data/plugin.video.vstream/qrcode.png', scale=5) oSolver = cInputWindowYesNo(captcha='special://home/userdata/addon_data/plugin.video.vstream/qrcode.png', msg="Scanner le QRCode pour acceder au lien d'autorisation", roundnum=1) retArg = oSolver.get() DIALOG = dialog() if retArg == "N": return False js_result = s.get(r["data"]["check_url"]).json()["data"] #Deux modes de fonctionnement different. if js_result.get("streamLinks").get('src'): api_call = js_result['streamLinks']['src'].replace(".m3u8",".mpd") else: sPattern = "'(.+?)': {(.+?)}" oParser = cParser() aResult = oParser.parse(js_result["streamLinks"], sPattern) url = [] qua = [] api_call = False for aEntry in aResult[1]: QUAL = aEntry[0] d = re.findall("'u*(.+?)': u*'(.+?)'",aEntry[1]) for aEntry1 in d: url.append(aEntry1[1]) qua.append(QUAL + ' (' + aEntry1[0] + ')') # Affichage du tableau api_call = dialog().VSselectqual(qua, url) try: SubTitle = self.checkSubtitle(js_result["subs"]) except: VSlog("Pas de sous-titre") if (api_call): if SubTitle: return True, api_call, SubTitle else: return True, api_call return False, False
def showMovies(sSearch=''): oGui = cGui() oParser = cParser() if sSearch: sUrl = sSearch oRequest = cRequestHandler(sUrl) sHtmlContent = oRequest.request() else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() if '<h2 class="side-title nop">film du moment</h2>' in sHtmlContent: sStart = '<div class="films-group small' sEnd = '<div class="side-title">films par Genres' sHtmlContent = oParser.abParse(sHtmlContent, sStart, sEnd) else: sHtmlContent = sHtmlContent sPattern = 'class="film-uno *">.+?href="([^"]+)".+?src="([^"]+)" alt="([^"]+).+?class="quality ">([^<]+).+?class="nop short-story *">(.+?)</p>' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sUrl = aEntry[0] sThumb = aEntry[1] sTitle = aEntry[2] # .decode("unicode_escape").encode("latin-1") sQual = aEntry[3] sDesc = aEntry[4] sDisplayTitle = ('%s [%s]') % (sTitle, sQual) # Nettoie le titre, la premiere phrase est souvent doublée sDesc = sDesc.replace('SYNOPSIS ET DÉTAILS', '').lstrip() if len(sDesc) > 180: idx = sDesc.find(sDesc[:15], 30, 180) if idx > 0: sDesc = sDesc[idx:] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) number = re.search('/page/([0-9]+)', sNextPage).group(1) oGui.addNext(SITE_IDENTIFIER, 'showMovies', 'Page ' + number, oOutputParameterHandler) oGui.setEndOfDirectory()
def UptomyAccount(): addons = addon() if (addons.getSetting('hoster_uptobox_username') == '') and (addons.getSetting('hoster_uptobox_password') == ''): return oInputParameterHandler = cInputParameterHandler() sMediaUrl = oInputParameterHandler.getValue('sMediaUrl') oPremiumHandler = cPremiumHandler('uptobox') sHtmlContent = oPremiumHandler.GetHtml(URL_MAIN) cookies = GestionCookie().Readcookie('uptobox') aResult = re.search('<form id="fileupload" action="([^"]+)"', sHtmlContent, re.DOTALL) if (aResult): upUrl = aResult.group(1).replace('upload?', 'remote?') if upUrl.startswith('//'): upUrl = 'https:' + upUrl fields = {'urls': '["' + sMediaUrl + '"]'} mpartdata = MPencode(fields) req = urllib2.Request(upUrl, mpartdata[1], headers) req.add_header('Content-Type', mpartdata[0].replace(',', ';')) req.add_header('Cookie', cookies) req.add_header('Content-Length', len(mpartdata[1])) # penible ce dialog auth xbmc.executebuiltin('Dialog.Close(all,true)') xbmcgui.Dialog().notification('Requête envoyée', 'vous pouvez faire autre chose', xbmcgui.NOTIFICATION_INFO, 4000, False) try: rep = urllib2.urlopen(req) except UrlError: return '' sHtmlContent = rep.read() rep.close() sPattern = '{"id":.+?,(?:"size":|"progress":)([0-9]+)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): total = aResult[1][0] del aResult[1][0] dialog = xbmcgui.DialogProgressBG() dialog.create(SITE_NAME, 'Transfert de fichiers sur votre compte Uptobox') for aEntry in aResult[1]: dialog.update( int(aEntry) * 100 / int(total), 'Upload en cours...') xbmc.sleep(500) dialog.close() else: # penible ce dialog auth xbmc.executebuiltin('Dialog.Close(all,true)') xbmcgui.Dialog().notification('Info upload', 'Fichier introuvable', xbmcgui.NOTIFICATION_INFO, 2000, False) else: # penible ce dialog auth xbmc.executebuiltin('Dialog.Close(all,true)') xbmcgui.Dialog().notification('Info upload', 'Erreur pattern', xbmcgui.NOTIFICATION_ERROR, 2000, False)
def showAllPlaylist(): #On recupere les differentes playlist si il y en a oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumbnail') sDesc = oInputParameterHandler.getValue('sDescription') #VSlog(str(sUrl)) if 'firstonetv' and 'Register-Login' in sUrl: session = requests.Session() url = 'https://www.firstonetv.net/Register-Login' data = { 'usrmail': ADDON.getSetting('hoster_firstonetv_username'), 'password': ADDON.getSetting('hoster_firstonetv_password'), 'login': '******' } headers = { 'user-agent': UA, 'Content-Type': 'application/x-www-form-urlencoded', 'Referer': 'https://www.firstonetv.net/Index', 'Content-Length': str(len(data)) } session.post(url, data=data, headers=headers) cookiesDict = requests.utils.dict_from_cookiejar(session.cookies) getUser = re.match("{'(.+?)': '(.+?)',", str(cookiesDict)) #VSlog(cookiesDict) cookies = str(getUser.group(1)) + '=' + str(getUser.group(2)) GestionCookie().SaveCookie('firstonetv', cookies) dialog().VSinfo('Authentification reussie merci de recharger la page', "FirstOneTv", 15) return sHtmlContent = getHtml(sUrl) if 'myfree-tivi' in sUrl: aResult = re.findall('<meta name="csrf-token" content="(.+?)">', sHtmlContent) if aResult: token = aResult[0] #VSlog(token) sHtmlContent = getHtml(sUrl, token) if 'firstonetv' in sUrl: sPattern = '(?:"surl":"{\".+?|,.+?)"([^"]+)\".+?"http([^"]+).m3u8' elif 'myfree-tivi' in sUrl: sPattern = "thumb'.+?'(.+?)'.+?title.+?'(.+?)'.+?url'.+?'(.+?)'" elif 'iptvgratuit.com' in sUrl: sPattern = '<h4><a class="more-link" title="(.+?)" href="(.+?)" target="_blank" rel="noopener"><button>.+?</button></a></h4>' elif 'dailyiptvlist.com' in sUrl: sPattern = '<p></br><br /><strong>2. Click on link to download .+? iptv channels list</strong></p>\s*.+?<a href="(.+?)">Download (.+?)</a>' elif 'iptvsource.com': sPattern = '<a href="([^"]+)">Download as([^"]+)</a>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break if 'firstonetv' in sUrl: sTitle = sTitle + aEntry[0] sDesc = sDesc sThumb = sThumb sUrl2 = 'http' + aEntry[1].replace('\\\/', '/').replace( "\/", "/" ) + '.m3u8|Referer=' + sUrl + '&User-Agent=' + UA + '&X-Requested-With=ShockwaveFlash/28.0.0.137&Origin=https://www.firstonetv.net' elif 'myfree-tivi' in sUrl: sTitle = str(aEntry[1]) sUrl2 = str(aEntry[2]) sThumb = 'https:' + str(aEntry[0]) sDesc = '' elif 'iptvgratuit.com' in sUrl: sTitle = aEntry[0] sUrl2 = aEntry[1] sThumb = '' sDesc = '' else: sTitle = aEntry[1] sUrl2 = aEntry[0] sThumb = '' sDesc = '' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) if 'myfree-tivi' or 'firstonetv' in sUrl: oOutputParameterHandler.addParameter('sThumbnail', sThumb) if 'iptvgratuit' and 'world-iptv-links' in sUrl: oGui.addDir(SITE_IDENTIFIER, 'showWorldIptvGratuit', sTitle, '', oOutputParameterHandler) elif 'firstonetv' in sUrl or 'myfree-tivi' in sUrl: oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('play__') oGuiElement.setTitle(sTitle) oGuiElement.setFileName(sTitle) oGuiElement.setIcon(sThumb) oGuiElement.setMeta(0) oGuiElement.setThumbnail(sThumb) oGuiElement.setDirectTvFanart() oGuiElement.setCat(6) oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'direct_epg', 'Guide tv Direct') oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'soir_epg', 'Guide tv Soir') oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'enregistrement', 'Enregistrement') oGui.createContexMenuFav(oGuiElement, oOutputParameterHandler) oGui.addFolder(oGuiElement, oOutputParameterHandler) else: oGui.addDir(SITE_IDENTIFIER, 'showWeb', sTitle, '', oOutputParameterHandler) progress_.VSclose(progress_) oGui.setEndOfDirectory()
def getHtml(sUrl, data=None): #S'occupe des requetes if 'firstonetv' in sUrl: cookies = GestionCookie().Readcookie('firstonetv') if 'myfree-tivi' and 'watch' in sUrl: #VSlog(data) cookies = GestionCookie().Readcookie('myfree_tivi') headers = { 'Host': 'www.myfree-tivi.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3', 'Referer': sUrl, 'X-CSRF-Token': data, 'Connection': 'keep-alive', 'Cookie': cookies, 'Content-Length': '0', 'TE': 'Trailers' } r = requests.post('https://www.myfree-tivi.com/getdata', headers=headers) elif 'firstonetv' and '/France/' in sUrl: #On passe les redirection aResult = re.findall('Live/.+?/*[^<>]+(?:-)([^"]+)', sUrl) idChannel = aResult[0] apiNumber = random.uniform(0.0000000000000000, 0.9999999999999999) url = 'https://www.firstonetv.net/api/?cacheFucker=' + str(apiNumber) oRequestHandler = cRequestHandler(url) oRequestHandler.setRequestType(1) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Cookie', cookies) oRequestHandler.addParameters('action', 'hiro') oRequestHandler.addParameters('result', 'get') data = oRequestHandler.request() hiro = unFuckFirst(data) #On decode Hiro sPattern = '"hiro":(.+?),"hash":"(.+?)","time":(.+?),' oParser = cParser() aResult = oParser.parse(hiro, sPattern) for aEntry in aResult[1]: hiro = aEntry[0] Hash = aEntry[1] time = aEntry[2] apiNumber = random.uniform(0.0000000000000000, 0.9999999999999999) url = 'https://www.firstonetv.net/api/?cacheFucker=' + str(apiNumber) oRequestHandler = cRequestHandler(url) oRequestHandler.setRequestType(1) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Cookie', cookies) oRequestHandler.addParameters('action', 'hiro') oRequestHandler.addParameters('result', hiro) oRequestHandler.addParameters('time', time) oRequestHandler.addParameters('hash', Hash) data = oRequestHandler.request() aResult = re.findall('"ctoken":"(.+?)"}', data) cToken = aResult[0] apiNumber = random.uniform(0.0000000000000000, 0.9999999999999999) url = 'https://www.firstonetv.net/api/?cacheFucker=' + str(apiNumber) oRequestHandler = cRequestHandler(url) oRequestHandler.setRequestType(1) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Cookie', cookies) oRequestHandler.addParameters('action', 'channel') oRequestHandler.addParameters('ctoken', cToken) oRequestHandler.addParameters('c', 'fr') oRequestHandler.addParameters('id', idChannel) oRequestHandler.addParameters('native_hls', '0') oRequestHandler.addParameters('unsecure_hls', '0') data = oRequestHandler.request() return data elif 'firstonetv' in sUrl: oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Host', 'www.firstonetv.net') oRequestHandler.addHeaderEntry('Cookie', cookies) data = oRequestHandler.request() return data if data == None and 'watch' in sUrl: oRequestHandler = cRequestHandler(sUrl) data = oRequestHandler.request() cookies = oRequestHandler.GetCookies() GestionCookie().SaveCookie('myfree_tivi', cookies) return data else: oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) if not data == None and 'watch' in sUrl: data = r.json() else: data = oRequestHandler.request() #VSlog(data) return data
def showMovies(sSearch=''): oGui = cGui() if sSearch: sUrl = sSearch else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sUrl = sUrl + "|X-Forwarded-For=89.237.187.6:8080" oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # .+? ([^<]+) sPattern = '<a href="([^<]+)" data-url=.+?oldtitle="([^<]+)" title="">.+?<img src="([^<]+)" class="mli-thumb" alt=.+?class="f-desc"><p>([^<]+)</p>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sTitle = str(aEntry[1]).decode("utf8") sTitle = cUtil().unescape(sTitle).encode("utf8") sTitle = sTitle.replace("مشاهدة", "").replace("مترجم", "").replace( "فيلم", "").replace("اون لاين", "").replace("WEB-DL", "").replace( "BRRip", "").replace("720p", "").replace("HD-TC", "").replace( "HDRip", "").replace("HD-CAM", "").replace( "DVDRip", "").replace("BluRay", "").replace( "1080p", "").replace("4K", "").replace( "All", "").replace("BDRip", "").replace( "HDCAM", "").replace("HDTC", "").replace( "HDTV", "").replace("WEBRip", "").replace( "HD", "").replace("720", "") siteUrl = URL_MAIN + str(aEntry[0]) sThumbnail = str(aEntry[2]) sInfo = str(aEntry[3]).decode("utf8") sInfo = cUtil().unescape(sInfo).encode("utf8") sInfo = '[COLOR yellow]' + sInfo + '[/COLOR]' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', siteUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumbnail', sThumbnail) oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumbnail, sInfo, oOutputParameterHandler) progress_.VSclose(progress_) # ([^<]+) .+? sPattern = "rel='nofollow' class='page larger' href='([^<]+)'>([^<]+)</a>" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sTitle = aEntry[1].decode("utf8") sTitle = cUtil().unescape(sTitle).encode("utf8") sTitle = "PAGE " + sTitle sTitle = '[COLOR red]' + sTitle + '[/COLOR]' siteUrl = URL_MAIN + str(aEntry[0]) sThumbnail = "" sInfo = "" oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', siteUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumbnail', sThumbnail) oGui.addMovie(SITE_IDENTIFIER, 'showMovies', sTitle, '', sThumbnail, sInfo, oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: oGui.setEndOfDirectory()
def showDailyList(): #On recupere les dernier playlist ajouter au site oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sHtmlContent = getHtml(sUrl) #On recupere le contenue de la page #VSlog(sHtmlContent) #VSlog(sUrl) if 'firstonetv' in sUrl: sPattern = '<div class="post-thumb">\s*<img src="(.+?)" alt="(.+?)">\s*<a href="(.+?)".+?>(?:\s*<img.+?\s*<.+?<b>(.+?)<.+?>(.+?)<.+?>.+?>(.+?)</text>.+?</b><br><br>(.+?)</span>|)' elif 'iptvsource.com' in sUrl: sPattern = '<h3 class="entry-title td-module-title"><a href="(.+?)" rel="bookmark" title="(.+?)"' elif 'iptvgratuit.com' in sUrl: sPattern = '<header class="entry-header">\s*<h2 class="entry-title">\s*<a href="(.+?)" rel="bookmark">(.+?)</a>' elif 'dailyiptvlist.com' in sUrl: sPattern = '</a><h2 class="post-title"><a href="(.+?)">(.+?)</a></h2><div class="excerpt"><p>.+?</p>' elif 'pavandayal' in sUrl: sPattern = '<p class="link" data-clipboard-text="(.+?)">(.+?)<' elif 'myfree-tivi' in sUrl: sPattern = '<img.+?src="(.+?)">\s*</a>\s*</div>\s*<div class="list-item-detals">\s*<a href="(.+?)" title="(.+?)">\s*<.+?\s*<hr>\s*<p class="list-item-text">(.+?)</p>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break if 'firstonetv' in sUrl: sThumb = 'https://www.firstonetv.net' + aEntry[0] sTitle = aEntry[1] sUrl2 = 'https://www.firstonetv.net' + aEntry[2] sDesc = ( '[COLOR skyblue]%s de %s a %s[/COLOR] \n [COLOR coral]Synopsis :[/COLOR] %s' ) % (aEntry[3], aEntry[4], aEntry[5], aEntry[6]) if 'pavandayal' in sUrl: sTitle = aEntry[1] elif not 'myfree-tivi' in sUrl and not 'firstonetv' in sUrl: sTitle = aEntry[1] if 'myfree-tivi' in sUrl and not 'firstonetv' in sUrl: sThumb = "https:" + aEntry[0] sUrl2 = 'https://www.myfree-tivi.com' + aEntry[1] sTitle = aEntry[2] sDesc = aEntry[3] elif not 'myfree-tivi' in sUrl and not 'firstonetv' in sUrl: sUrl2 = aEntry[0] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) if 'firstonetv' in sUrl: oOutputParameterHandler.addParameter('sDescription', sDesc) oOutputParameterHandler.addParameter('sThumbnail', sThumb) if 'myfree-tivi' in sUrl or 'firstonetv' in sUrl: oGui.addMovie(SITE_IDENTIFIER, 'showAllPlaylist', sTitle, '', sThumb, sDesc, oOutputParameterHandler) elif 'pavandayal' in sUrl: oGui.addDir(SITE_IDENTIFIER, 'showWeb', sTitle, 'tv.png', oOutputParameterHandler) else: oGui.addDir(SITE_IDENTIFIER, 'showAllPlaylist', sTitle, 'tv.png', oOutputParameterHandler) progress_.VSclose(progress_) sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showDailyList', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler) oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() if sSearch: sSearch = sSearch.replace(' ', '+') sUrl = sSearch else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') #oRequestHandler = cRequestHandler(sUrl) #sHtmlContent = oRequestHandler.request() sHtmlContent = SucurieBypass().GetHtml(sUrl) sPattern = 'class="item"> *<a href="([^<]+)">.+?<img src="([^<>"]+?)" alt="([^"]+?)".+?<span class="calidad2">(.+?)<\/span>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addNone(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) dialog = cConfig().createDialog(SITE_NAME) for aEntry in aResult[1]: cConfig().updateDialog(dialog, total) #dialog if dialog.iscanceled(): break sName = aEntry[2].replace(' en Streaming HD', '') sName = sName.replace(' Streaming HD', '') sName = sName.decode('utf8') sName = cUtil().unescape(sName) try: sName = sName.encode("utf-8") except: pass sTitle = sName + ' [' + aEntry[3] + ']' sUrl = aEntry[0] sThumbnail = aEntry[1] if sThumbnail.startswith('//'): sThumbnail = 'http:' + sThumbnail oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', str(sUrl)) oOutputParameterHandler.addParameter('sMovieTitle', sName) oOutputParameterHandler.addParameter('sThumbnail', str(sThumbnail)) sDisplayTitle = cUtil().DecoTitle(sTitle) if re.match('.+?saison [0-9]+', sTitle, re.IGNORECASE): oGui.addTV(SITE_IDENTIFIER, 'serieHosters', sDisplayTitle, '', sThumbnail, '', oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, 'films.png', sThumbnail, '', oOutputParameterHandler) cConfig().finishDialog(dialog) if not sSearch: sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory()
def showResultSearch(sSearch=''): oGui = cGui() oParser = cParser() UA = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0' post_data = {'k': sSearch} data = urllib.urlencode(post_data) oRequest = cRequestHandler('http://streamay.bz/search') oRequest.setRequestType(1) oRequest.addHeaderEntry('User-Agent', UA) oRequest.addParametersLine(data) sHtmlContent = oRequest.request() sHtmlContent = unicode(sHtmlContent, 'utf-8') sHtmlContent = unicodedata.normalize('NFD', sHtmlContent).encode( 'ascii', 'ignore').decode("unicode_escape") sHtmlContent = sHtmlContent.encode("utf-8") sHtmlContent = sHtmlContent.replace("\n", "") sHtmlContent = re.sub( '"img":"([^"]+)","synopsis":"([^"]+)"', '"synopsis":"\g<2>","img":"\g<1>"', sHtmlContent) #pattern en ordre img et syn inversé parfois sPattern = '{"result":{"id":".+?","title":"([^"]+)",.+?(?:"story"|"synopsis"):"(.+?)",*.+?(?:"img"|"banner"):"([^"]+)",.+?,"url":"([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): total = len(aResult[1]) dialog = cConfig().createDialog(SITE_NAME) for aEntry in aResult[1]: cConfig().updateDialog(dialog, total) if dialog.iscanceled(): break sTitle = aEntry[0] sTitle = cUtil().removeHtmlTags(sTitle) sSyn = aEntry[1] sUrl = aEntry[3] sThumb = URL_MAIN + 'cdn/img/' + aEntry[2] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumbnail', sThumb) if 'serie' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showSaisons', sTitle, '', sThumb, sSyn, oOutputParameterHandler) elif 'mangas' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showAnime', sTitle, '', sThumb, sSyn, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sSyn, oOutputParameterHandler) cConfig().finishDialog(dialog) sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addDir(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]', 'next.png', oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory()
def cutLink(sHtmlContent): oParser = cParser() sPattern = '">Lecteurs Disponibles :</span></h3>(.+?)<div id="extras">' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): return aResult[1][0]
class cPremiumHandler: def __init__(self, sHosterIdentifier): self.__sHosterIdentifier = sHosterIdentifier.lower() self.__sDisplayName = 'Premium mode' self.isLogin = False def isPremiumModeAvailable(self): bIsPremium = cConfig().getSetting('hoster_' + str(self.__sHosterIdentifier) + '_premium') if (bIsPremium == 'true'): cConfig().log("Utilise compte premium pour hoster " + str(self.__sHosterIdentifier)) return True cConfig().log("Utilise compte gratuit pour hoster: " + str(self.__sHosterIdentifier)) return False def getUsername(self): sUsername = cConfig().getSetting('hoster_' + str(self.__sHosterIdentifier) + '_username') return sUsername def getPassword(self): sPassword = cConfig().getSetting('hoster_' + str(self.__sHosterIdentifier) + '_password') return sPassword #----------------------- # Cookies gestion #------------------------ def DeleteCookie(self, Domain): print 'Effacement cookies' file = os.path.join(PathCache, 'Cookie_' + str(Domain) + '.txt') os.remove(os.path.join(PathCache, file)) def SaveCookie(self, Domain, data): Name = os.path.join(PathCache, 'Cookie_' + str(Domain) + '.txt') #save it file = open(Name, 'w') file.write(data) file.close() def Readcookie(self, Domain): Name = os.path.join(PathCache, 'Cookie_' + str(Domain) + '.txt') try: file = open(Name, 'r') data = file.read() file.close() except: return '' return data def AddCookies(self): cookies = self.Readcookie(self.__sHosterIdentifier) return 'Cookie=' + cookies def Authentificate(self): post_data = {} if 'uptobox' in self.__sHosterIdentifier: url = 'https://login.uptobox.com/logarithme' post_data['op'] = 'login' post_data['login'] = self.getUsername() post_data['password'] = self.getPassword() elif 'onefichier' in self.__sHosterIdentifier: url = 'https://1fichier.com/login.pl' post_data['mail'] = self.getUsername() post_data['pass'] = self.getPassword() post_data['lt'] = 'on' post_data['purge'] = 'on' post_data['valider'] = 'Send' elif 'uploaded' in self.__sHosterIdentifier: url = 'http://uploaded.net/io/login' post_data['id'] = self.getUsername() post_data['pw'] = self.getPassword() #si aucun de trouve on retourne else: return False #print url #print post_data req = urllib2.Request(url, urllib.urlencode(post_data), headers) try: response = urllib2.urlopen(req) except urllib2.URLError, e: if e.code == 403: #login denied cGui().showInfo(self.__sDisplayName, 'Authentification rate', 5) elif e.code == 502: #login denied cGui().showInfo(self.__sDisplayName, 'Authentification rate', 5) elif e.code == 234: #login denied cGui().showInfo(self.__sDisplayName, 'Authentification rate', 5) else: print e.code print e.reason self.isLogin = False return False sHtmlContent = response.read() head = response.headers response.close() #print head #fh = open('c:\\prem.txt', "w") #fh.write(sHtmlContent) #fh.close() if 'uptobox' in self.__sHosterIdentifier: if 'OK' in sHtmlContent: self.isLogin = True else: cGui().showInfo(self.__sDisplayName, 'Authentification rate', 5) return False elif 'onefichier' in self.__sHosterIdentifier: if 'You are logged in. This page will redirect you.' in sHtmlContent: self.isLogin = True else: cGui().showInfo(self.__sDisplayName, 'Authentification rate', 5) return False elif 'uploaded' in self.__sHosterIdentifier: if sHtmlContent == '': self.isLogin = True else: cGui().showInfo(self.__sDisplayName, 'Authentification rate', 5) return False else: return False #get cookie cookies = '' if 'Set-Cookie' in head: oParser = cParser() sPattern = '(?:^|,) *([^;,]+?)=([^;,\/]+?);' aResult = oParser.parse(str(head['Set-Cookie']), sPattern) #print aResult if (aResult[0] == True): for cook in aResult[1]: cookies = cookies + cook[0] + '=' + cook[1] + ';' #save cookie self.SaveCookie(self.__sHosterIdentifier, cookies) cGui().showInfo(self.__sDisplayName, 'Authentification reussie', 5) print 'Auhentification reussie' return True