Advertisement
Guest User

Untitled

a guest
Sep 11th, 2019
914
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.62 KB | None | 0 0
  1. #-*- coding: utf-8 -*-
  2. #Vstream https://github.com/Kodi-vStream/venom-xbmc-addons
  3. # Nimvon By fredterros
  4. from resources.lib.gui.hoster import cHosterGui #systeme de recherche pour l'hote
  5. from resources.lib.gui.gui import cGui #systeme d'affichage pour xbmc
  6. from resources.lib.handler.inputParameterHandler import cInputParameterHandler #entree des parametres
  7. from resources.lib.handler.outputParameterHandler import cOutputParameterHandler #sortie des parametres
  8. from resources.lib.handler.requestHandler import cRequestHandler #requete url
  9. from resources.lib.parser import cParser #recherche de code
  10. from resources.lib.comaddon import progress, VSlog #import du dialog progress
  11. from resources.lib.util import cUtil
  12. #import enumerate
  13. import re, unicodedata, urllib, urllib2
  14.  
  15. #from resources.lib.util import cUtil #outils pouvant etre utiles
  16. UA = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0'
  17. headers = {'User-Agent': UA}
  18. #Si vous créez une source et la deposez dans le dossier "sites" elle sera directement visible sous xbmc
  19.  
  20. SITE_IDENTIFIER = 'nimvon_com' #identifant (nom de votre fichier) remplacez les espaces et les . par _ AUCUN CARACTERE SPECIAL
  21. SITE_NAME = 'Nimvon' #nom que xbmc affiche
  22. SITE_DESC = 'Clear & Simply' #description courte de votre source
  23.  
  24. URL_MAIN = 'http://nimvon.com/' #url de votre source
  25.  
  26. #definis les url pour les catégories principale, ceci est automatique, si la definition est présente elle sera affichee.
  27. #LA RECHERCHE GLOBAL N'UTILE PAS showSearch MAIS DIRECTEMENT LA FONCTION INSCRITE DANS LA VARIABLE URL_SEARCH_*
  28. URL_SEARCH = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?searchword=', 'showMovies')
  29. #recherche global films
  30. #URL_SEARCH = (URL_MAIN + '?keyword=', 'showMovies')
  31. URL_SEARCH_MOVIES = (URL_SEARCH[0], 'showMovies')
  32. URL_SEARCH_SERIES = (URL_SEARCH[0], 'showMovies')
  33. FUNCTION_SEARCH = 'showMovies'
  34. # menu films existant dans l'acceuil (Home)
  35. MOVIE_NEWS = (URL_MAIN + 'v02kl1lpm7874d8f7s87/', 'showMovies') #films (derniers ajouts = trie par date)
  36. MOVIE_MOVIE = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php', 'showMovies') #films (load source)
  37. #MOVIE_HD = (URL_MAIN + 'url', 'showMovies') #films HD
  38. MOVIE_VIEWS = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=29&Itemid=8', 'showMovies') #films (les plus vus = populaire)
  39. #MOVIE_COMMENTS = (URL_MAIN + 'url', 'showMovies') #films (les plus commentés) (pas afficher sur HOME)
  40. #MOVIE_GENRES = (URL_MAIN + 'index.php?option=com_content&view=section&id=1&Itemid=6', 'showGenres') #films (les mieux notés)
  41. MOVIE_GENRES = (True, 'showGenres') #films genres
  42. #MOVIE_ANNEES = (True, 'showMovieYears') #films (par années)
  43. #menu supplementaire non gerer par l'acceuil
  44. #MOVIE_VF = (URL_MAIN + 'url', 'showMovies') #films VF
  45. #MOVIE_VOSTFR = (URL_MAIN + 'url', 'showMovies') #films VOSTFR
  46.  
  47. ANIM_ANIMS = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=2&Itemid=2', 'showMovies') #animés (load source)
  48.  
  49. SPORT_SPORTS = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=26&Itemid=4', 'showMovies') #Documentaire
  50.  
  51. SERIE_SERIES = (URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=3&Itemid=4', 'showMovies') #Séctacles
  52.  
  53. def load(): #fonction chargee automatiquement par l'addon l'index de votre navigation.
  54. oGui = cGui() #ouvre l'affichage
  55.  
  56. oOutputParameterHandler = cOutputParameterHandler() #appelle la fonction pour sortir un parametre
  57. oOutputParameterHandler.addParameter('siteUrl', URL_MAIN) # sortie du parametres siteUrl n'oubliez pas la Majuscule
  58. oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche', 'search.png', oOutputParameterHandler)
  59. #Ajoute lien dossier (identifant, function a attendre, nom, icone, parametre de sortie)
  60. #Puisque nous ne voulons pas atteindre une url on peut mettre ce qu'on veut dans le parametre siteUrl
  61.  
  62. oOutputParameterHandler = cOutputParameterHandler()
  63. oOutputParameterHandler.addParameter('siteUrl', MOVIE_GENRES[0])
  64. oGui.addDir(SITE_IDENTIFIER, MOVIE_GENRES[1], 'Catégories', 'genres.png', oOutputParameterHandler)
  65. #showGenres n'a pas besoin d'une url pour cette methode
  66.  
  67. oOutputParameterHandler = cOutputParameterHandler()
  68. oOutputParameterHandler.addParameter('siteUrl', MOVIE_MOVIE[0])
  69. oGui.addDir(SITE_IDENTIFIER, MOVIE_MOVIE[1], 'Films', 'films.png', oOutputParameterHandler)
  70.  
  71. oOutputParameterHandler = cOutputParameterHandler()
  72. oOutputParameterHandler.addParameter('siteUrl', MOVIE_NEWS[0])
  73. oGui.addDir(SITE_IDENTIFIER, MOVIE_NEWS[1], 'Films (Derniers ajouts)', 'news.png', oOutputParameterHandler)
  74. #ici la function showMovies a besoin d'une url ici le racourci MOVIE_NEWS
  75.  
  76. oOutputParameterHandler = cOutputParameterHandler()
  77. oOutputParameterHandler.addParameter('siteUrl', MOVIE_VIEWS[0])
  78. oGui.addDir(SITE_IDENTIFIER, MOVIE_VIEWS[1], 'Films (A l\'affiche)', 'views.png', oOutputParameterHandler)
  79.  
  80. oOutputParameterHandler = cOutputParameterHandler()
  81. oOutputParameterHandler.addParameter('siteUrl', ANIM_ANIMS[0])
  82. oGui.addDir(SITE_IDENTIFIER, ANIM_ANIMS[1], 'Animés (Tous)', 'comments.png', oOutputParameterHandler)
  83.  
  84. oOutputParameterHandler = cOutputParameterHandler()
  85. oOutputParameterHandler.addParameter('siteUrl', SPORT_SPORTS[0])
  86. oGui.addDir(SITE_IDENTIFIER, SPORT_SPORTS[1], 'Documentaires (tous)', 'notes.png', oOutputParameterHandler)
  87.  
  88. oOutputParameterHandler = cOutputParameterHandler()
  89. oOutputParameterHandler.addParameter('siteUrl', SERIE_SERIES[0])
  90. oGui.addDir(SITE_IDENTIFIER, SERIE_SERIES[1], 'Spéctacles (tous)', 'notes.png', oOutputParameterHandler)
  91.  
  92. oGui.setEndOfDirectory() #ferme l'affichage
  93.  
  94. def showSearch(): #fonction de recherche
  95. oGui = cGui()
  96.  
  97. sSearchText = oGui.showKeyBoard() #appelle le clavier xbmc
  98. if (sSearchText != False):
  99. sUrl = URL_SEARCH[0] + sSearchText#modifie l'url de recherche
  100. showMovies(sUrl) #appelle la fonction qui pourra lire la page de resultats
  101. oGui.setEndOfDirectory()
  102. return
  103.  
  104.  
  105. def Search2(): #fonction de recherche
  106. oGui = cGui()
  107.  
  108. #sSearchText = oGui.showKeyBoard() #appelle le clavier xbmc
  109. if (sSearch != ''):
  110. sUrl = URL_SEARCH[0] + sSearch.replace(' ', '+') + '&ordering=&searchphrase=all&Itemid=9&option=com_search'#modifie l'url de recherche
  111. showMovies(sUrl) #appelle la fonction qui pourra lire la page de resultats
  112. oGui.setEndOfDirectory()
  113. return
  114.  
  115.  
  116. def showGenres(): #affiche les genres
  117. oGui = cGui()
  118. #http://nimvon.com/v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=1:action-&Itemid=14&layout=default
  119. #juste a entrer les categories et les liens qui vont bien
  120. liste = []
  121. liste.append( ['Action', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=1:action-&Itemid=14&layout=default'] )
  122. liste.append( ['Aventure', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=4:aventure-&Itemid=15&layout=default'] )
  123. liste.append( ['Comédie', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=6:comedie-&Itemid=16&layout=default'] )
  124. liste.append( ['Drame', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=7:drame-&Itemid=17&layout=default'] )
  125. liste.append( ['Fantastic', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=8:fantastique-&Itemid=18&layout=default'] )
  126. liste.append( ['Horreur', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=9:horreur-&Itemid=19&layout=default'] )
  127. liste.append( ['Policier', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=10:policier-&Itemid=20&layout=default'] )
  128. liste.append( ['Science fiction', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=11:science-fiction-&Itemid=21&layout=default'] )
  129. liste.append( ['Thriller', URL_MAIN + 'v02kl1lpm7874d8f7s87/index.php?option=com_content&view=category&id=12:thriller-&Itemid=22&layout=default'] )
  130.  
  131. for sTitle, sUrl in liste: #boucle
  132.  
  133. oOutputParameterHandler = cOutputParameterHandler()
  134. oOutputParameterHandler.addParameter('siteUrl', sUrl) #sortie de l'url en parametre
  135. oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler)
  136. #ajouter un dossier vers la fonction showMovies avec le titre de chaque categorie.
  137.  
  138. oGui.setEndOfDirectory()
  139.  
  140.  
  141. def showMovies(sSearch=''):
  142. oGui = cGui() #ouvre l'affichage
  143. oParser = cParser()
  144.  
  145. if (sSearch != ''):
  146.  
  147. if ('&option=com_search' in sSearch):
  148. sUrl = sSearch
  149. sPattern = '<li>.+?<a href="([^"]+)".+?>(.+?)<font color=".+?">'
  150. else:
  151. sUrl = sSearch.replace(' ', '+') + '&ordering=&searchphrase=all&Itemid=9&option=com_search'
  152. showMovies(sUrl)
  153. #oGui.setEndOfDirectory()
  154. return
  155.  
  156. #oGui.addText(SITE_IDENTIFIER, '' + sUrl + '')
  157. #oGui.addText(SITE_IDENTIFIER, '' + sPattern + '')
  158. else:
  159. oInputParameterHandler = cInputParameterHandler()
  160. sUrl = oInputParameterHandler.getValue('siteUrl')
  161. sTitle2 = oInputParameterHandler.getValue('sMovieTitle')
  162.  
  163. if ('view=article&id=' in sUrl):
  164. sPattern = 'idtxtname=([^&]+)' #<a onclick=.+?='(.+?)'
  165. #sPattern = 'b\.php\?idtxtname=(.+?)\''
  166. else:
  167. #sPattern = '<a href="([^"]+)".+?>(.+?)<font color=".+?">'
  168. sPattern = '<a href="([^"]+)">([^<]+)<font color=".+?"><i>.+?</i></font></a>'
  169.  
  170. oRequestHandler = cRequestHandler(sUrl)
  171. sHtmlContent = oRequestHandler.request()
  172. #sHtmlContent = sHtmlContent.replace('<span style="list-style-type:none;">', '').replace('</span>', '')
  173. #pour faire simple recherche ce bout de code dans le code source de l'url
  174. #- "([^"]+)" je veux cette partie de code qui se trouve entre guillemets mais pas de guillemets dans la chaine
  175. #- .+? je ne veux pas cette partie et peux importe ceux qu'elle contient
  176. #- >(.+?)< je veux cette partie de code qui se trouve entre < et > mais il peut y avoir n'inporte quoi entre les 2.
  177. #- (https*://[^"]) je veux l'adresse qui commence par https ou http jusqu'au prochain guillemet.
  178. #
  179. #Pour tester vos Regex, vous pouvez utiliser le site https://regex101.com/ en mettant dans les modifiers "gmis"
  180. sHtmlContent=sHtmlContent.replace('<a href="#form1"','')
  181. #sHtmlContent=sHtmlContent.replace('src=','')
  182. aResult = oParser.parse(sHtmlContent, sPattern)
  183. #le plus simple et de faire un VSlog(str(aResult))
  184. #dans le fichier log d'xbmc vous pourrez voir un array de ce que recupere le script
  185. #et modifier sPattern si besoin
  186. #VSlog(str(aResult)) #Commenter ou supprimer cette ligne une fois fini
  187.  
  188. #dialog barre de progression
  189. #affiche une information si aucun resulat
  190. if (aResult[0] == False):
  191. oGui.addText(SITE_IDENTIFIER, 'Aucun Résultats')
  192.  
  193. if (aResult[0] == True):
  194. progress_ = progress().VScreate(SITE_NAME)
  195. total = len(aResult[1])
  196.  
  197. for aEntry in aResult[1]:
  198. progress_.VSupdate(progress_, total) #dialog update
  199. if progress_.iscanceled():
  200. break
  201.  
  202. if ('<img style' in aEntry[1]):
  203. continue
  204. #
  205. #L'array affiche vos info dans l'orde de sPattern en commencant a 0, attention dans ce cas la on recupere 6 information
  206. #Mais selon votre regex il ne peut y en avoir que 2 ou 3.
  207. #sLang = aEntry[3]
  208. #sHoster = aEntry[5]
  209. #Si vous avez des information dans aEntry Qualiter lang organiser un peux vos titre exemple.
  210. #Si vous pouvez la langue et la Qualite en MAJ ".upper()" vostfr.upper() = VOSTFR
  211. #sTitle = ('%s [COLOR coral]%s[/COLOR]') % (sTitle, sQual)
  212. #mettre les information de streaming entre [] et le reste entre () vstream s'occupe de la couleur automatiquement.
  213. #Utile que si les liens recupere ne commencent pas par (http://www.nomdusite.com/)
  214. #sUrl2 = URL_MAIN + sUrl2
  215. #sTest = showLL(sUrl2)
  216. #
  217. #if ( sTest != False):
  218. # sUrl2 = sTest
  219. # sTitle = sTest
  220. #
  221. # oOutputParameterHandler = cOutputParameterHandler()
  222. # oOutputParameterHandler.addParameter('Url', sUrl2) #sortie de l'url
  223. # oOutputParameterHandler.addParameter('Title', sTitle) #sortie du titre
  224. #oOutputParameterHandler.addParameter('sThumb', sThumb) #sortie du poster
  225.  
  226. if ('view=article&id=' in sUrl):
  227. sQual = 'HD'
  228. #sTitle = sTitle2
  229. sUrl2 = 'http://50.7.179.150//p/b.php?idtxtname=' + aResult[1][0] + '&t=e&vid=2'
  230. sUrl3 = 'http://50.7.179.150//p/b.php?idtxtname=' + aResult[1][0]
  231. #sUrl2 = aResult[1][0]
  232. #sTitle = sTitle2
  233. #sTitle = sTitle2 + ' - ' + aResult[1][0]
  234. #sTitle = unicode(sTitle2, 'utf-8')
  235. #sTitle = unicodedata.normalize('NFD', sTitle).encode('ascii', 'ignore').decode("unicode_escape")
  236. #sTitle = sTitle.encode("latin-1")
  237. sTitle = sTitle2
  238. sTitle3 = sTitle2
  239. sThumb = ''
  240. sDesc = ''
  241. oOutputParameterHandler = cOutputParameterHandler()
  242. oOutputParameterHandler.addParameter('siteUrl', sUrl2) #sortie de l'url
  243. oOutputParameterHandler.addParameter('sMovieTitle', sTitle) #sortie du titre
  244. oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
  245. oOutputParameterHandler = cOutputParameterHandler()
  246. oOutputParameterHandler.addParameter('siteUrl', sUrl3) #sortie de l'url
  247. oOutputParameterHandler.addParameter('sMovieTitle', sTitle3) #sortie du titre
  248. oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle3, '', sThumb, sDesc, oOutputParameterHandler)
  249. else:
  250. sQual = 'HD'
  251. #sTitle = aEntry[1]
  252. #sTitle = unicode(aEntry[1], 'utf-8')
  253. #sTitle = unicodedata.normalize('NFD', sTitle).encode('ascii', 'ignore').decode("unicode_escape")
  254. #sTitle = sTitle.encode("latin-1")
  255. sTitle = aEntry[1]
  256. sUrl2 = URL_MAIN[:-1] + aEntry[0]
  257. sThumb = ''
  258. sDesc = ''
  259. oOutputParameterHandler = cOutputParameterHandler()
  260. oOutputParameterHandler.addParameter('siteUrl', sUrl2)
  261. #oGui.addNext(SITE_IDENTIFIER, 'showMovies', sTitle, oOutputParameterHandler)
  262. oOutputParameterHandler.addParameter('sMovieTitle', sTitle) #sortie du titre
  263. oGui.addMovie(SITE_IDENTIFIER, 'showMovies', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
  264.  
  265.  
  266. #oGui.addTV(SITE_IDENTIFIER, 'showMovies2', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
  267. #addMovies pour sortir les films (identifiant, function, titre, icon, poster, description, sortie parametre)
  268.  
  269. #il existe aussi addMisc(identifiant, function, titre, icon, poster, description, sortie parametre)
  270. #la difference et pour les metadonner serie, films ou sans
  271.  
  272. progress_.VSclose(progress_) #fin du dialog
  273.  
  274. if not sSearch:
  275. sNextPage = __checkForNextPage(sHtmlContent) #cherche la page suivante
  276. if (sNextPage != False):
  277. oOutputParameterHandler = cOutputParameterHandler()
  278. oOutputParameterHandler.addParameter('siteUrl', sNextPage)
  279. oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]', oOutputParameterHandler)
  280. #Ajoute une entree pour le lien Next | pas de addMisc pas de poster et de description inutile donc
  281.  
  282. oGui.setEndOfDirectory() #ferme l'affichage
  283.  
  284.  
  285. def __checkForNextPage(sHtmlContent): #cherche la page suivante
  286. oParser = cParser()
  287. sPattern = 'href="([^"]+)" title="Suivant"'
  288. aResult = oParser.parse(sHtmlContent, sPattern)
  289.  
  290. if (aResult[0] == True):
  291. return URL_MAIN[:-1] + aResult[1][0]
  292.  
  293. return False
  294.  
  295.  
  296. def showHosters(): #recherche et affiche les hotes
  297. oGui = cGui() #ouvre l'affichage
  298. oInputParameterHandler = cInputParameterHandler() #apelle l'entree de parametre
  299. sUrl = oInputParameterHandler.getValue('siteUrl') #apelle siteUrl
  300. sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') #appelle le titre
  301. sThumb = oInputParameterHandler.getValue('sThumb') #appelle le poster
  302.  
  303. oRequestHandler = cRequestHandler(sUrl) #requete sur l'url
  304. sHtmlContent = oRequestHandler.request() #requete sur l'url
  305.  
  306. oParser = cParser()
  307. sPattern = 'file:"([^"]+)'
  308. #ici nous cherchons toute les sources iframe
  309.  
  310. aResult = oParser.parse(sHtmlContent, sPattern)
  311. #pensez a faire un VSlog(str(aResult)) pour verifier
  312. #i = 0
  313. #si un lien ne s'affiche pas peux etre que l'hote n'est pas supporte par l'addon
  314. #total = len(aResult[1])
  315. if (aResult[0] == True):
  316. #i = 360
  317. #total = len(aResult[1])
  318. for count,aEntry in enumerate(aResult[1]):
  319.  
  320. sHosterUrl = aEntry
  321. #total = len(aResult[1])
  322. oHoster = cHosterGui().checkHoster(sHosterUrl) #recherche l'hote dans l'addon
  323. if (oHoster != False):
  324. oHoster.setDisplayName(sMovieTitle) #nom affiche
  325. oHoster.setFileName(sMovieTitle) #idem
  326. #oHoster.setattr(sQual)
  327. cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
  328. #oGui.addText(SITE_IDENTIFIER, Qual)
  329. #i = i + 360
  330. #affiche le lien (oGui, oHoster, url du lien, poster)
  331. if count == 0:
  332. oGui.addText(SITE_IDENTIFIER, 'Qualité: SD : entre 360p et 720p')
  333. else:
  334. oGui.addText(SITE_IDENTIFIER, 'Qualité: HD : entre 720p et 1080p')
  335.  
  336. else:
  337. oGui.addText(SITE_IDENTIFIER, sHosterUrl)
  338.  
  339. else:
  340. oGui.addText(SITE_IDENTIFIER, 'Nothing')
  341.  
  342. oGui.setEndOfDirectory()
  343.  
  344. #fin
  345. #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