Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #-*- coding: utf-8 -*-
- #Vstream https://github.com/Kodi-vStream/venom-xbmc-addons
- # Nimvon By fredterros
- from resources.lib.gui.hoster import cHosterGui #systeme de recherche pour l'hote
- from resources.lib.gui.gui import cGui #systeme d'affichage pour xbmc
- from resources.lib.handler.inputParameterHandler import cInputParameterHandler #entree des parametres
- from resources.lib.handler.outputParameterHandler import cOutputParameterHandler #sortie des parametres
- from resources.lib.handler.requestHandler import cRequestHandler #requete url
- from resources.lib.parser import cParser #recherche de code
- from resources.lib.comaddon import progress, VSlog #import du dialog progress
- from resources.lib.util import cUtil
- #import enumerate
- import re, unicodedata, urllib, urllib2
- #from resources.lib.util import cUtil #outils pouvant etre utiles
- UA = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0'
- headers = {'User-Agent': UA}
- #Si vous créez une source et la deposez dans le dossier "sites" elle sera directement visible sous xbmc
- SITE_IDENTIFIER = 'nimvon_com' #identifant (nom de votre fichier) remplacez les espaces et les . par _ AUCUN CARACTERE SPECIAL
- SITE_NAME = 'Nimvon' #nom que xbmc affiche
- SITE_DESC = 'Clear & Simply' #description courte de votre source
- URL_MAIN = 'http://nimvon.com/' #url de votre source
- #definis les url pour les catégories principale, ceci est automatique, si la definition est présente elle sera affichee.
- #LA RECHERCHE GLOBAL N'UTILE PAS showSearch MAIS DIRECTEMENT LA FONCTION INSCRITE DANS LA VARIABLE URL_SEARCH_*
- URL_SEARCH = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?searchword=', 'showMovies')
- #recherche global films
- #URL_SEARCH = (URL_MAIN + '?keyword=', 'showMovies')
- URL_SEARCH_MOVIES = (URL_SEARCH[0], 'showMovies')
- URL_SEARCH_SERIES = (URL_SEARCH[0], 'showMovies')
- FUNCTION_SEARCH = 'showMovies'
- # menu films existant dans l'acceuil (Home)
- MOVIE_NEWS = (URL_MAIN + 'v02kl1lpm7874d8f7s87/', 'showMovies') #films (derniers ajouts = trie par date)
- MOVIE_MOVIE = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php', 'showMovies') #films (load source)
- #MOVIE_HD = (URL_MAIN + 'url', 'showMovies') #films HD
- MOVIE_VIEWS = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=29&Itemid=8', 'showMovies') #films (les plus vus = populaire)
- #MOVIE_COMMENTS = (URL_MAIN + 'url', 'showMovies') #films (les plus commentés) (pas afficher sur HOME)
- #MOVIE_GENRES = (URL_MAIN + 'index.php?option=com_content&view=section&id=1&Itemid=6', 'showGenres') #films (les mieux notés)
- MOVIE_GENRES = (True, 'showGenres') #films genres
- #MOVIE_ANNEES = (True, 'showMovieYears') #films (par années)
- #menu supplementaire non gerer par l'acceuil
- #MOVIE_VF = (URL_MAIN + 'url', 'showMovies') #films VF
- #MOVIE_VOSTFR = (URL_MAIN + 'url', 'showMovies') #films VOSTFR
- ANIM_ANIMS = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=2&Itemid=2', 'showMovies') #animés (load source)
- SPORT_SPORTS = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=26&Itemid=4', 'showMovies') #Documentaire
- SERIE_SERIES = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=3&Itemid=4', 'showMovies') #Séctacles
- def load(): #fonction chargee automatiquement par l'addon l'index de votre navigation.
- oGui = cGui() #ouvre l'affichage
- oOutputParameterHandler = cOutputParameterHandler() #appelle la fonction pour sortir un parametre
- oOutputParameterHandler.addParameter('siteUrl', URL_MAIN) # sortie du parametres siteUrl n'oubliez pas la Majuscule
- oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche', 'search.png', oOutputParameterHandler)
- #Ajoute lien dossier (identifant, function a attendre, nom, icone, parametre de sortie)
- #Puisque nous ne voulons pas atteindre une url on peut mettre ce qu'on veut dans le parametre siteUrl
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', MOVIE_GENRES[0])
- oGui.addDir(SITE_IDENTIFIER, MOVIE_GENRES[1], 'Catégories', 'genres.png', oOutputParameterHandler)
- #showGenres n'a pas besoin d'une url pour cette methode
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', MOVIE_MOVIE[0])
- oGui.addDir(SITE_IDENTIFIER, MOVIE_MOVIE[1], 'Films', 'films.png', oOutputParameterHandler)
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', MOVIE_NEWS[0])
- oGui.addDir(SITE_IDENTIFIER, MOVIE_NEWS[1], 'Films (Derniers ajouts)', 'news.png', oOutputParameterHandler)
- #ici la function showMovies a besoin d'une url ici le racourci MOVIE_NEWS
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', MOVIE_VIEWS[0])
- oGui.addDir(SITE_IDENTIFIER, MOVIE_VIEWS[1], 'Films (A l\'affiche)', 'views.png', oOutputParameterHandler)
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', ANIM_ANIMS[0])
- oGui.addDir(SITE_IDENTIFIER, ANIM_ANIMS[1], 'Animés (Tous)', 'comments.png', oOutputParameterHandler)
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', SPORT_SPORTS[0])
- oGui.addDir(SITE_IDENTIFIER, SPORT_SPORTS[1], 'Documentaires (tous)', 'notes.png', oOutputParameterHandler)
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', SERIE_SERIES[0])
- oGui.addDir(SITE_IDENTIFIER, SERIE_SERIES[1], 'Spéctacles (tous)', 'notes.png', oOutputParameterHandler)
- oGui.setEndOfDirectory() #ferme l'affichage
- def showSearch(): #fonction de recherche
- oGui = cGui()
- sSearchText = oGui.showKeyBoard() #appelle le clavier xbmc
- if (sSearchText != False):
- sUrl = URL_SEARCH[0] + sSearchText#modifie l'url de recherche
- showMovies(sUrl) #appelle la fonction qui pourra lire la page de resultats
- oGui.setEndOfDirectory()
- return
- def Search2(): #fonction de recherche
- oGui = cGui()
- #sSearchText = oGui.showKeyBoard() #appelle le clavier xbmc
- if (sSearch != ''):
- sUrl = URL_SEARCH[0] + sSearch.replace(' ', '+') + '&ordering=&searchphrase=all&Itemid=9&option=com_search'#modifie l'url de recherche
- showMovies(sUrl) #appelle la fonction qui pourra lire la page de resultats
- oGui.setEndOfDirectory()
- return
- def showGenres(): #affiche les genres
- oGui = cGui()
- #http://nimvon.com/v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=1:action-&Itemid=14&layout=default
- #juste a entrer les categories et les liens qui vont bien
- liste = []
- liste.append( ['Action', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=1:action-&Itemid=14&layout=default'] )
- liste.append( ['Aventure', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=4:aventure-&Itemid=15&layout=default'] )
- liste.append( ['Comédie', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=6:comedie-&Itemid=16&layout=default'] )
- liste.append( ['Drame', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=7:drame-&Itemid=17&layout=default'] )
- liste.append( ['Fantastic', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=8:fantastique-&Itemid=18&layout=default'] )
- liste.append( ['Horreur', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=9:horreur-&Itemid=19&layout=default'] )
- liste.append( ['Policier', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=10:policier-&Itemid=20&layout=default'] )
- liste.append( ['Science fiction', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=11:science-fiction-&Itemid=21&layout=default'] )
- liste.append( ['Thriller', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=12:thriller-&Itemid=22&layout=default'] )
- for sTitle, sUrl in liste: #boucle
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', sUrl) #sortie de l'url en parametre
- oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler)
- #ajouter un dossier vers la fonction showMovies avec le titre de chaque categorie.
- oGui.setEndOfDirectory()
- def showMovies(sSearch=''):
- oGui = cGui() #ouvre l'affichage
- oParser = cParser()
- if (sSearch != ''):
- if ('&option=com_search' in sSearch):
- sUrl = sSearch
- sPattern = '<li>.+?<a href="([^"]+)".+?>(.+?)<font color=".+?">'
- else:
- sUrl = sSearch.replace(' ', '+') + '&ordering=&searchphrase=all&Itemid=9&option=com_search'
- showMovies(sUrl)
- #oGui.setEndOfDirectory()
- return
- #oGui.addText(SITE_IDENTIFIER, '' + sUrl + '')
- #oGui.addText(SITE_IDENTIFIER, '' + sPattern + '')
- else:
- oInputParameterHandler = cInputParameterHandler()
- sUrl = oInputParameterHandler.getValue('siteUrl')
- sTitle2 = oInputParameterHandler.getValue('sMovieTitle')
- if ('view=article&id=' in sUrl):
- sPattern = 'idtxtname=([^&]+)' #<a onclick=.+?='(.+?)'
- #sPattern = 'b\.php\?idtxtname=(.+?)\''
- else:
- #sPattern = '<a href="([^"]+)".+?>(.+?)<font color=".+?">'
- sPattern = '<a href="([^"]+)">([^<]+)<font color=".+?"><i>.+?</i></font></a>'
- oRequestHandler = cRequestHandler(sUrl)
- sHtmlContent = oRequestHandler.request()
- #sHtmlContent = sHtmlContent.replace('<span style="list-style-type:none;">', '').replace('</span>', '')
- #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"
- sHtmlContent=sHtmlContent.replace('<a href="#form1"','')
- #sHtmlContent=sHtmlContent.replace('src=','')
- 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
- #dialog barre de progression
- #affiche une information si aucun resulat
- if (aResult[0] == False):
- oGui.addText(SITE_IDENTIFIER, 'Aucun Résultats')
- if (aResult[0] == True):
- progress_ = progress().VScreate(SITE_NAME)
- total = len(aResult[1])
- for aEntry in aResult[1]:
- progress_.VSupdate(progress_, total) #dialog update
- if progress_.iscanceled():
- break
- if ('<img style' in aEntry[1]):
- continue
- #
- #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.
- #sLang = aEntry[3]
- #sHoster = aEntry[5]
- #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 [COLOR coral]%s[/COLOR]') % (sTitle, sQual)
- #mettre les information de streaming entre [] et le reste entre () vstream s'occupe de la couleur automatiquement.
- #Utile que si les liens recupere ne commencent pas par (http://www.nomdusite.com/)
- #sUrl2 = URL_MAIN + sUrl2
- #sTest = showLL(sUrl2)
- #
- #if ( sTest != False):
- # sUrl2 = sTest
- # sTitle = sTest
- #
- # oOutputParameterHandler = cOutputParameterHandler()
- # oOutputParameterHandler.addParameter('Url', sUrl2) #sortie de l'url
- # oOutputParameterHandler.addParameter('Title', sTitle) #sortie du titre
- #oOutputParameterHandler.addParameter('sThumb', sThumb) #sortie du poster
- if ('view=article&id=' in sUrl):
- sQual = 'HD'
- #sTitle = sTitle2
- sUrl2 = 'http://50.7.179.150//p/b.php?idtxtname=' + aResult[1][0] + '&t=e&vid=2'
- sUrl3 = 'http://50.7.179.150//p/b.php?idtxtname=' + aResult[1][0]
- #sUrl2 = aResult[1][0]
- #sTitle = sTitle2
- #sTitle = sTitle2 + ' - ' + aResult[1][0]
- #sTitle = unicode(sTitle2, 'utf-8')
- #sTitle = unicodedata.normalize('NFD', sTitle).encode('ascii', 'ignore').decode("unicode_escape")
- #sTitle = sTitle.encode("latin-1")
- sTitle = sTitle2
- sTitle3 = sTitle2
- sThumb = ''
- sDesc = ''
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', sUrl2) #sortie de l'url
- oOutputParameterHandler.addParameter('sMovieTitle', sTitle) #sortie du titre
- oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', sUrl3) #sortie de l'url
- oOutputParameterHandler.addParameter('sMovieTitle', sTitle3) #sortie du titre
- oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle3, '', sThumb, sDesc, oOutputParameterHandler)
- else:
- sQual = 'HD'
- #sTitle = aEntry[1]
- #sTitle = unicode(aEntry[1], 'utf-8')
- #sTitle = unicodedata.normalize('NFD', sTitle).encode('ascii', 'ignore').decode("unicode_escape")
- #sTitle = sTitle.encode("latin-1")
- sTitle = aEntry[1]
- sUrl2 = URL_MAIN[:-1] + aEntry[0]
- sThumb = ''
- sDesc = ''
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', sUrl2)
- #oGui.addNext(SITE_IDENTIFIER, 'showMovies', sTitle, oOutputParameterHandler)
- oOutputParameterHandler.addParameter('sMovieTitle', sTitle) #sortie du titre
- oGui.addMovie(SITE_IDENTIFIER, 'showMovies', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
- #oGui.addTV(SITE_IDENTIFIER, 'showMovies2', 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
- if not sSearch:
- sNextPage = __checkForNextPage(sHtmlContent) #cherche la page suivante
- if (sNextPage != False):
- oOutputParameterHandler = cOutputParameterHandler()
- oOutputParameterHandler.addParameter('siteUrl', sNextPage)
- oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler)
- #Ajoute une entree pour le lien Next | pas de addMisc pas de poster et de description inutile donc
- oGui.setEndOfDirectory() #ferme l'affichage
- def __checkForNextPage(sHtmlContent): #cherche la page suivante
- oParser = cParser()
- sPattern = 'href="([^"]+)" title="Suivant"'
- aResult = oParser.parse(sHtmlContent, sPattern)
- if (aResult[0] == True):
- return URL_MAIN[:-1] + aResult[1][0]
- return False
- def showHosters(): #recherche et affiche les hotes
- oGui = cGui() #ouvre l'affichage
- oInputParameterHandler = cInputParameterHandler() #apelle l'entree de parametre
- sUrl = oInputParameterHandler.getValue('siteUrl') #apelle siteUrl
- sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') #appelle le titre
- sThumb = oInputParameterHandler.getValue('sThumb') #appelle le poster
- oRequestHandler = cRequestHandler(sUrl) #requete sur l'url
- sHtmlContent = oRequestHandler.request() #requete sur l'url
- oParser = cParser()
- sPattern = 'file:"([^"]+)'
- #ici nous cherchons toute les sources iframe
- aResult = oParser.parse(sHtmlContent, sPattern)
- #pensez a faire un VSlog(str(aResult)) pour verifier
- #i = 0
- #si un lien ne s'affiche pas peux etre que l'hote n'est pas supporte par l'addon
- #total = len(aResult[1])
- if (aResult[0] == True):
- #i = 360
- #total = len(aResult[1])
- for count,aEntry in enumerate(aResult[1]):
- sHosterUrl = aEntry
- #total = len(aResult[1])
- oHoster = cHosterGui().checkHoster(sHosterUrl) #recherche l'hote dans l'addon
- if (oHoster != False):
- oHoster.setDisplayName(sMovieTitle) #nom affiche
- oHoster.setFileName(sMovieTitle) #idem
- #oHoster.setattr(sQual)
- cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
- #oGui.addText(SITE_IDENTIFIER, Qual)
- #i = i + 360
- #affiche le lien (oGui, oHoster, url du lien, poster)
- if count == 0:
- oGui.addText(SITE_IDENTIFIER, 'Qualité: SD : entre 360p et 720p')
- else:
- oGui.addText(SITE_IDENTIFIER, 'Qualité: HD : entre 720p et 1080p')
- else:
- oGui.addText(SITE_IDENTIFIER, sHosterUrl)
- else:
- oGui.addText(SITE_IDENTIFIER, 'Nothing')
- oGui.setEndOfDirectory()
- #fin
- #Voila c'est un peux brouillon mais ça devrait aider un peu, n'hesitez pas a poser vos questions et meme a partager vos sources.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement