#-*- coding: utf-8 -*- #Vstream https://github.com/Kodi-vStream/venom-xbmc-addons # Ovni-crea from resources.lib.gui.hoster import cHosterGui from resources.lib.gui.gui import cGui from resources.lib.handler.inputParameterHandler import cInputParameterHandler from resources.lib.handler.outputParameterHandler import cOutputParameterHandler from resources.lib.handler.requestHandler import cRequestHandler from resources.lib.parser import cParser from resources.lib.comaddon import progress, VSlog from resources.lib.util import cUtil, Unquote import re, base64 from resources.lib.packer import cPacker SITE_IDENTIFIER = 'livetv' SITE_NAME = 'Live TV' SITE_DESC = 'Site pour regarder du sport en direct gratuitement' URL_MAIN = 'http://livetv.sx' URL_SEARCH = (URL_MAIN + '/frx/fanclubs/?q=', 'showMovies4') FUNCTION_SEARCH = 'showMovies4' SPORT_SPORTS = (URL_MAIN + '/frx/allupcoming/', 'showMovies') #Les matchs en directs #SPORT_SPORTSCLASS = (URL_MAIN + '/frx/calendar/411/', 'showClass')# Les classements NETS_GENRES = (True, 'showGenres') #Les clubs de football def load(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'http://venom/') oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Rechercher l\'équipe', 'search.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SPORT_SPORTS[0]) oGui.addDir(SITE_IDENTIFIER, SPORT_SPORTS[1], 'Les matchs en direct', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', NETS_GENRES[0]) oGui.addDir(SITE_IDENTIFIER, NETS_GENRES[1], 'Les clubs de foot (urlresolver requis)', 'genres.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showSearch(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = URL_SEARCH[0] + sSearchText showMovies4(sUrl) #showMovies4 car c'est pour afficher le club recherché' oGui.setEndOfDirectory() return def showGenres(): #affiche les clubs de foot oGui = cGui() liste = [] liste.append( ['PSG', URL_MAIN + '/frx/team/1_4_216_psg/fanclub/'] ) liste.append( ['Marseille (OM)', URL_MAIN + '/frx/team/1_310_383_marseille/fanclub/'] ) liste.append( ['Barcelone', URL_MAIN + '/frx/team/1_3_227_barcelona/fanclub/'] ) liste.append( ['Real-Madrid', URL_MAIN + '/frx/team/1_163_317_real_madrid/fanclub/'] ) liste.append( ['Marchester Utd', URL_MAIN + '/frx/team/1_350_421_manchester_utd/fanclub/'] ) liste.append( ['Chelsea', URL_MAIN + '/frx/team/1_351_397_chelsea/fanclub/'] ) liste.append( ['Bayern Munich', URL_MAIN + '/frx/team/1_5_227_bayern/fanclub/'] ) liste.append( ['Juventus', URL_MAIN + '/frx/team/1_244_365_juventus/fanclub/'] ) liste.append( ['Arsenal', URL_MAIN + '/frx/team/1_353_406_arsenal/fanclub/'] ) liste.append( ['Liverpool', URL_MAIN + '/frx/team/1_352_412_liverpool/fanclub/'] ) liste.append( ['Manchester City', URL_MAIN + '/frx/team/1_363_446_manchester_city/fanclub/'] ) liste.append( ['France', URL_MAIN + '/frx/team/1_77_258_france/fanclub/'] ) liste.append( ['Dortmund', URL_MAIN + '/frx/team/1_136_296_dortmund/fanclub/'] ) liste.append( ['Monaco', URL_MAIN + '/frx/team/1_319_383_monaco/fanclub/'] ) liste.append( ['Portugal', URL_MAIN + '/frx/team/1_79_269_portugal/fanclub/'] ) liste.append( ['Argentine', URL_MAIN + '/frx/team/1_62_253_argentina/fanclub/'] ) liste.append( ['Belgique', URL_MAIN + '/frx/team/1_83_270_belgium/fanclub/'] ) for sTitle, sUrl in liste: oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oGui.addDir(SITE_IDENTIFIER, 'showMenu', sTitle, 'genres.png', oOutputParameterHandler) #showMenu car c'est pour afficher les infos du club seul resultat est fonctionnel pour l'instant'' oGui.setEndOfDirectory() def showMovies(sSearch = ''):#affiche les catégories qui ont des lives' oGui = cGui() if sSearch: sUrl = sSearch else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = '([^"]+).+?\s*\s*\s*([^"]+)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) #VSlog(str(aResult)) 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 sUrl2 = aEntry[0] sUrl2 = URL_MAIN + sUrl2 sTitle = aEntry[1] try: sTitle = sTitle.decode("iso-8859-1", 'ignore') sTitle = cUtil().unescape(sTitle) sTitle = sTitle.encode("utf-8", 'ignore') except: pass oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl2', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oGui.addDir(SITE_IDENTIFIER, 'showMovies2', sTitle, 'sport.png', oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: oGui.setEndOfDirectory() def showMovies2(): #affiche les matchs en direct depuis la section showMovie oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl2 = oInputParameterHandler.getValue('siteUrl2') oRequestHandler = cRequestHandler(sUrl2) sHtmlContent = oRequestHandler.request() sPattern = '([^>]+)\s*(?:

|
)\s*([^>]+)\s*
\s*([^>]+)
' 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 sTitle2 = aEntry[1].replace('
', ' ') sUrl3 = aEntry[0] sThumb = '' #sLang = aEntry[3] sQual = aEntry[3] sHoster = aEntry[2] try: sTitle2 = sTitle2.decode("iso-8859-1", 'ignore') sHoster = sHoster.decode("iso-8859-1", 'ignore') sQual = sQual.decode("iso-8859-1", 'ignore') except: pass sTitle2 = cUtil().unescape(sTitle2) sTitle2 = sTitle2.encode("utf-8", 'ignore') sHoster = cUtil().unescape(sHoster) sHoster = sHoster.encode("utf-8", 'ignore') sQual = cUtil().unescape(sQual) sQual = sQual.encode("utf-8", 'ignore') try: sTitle2 = str(sTitle2, encoding="utf8", errors='ignore') sHoster = str(sHoster, encoding="utf8", errors='ignore') sQual = str(sQual, encoding="utf8", errors='ignore') except: pass sTitle2 = ('%s (%s) [COLOR yellow]%s[/COLOR]') % (sTitle2, sHoster, sQual) sUrl3 = URL_MAIN + sUrl3 #VSlog(sUrl3) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl3', sUrl3) oOutputParameterHandler.addParameter('sMovieTitle2', sTitle2) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addDir(SITE_IDENTIFIER, 'showMovies3', sTitle2, 'sport.png', oOutputParameterHandler) progress_.VSclose(progress_) oGui.setEndOfDirectory() def showMovies3(): #affiche les videos disponible du live oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl3 = oInputParameterHandler.getValue('siteUrl3') oRequestHandler = cRequestHandler(sUrl3) sHtmlContent = oRequestHandler.request() sMovieTitle2 = oInputParameterHandler.getValue('sMovieTitle2') sPattern = 'id=\'(.+?)\'' aResult2 = re.findall(sPattern3, sHtmlContent3) if aResult2: sHosterUrl3 = aResult2[0] sHosterUrl3 = "http://hdcast.pw/stream_jw2.php?id=" + sHosterUrl3 #VSlog(str(sHosterUrl3)) oRequestHandler = cRequestHandler(sHosterUrl3) sHtmlContent4 = oRequestHandler.request() sPattern4 = 'curl = "([^"]+)";' aResult3 = re.findall(sPattern4, sHtmlContent4) if aResult3: sHosterUrl = aResult3[0] sHosterUrl = base64.b64decode(sHosterUrl) #VSlog(sHosterUrl) if 'stream365' in url:#Terminé oRequestHandler = cRequestHandler(url) sHtmlContent2 = oRequestHandler.request() sPattern2 = 'var a[ 0-9]+="(.+?)"' aResult = re.findall(sPattern2, sHtmlContent2) if aResult: gameId = int(aResult[2]) + int(aResult[0]) - int(aResult[1]) - int(aResult[2]) sHosterUrl = 'http://91.192.80.210/edge0/xrecord/' + str(gameId) + '/prog_index.m3u8' if 'youtube' in url:#Je sais pas sPattern2 = 'youtube.com/embed/(.+?)[?]autoplay=1' aResult = re.findall(sPattern2, url) if aResult: video_id = aResult[0] #VSlog(video_id) #url1 = url.replace('/embed/', '/watch?v=').replace('?autoplay=1', '') url2 = 'https://youtube.com/get_video_info?video_id=' + video_id + '&sts=17488&hl=fr' oRequestHandler = cRequestHandler(url2) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent3 = Unquote(oRequestHandler.request()) sPattern3 = 'hlsManifestUrl":"(.+?)"' aResult = re.findall(sPattern3, sHtmlContent3) if aResult: sHosterUrl = aResult[0] + '|User-Agent=' + UA + '&Host=manifest.googlevideo.com' if 'streamup.me' in url:#Terminé oRequestHandler = cRequestHandler(url) sHtmlContent2 = oRequestHandler.request() sPattern2 = '' aResult = re.findall(sPattern2, sHtmlContent2) if aResult: Referer = url url = aResult[0] # decryptage plus bas (telerium) if 'telerium.tv' in url: #WIP oRequestHandler = cRequestHandler(url) if(Referer): oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', Referer) sHtmlContent2 = oRequestHandler.request() sPattern2 = '(\s*eval\s*\(\s*function(?:.|\s)+?{}\)\))' aResult = re.findall(sPattern2, sHtmlContent2) if aResult: str2 = aResult[0] if not str2.endswith(';'): str2 = str2 + ';' strs = cPacker().unpack(str2) # print strs # fh = open('f:\\test.txt', "w") # fh.write(strs) # fh.close() sPattern3 = '{url:window\.atob\((.+?)\)\.slice.+?\+window\.atob\((.+?)\)' aResult1 = re.findall(sPattern3, strs) if aResult1: m3u=aResult1[0][0] sPatternM3u = m3u+'="(.+?)"' m3u = re.findall(sPatternM3u, strs) m3u = base64.b64decode(m3u[0])[14:] token=aResult1[0][1] sPatterntoken = token+'="(.+?)"' token = re.findall(sPatterntoken, strs) token = base64.b64decode(token[0]) sHosterUrl = 'https://telerium.tv/'+m3u+token + '|referer='+url #TODO A TESTER if 'usasports.live' in url: oRequestHandler = cRequestHandler(url) sHtmlContent2 = oRequestHandler.request() sPattern1 = 'var sou = " (.+?)"' aResult = re.findall(sPattern1, sHtmlContent2) if aResult: sHosterUrl = aResult[0] #TODO A TESTER if 'wiz1' in url: oRequestHandler = cRequestHandler(url) sHtmlContent2 = oRequestHandler.request() sPattern1 = '"iframe" src="(.+?)"' aResult = re.findall(sPattern1, sHtmlContent2) if aResult: sHosterUrl = aResult[0] #TODO A TESTER if 'livesportone' in url : url = url.replace('livesportone.com', 'sportes.pw') oRequestHandler = cRequestHandler(url) sHtmlContent2 = oRequestHandler.request() sPattern2 = '