Advertisement
Guest User

Untitled

a guest
Aug 26th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Modula 3 37.10 KB | None | 0 0
  1. #-*- coding: utf-8 -*-
  2. #Venom.
  3. from resources.lib.config import cConfig
  4. from resources.lib.gui.hoster import cHosterGui
  5. from resources.lib.handler.rechercheHandler import cRechercheHandler
  6. from resources.lib.handler.hosterHandler import cHosterHandler
  7. from resources.lib.gui.gui import cGui
  8. from resources.lib.favourite import cFav
  9. from resources.lib.gui.guiElement import cGuiElement
  10. from resources.lib.handler.inputParameterHandler import cInputParameterHandler
  11. from resources.lib.handler.outputParameterHandler import cOutputParameterHandler
  12. from resources.lib.handler.requestHandler import cRequestHandler
  13. from resources.lib.parser import cParser
  14. from resources.lib.util import cUtil
  15. import urllib, unicodedata, re
  16. import xbmcgui
  17. import xbmc
  18. #import sqlalchemy
  19.  
  20. try:    import json
  21. except: import simplejson as json
  22.  
  23. SITE_IDENTIFIER = 'topimdb'
  24. SITE_NAME = '[COLOR orange]Top 1000 IMDb[/COLOR]'
  25. SITE_DESC = 'Base de données video.'
  26.  
  27. #doc de l'api http://docs.themoviedb.apiary.io/
  28.  
  29. URL_MAIN = 'http://imdb.com'
  30.  
  31. #API_KEY = '92ab39516970ab9d86396866456ec9b6'
  32. #API_VERS = '3'
  33. #API_URL = URL_MAIN+API_VERS
  34.  
  35. URL_SEARCH = (URL_MAIN + '/search/title?groups=top_1000&sort=user_rating,desc&start=%s', 'showMovies')
  36. #FUNCTION_SEARCH = 'showMovies'
  37.  
  38.  
  39. MOVIE_WORLD = (URL_MAIN + '/search/title?groups=top_1000&sort=user_rating,desc&start=1', 'showMovies')
  40. MOVIE_FR = (URL_MAIN + '/search/title?countries=fr&languages=fr&production_status=released&title_type=feature,tv_movie', 'showMovies')
  41. MOVIE_ACTORS = (URL_MAIN + '/list/ls000004615/', 'showMovies')
  42. MOVIE_GENRES = (True, 'showGenre')
  43.  
  44.  
  45.  
  46. POSTER_URL = 'https://ia.media-imdb.com/images/m/'
  47. #FANART_URL = 'https://image.tmdb.org/t/p/w780/'
  48. FANART_URL = 'https://ia.media-.imdb.com/images/m/'
  49. #FANART_URL = 'https://image.tmdb.org/t/p/original/'
  50.              
  51.        #runtime = ''
  52.        #runtime_match = re.search(r'<span class="runtime">(.+?) mins\.</span>', item, flags=(re.DOTALL | re.MULTILINE))
  53.        #if runtime_match:
  54.            #runtime = int(runtime_match.group(1)) * 60
  55.      
  56.  
  57. def unescape(text):
  58.    def fixup(m):
  59.        text = m.group(0)
  60.        if text[:2] == "&#":
  61.            # character reference
  62.            try:
  63.                if text[:3] == "&#x":
  64.                    return unichr(int(text[3:-1], 16))
  65.                else:
  66.                    return unichr(int(text[2:-1]))
  67.            except ValueError:
  68.                pass
  69.        else:
  70.            # named entity
  71.            try:
  72.                text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
  73.            except KeyError:
  74.                pass
  75.        return text # leave as is
  76.    return re.sub("&#?\w+;", fixup, text)
  77.  
  78. #https://api.themoviedb.org/3/movie/popular?api_key=92ab39516970ab9d86396866456ec9b6
  79.  
  80. #<views>551,504,503,508,515,50,51,500,550,560,501,572,573,574,570,571,505,511</views>
  81. #viewmode = 500 Film
  82. #viewmode = 503 Film + Information
  83. #viewmode = 50  Liste
  84.  
  85. def showSearch():
  86.    oGui = cGui()
  87.  
  88.    sSearchText = oGui.showKeyBoard()
  89.    if (sSearchText != False):
  90.        sSearchText = cUtil().urlEncode(sSearchText)
  91.        sUrl = 'http://imdb.com/search/title?groups=top_1000&sort=user_rating,desc&start=%s'+sSearchText
  92.        #sUrl = 'http://%s.imdb.com/search/title?title_type=feature,tv_movie&num_votes=1000,&production_status=released&languages=fr|1&sort=moviemeter,asc&count=40&start=%s', 'showMovies')
  93.  
  94.        resultSearch(sUrl)
  95.        oGui.setEndOfDirectory()
  96.        return
  97.  
  98. def showPage():
  99.    oGui = cGui()
  100.  
  101.    sSearchNum = oGui.showNumBoard()
  102.  
  103.    if (sSearchNum):
  104.  
  105.        oInputParameterHandler = cInputParameterHandler()
  106.        sUrl = oInputParameterHandler.getValue('siteUrlbase')
  107.        sMaxPage = oInputParameterHandler.getValue('MaxPage')
  108.      
  109.        sSearchNum = str(sSearchNum)
  110.      
  111.        if int(sSearchNum) > int (sMaxPage):
  112.            sSearchNum = sMaxPage
  113.          
  114.        sUrl = sUrl + str(sSearchNum)
  115.      
  116.        showMovies(sUrl)
  117.        oGui.setEndOfDirectory()
  118.        return
  119.  
  120.  
  121. def load():
  122.    oGui = cGui()
  123.  
  124.    oOutputParameterHandler = cOutputParameterHandler()
  125.    oOutputParameterHandler.addParameter('siteUrl', 'http://venom/')
  126.    oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche Film', 'search.png', oOutputParameterHandler)
  127.  
  128.    oOutputParameterHandler = cOutputParameterHandler()
  129.    oOutputParameterHandler.addParameter('siteUrl', MOVIE_WORLD[0])
  130.    oGui.addDir(SITE_IDENTIFIER, MOVIE_WORLD[1], 'Top Films Mondial', 'films.png', oOutputParameterHandler)
  131.  
  132.    oOutputParameterHandler = cOutputParameterHandler()
  133.    oOutputParameterHandler.addParameter('siteUrl', MOVIE_FR[0])
  134.    oGui.addDir(SITE_IDENTIFIER, MOVIE_FR[1], 'Top Films Francais', 'films.png', oOutputParameterHandler)
  135.  
  136.    oOutputParameterHandler = cOutputParameterHandler()
  137.    oOutputParameterHandler.addParameter('siteUrl', MOVIE_ACTORS[0])
  138.    oGui.addDir(SITE_IDENTIFIER, MOVIE_ACTORS[1], 'Top 250 - Meilleure Acteurs', 'films.png', oOutputParameterHandler)
  139.  
  140.    
  141.    oOutputParameterHandler = cOutputParameterHandler()
  142.    oOutputParameterHandler.addParameter('siteUrl', 'http://venom')
  143.    oGui.addDir(SITE_IDENTIFIER, 'showGenre', 'Films Genres', 'films_genres.png', oOutputParameterHandler)
  144.    
  145.    oGui.setEndOfDirectory()
  146.  
  147.    
  148. def showGenre():
  149.    oGui = cGui()
  150.    oInputParameterHandler = cInputParameterHandler()
  151.    sUrl = oInputParameterHandler.getValue('siteUrl')
  152.  
  153.    liste = []
  154.    liste.append( ['Action',URL_MAIN + '/search/title?genres=action&groups=top_1000&title_type=feature,tv_movie'] )
  155.    liste.append( ['Animation',URL_MAIN + '/search/title?genres=animation&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  156.    liste.append( ['Aventure',URL_MAIN + '/search/title?genres=adventure&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  157.    liste.append( ['Biographique',URL_MAIN + '/search/title?genres=biography&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )  
  158.    liste.append( ['Comedie',URL_MAIN + '/search/title?genres=comedy&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  159.    liste.append( ['Crime',URL_MAIN + '/search/title?genres=crime&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  160.    liste.append( ['Crime',URL_MAIN + '/search/title?genres=drama&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  161.    liste.append( ['Famille',URL_MAIN + '/search/title?genres=family&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )  
  162.    liste.append( ['Fantastique',URL_MAIN + '/search/title?genres=fantasy&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  163.    liste.append( ['Film Noir',URL_MAIN + '/search/title?genres=film_noir&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  164.    liste.append( ['Horreur',URL_MAIN + '/search/title?genres=horror&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  165.    liste.append( ['Historque',URL_MAIN + '/search/title?genres=history&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  166.    liste.append( ['Guerre',URL_MAIN + '/search/title?genres=war&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  167.    liste.append( ['Music',URL_MAIN + '/search/title?genres=music&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  168.    liste.append( ['Musical',URL_MAIN + '/search/title?genres=musical&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  169.    liste.append( ['Mystere',URL_MAIN + '/search/title?genres=mystery&gr/'] )
  170.    liste.append( ['Romance',URL_MAIN + 'search/title?genres=romance&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  171.    liste.append( ['Sci Fi',URL_MAIN + '/search/title?genres=sci_fi&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )    
  172.    liste.append( ['Sport',URL_MAIN + '/search/title?genres=sport&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie:
  173.     liste.append( ['Thriller',URL_MAIN + 'search/title?genres=thriller&groups=top_1000&languages=fr&production/'] )
  174.     liste.append( ['Wisterne',URL_MAIN + '//search/title?genres=western&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  175.                    
  176.     for sTitle,sUrl in liste:
  177.        
  178.         oOutputParameterHandler = cOutputParameterHandler()
  179.         oOutputParameterHandler.addParameter('siteUrl', sUrl)
  180.         oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler)
  181.        
  182.     oGui.setEndOfDirectory()
  183.    
  184. def showMovies(sSearch = ''):
  185.     oGui = cGui()
  186.    
  187.     if sSearch:
  188.         sUrl = sSearch
  189.     else:
  190.         oInputParameterHandler = cInputParameterHandler()
  191.         sUrl = oInputParameterHandler.getValue('siteUrl')
  192.         oRequestHandler = cRequestHandler(sUrl)
  193.         oRequestHandler.addHeaderEntry('Accept-Language','fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3')
  194.         sHtmlContent = oRequestHandler.request()
  195.         #oRequestHandler = cRequestHandler(sUrl)
  196.         #sHtmlContent = oRequestHandler.request()
  197.         #sHtmlContent = sHtmlContent.replace('<span class="runtime">', '').replace('</span>','')
  198.    
  199.     #fh = open('c:\\test.txt', "w")
  200.     #fh.write(sHtmlContent)
  201.     #fh.close()
  202.  
  203.     #sPattern = '<td class="number">(.*?)<\/td>.*?class="image">.*?<a href=".+?" title=".+?"><img src="(.*?)" alt="(.*?)" title=".*?".*?<a href="([^<]+)">.*?<\/a>'
  204.  
  205.     #sPattern = '<img.*?src="(.*?)"width="67".*?<span class="lister-item-index unbold text-primary">(.*?)<\/span> *<a href="(.*?)">(.*?)<\/a>'
  206.     #sPattern = '<span class="lister-item-index unbold text-primary">(.*?)<\/span>.*?<img.*?src="([^"]+)".*?<a href="\/title\/.*?">([^<]+)<\/a>'      #([^"]+)
  207.    #sPattern = '<span class="lister-item-index unbold text-primary">([^<]+)<\/span>.*?<img.*?src="([^"]+)"?:<a href="\/title\/.*?">([^<]+)<\/a>'  
  208.    #sPattern = '<a href="/title/(.*?)">.*?<img alt=".*?" class="loadlate" data-tconst=".*?" src="([^"]+).*?<span class="lister-item-index unbold text-primary">([^<]+)</span> *<a href="(.*?)">(.*?)<\/a>'
  209.    sPattern = '<img.*?src="([^"]+).*?<span class="lister-item-index unbold text-primary">([^<]+)<\/span> *<a href=".*?">([^<]+)<\/a>'  
  210.    #sPattern = '<img.*?src="(.*?)".*?<div class="number">(.*?)<\/div> *<b><a href=".*?">(.*?)<\/a><\/b>'
  211.    #sPattern = '<div class="number">(.*?)<\/div>.*?class="image">.*?<a href=".+?" title=".+?"><img src="(.*?)" alt="(.*?)" title=".*?".*?<a href="([^<]+)">.*?<\/a>'
  212.  
  213.    #sPattern = '<span class="lister-item-index unbold text-primary">(.*?)<\/span>.*?<img src="(.*?)".*?<a href="(.*?)">(.*?)<\/a>.*?<span class="lister-item-year text-muted unbold">(.*?)<\/span>">'  
  214.    oParser = cParser()
  215.    aResult = oParser.parse(sHtmlContent, sPattern)
  216.  
  217.    if (aResult[0] == True):
  218.        total = len(aResult[1])
  219.        dialog = cConfig().createDialog(SITE_NAME)
  220.        for aEntry in aResult[1]:
  221.            cConfig().updateDialog(dialog, total)
  222.            if dialog.iscanceled():
  223.                break
  224.  
  225.  
  226.            sTitle = unicode(aEntry[1], 'utf-8')#converti en unicode
  227.            sTitle = unicodedata.normalize('NFD', sTitle).encode('ascii', 'ignore')#vire accent
  228.            sTitle = unescape(str(aEntry[1]))
  229.            #sTitle = sTitle.encode( "utf-8")
  230.            sNumber = aEntry[1].replace('<span class="lister-item-index unbold text-primary">', '').replace('</span>', '')
  231.            #sRuntime = aEntry[0].replace('<span class="runtime">', '').replace('</span>', '')            
  232.            sTitle = '[COLOR azure]'+sNumber+'[/COLOR] ' + aEntry[2]
  233.            sMovieTitle=re.sub('(\[.*\])','', sTitle)
  234.            sMovieTitle = re.sub(r'[^a-z -]', ' ', sMovieTitle)
  235.            sTitle2=re.sub('(.*)(\[.*\])','\\1 [COLOR azure]\\2[/COLOR]', sTitle)
  236.            sThumbnail = str(aEntry[0])
  237.  
  238.            #sCom = unicode(aEntry[3], 'utf-8')#converti en unicode
  239.            #sCom = unicodedata.normalize('NFD', sCom).encode('ascii', 'ignore').decode("unicode_escape")#vire accent et '\'
  240.            #sCom = unescape(sCom)
  241.          
  242.            oOutputParameterHandler = cOutputParameterHandler()
  243.            oOutputParameterHandler.addParameter('siteUrl', ('none'))
  244.            oOutputParameterHandler.addParameter('sMovieTitle', str(aEntry[2]))
  245.            oOutputParameterHandler.addParameter('sThumbnail', str(aEntry[0]))            
  246.            oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumbnail, '', oOutputParameterHandler)
  247.          
  248.        cConfig().finishDialog(dialog)
  249.  
  250.        sNextPage = __checkForNextPage(sHtmlContent)
  251.        if (sNextPage != False):
  252.            oOutputParameterHandler = cOutputParameterHandler()
  253.            oOutputParameterHandler.addParameter('siteUrl', sNextPage)
  254.            oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]' , oOutputParameterHandler)
  255.  
  256.    oGui.setEndOfDirectory()
  257.    
  258. def __checkForNextPage(sHtmlContent):
  259.    sPattern = '<a href="([^"]+)" class="lister-page-next next-page" ref-marker="adv_nxt">Next »</a>'
  260.  
  261.    oParser = cParser()
  262.    aResult = oParser.parse(sHtmlContent, sPattern)
  263.    if (aResult[0] == True):
  264.        return aResult[1][0]
  265.  
  266.    return False
  267.  
  268. def showHosters():
  269.  
  270.    oInputParameterHandler = cInputParameterHandler()
  271.    sUrl = oInputParameterHandler.getValue('siteUrl')
  272.    sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
  273.    sThumbnail = oInputParameterHandler.getValue('sThumbnail')
  274.  
  275.    sExtraTitle = ''
  276.    #si c'est une serie
  277.     if sUrl != 'none':
  278.         sExtraTitle = sUrl.split('|')[1]
  279.         sMovieTitle = sUrl.split('|')[0]
  280.      
  281.     #nettoyage du nom pr la recherche
  282.     #print 'avant ' + sMovieTitle
  283.     sMovieTitle = unicode(sMovieTitle, 'utf-8')#converti en unicode pour aider aux convertions
  284.     sMovieTitle = unicodedata.normalize('NFD', sMovieTitle).encode('ascii', 'ignore').decode("unicode_escape")#vire accent et '\'
  285.     sMovieTitle = sMovieTitle.encode("utf-8").lower() #on repasse en utf-8
  286.    
  287.     sMovieTitle = re.sub('\(.+?\)',' ', sMovieTitle) #vire les tags entre parentheses
  288.    
  289.     #modif venom si le titre comporte un - il doit le chercher
  290.     sMovieTitle = re.sub(r'[^a-z -]', ' ', sMovieTitle) #vire les caracteres a la con qui peuvent trainer
  291.    
  292.     sMovieTitle = re.sub('( |^)(le|la|les|du|au|a|l)( |$)',' ', sMovieTitle) #vire les articles
  293.  
  294.     sMovieTitle = re.sub(' +',' ',sMovieTitle) #vire les espaces multiples et on laisse les espaces sans modifs car certains codent avec %20 d'autres avec +
  295.    #print 'apres ' + sMovieTitle
  296.  
  297.    dialog3 = xbmcgui.Dialog()
  298.    ret = dialog3.select('Recherche',['Vstream','zone_telechargement','film_streaming','kepliz','Movieshd'])
  299.  
  300.    if ret == 0:
  301.        VstreamSearch(sMovieTitle)
  302.    elif ret == 1:
  303.        zone_telechargementSearch(sMovieTitle)
  304.    elif ret == 2:
  305.        film_streamingSearch(sMovieTitle + sExtraTitle)
  306.    elif ret == 3:
  307.        keplizSearch(sMovieTitle + sExtraTitl)
  308.    elif ret == 4:
  309.        movieshdSearch(sMovieTitle + sExtraTitle)
  310.        
  311. def VstreamSearch(sMovieTitle):
  312.    
  313.    oGui = cGui()
  314.    oInputParameterHandler = cInputParameterHandler()
  315.    sUrl = oInputParameterHandler.getValue('siteUrl')
  316.    
  317.    #Type de recherche
  318.    sDisp = oInputParameterHandler.getValue('disp')
  319.  
  320.    if not(sDisp):
  321.        sDisp = 'search1'
  322.        if sUrl != 'none':
  323.            sDisp = 'search2'
  324.    
  325.    oHandler = cRechercheHandler()
  326.    oHandler.setText(sMovieTitle)
  327.    oHandler.setDisp(sDisp)
  328.    aPlugins = oHandler.getAvailablePlugins()
  329.                
  330.    oGui.setEndOfDirectory()        
  331.  
  332. def zone_telechargementSearch(sMovieTitle):
  333.    oGui = cGui()
  334.  
  335.    exec "from resources.sites import zone_telechargement_com as search"
  336.    sSearchText = oGui.showKeyBoard()
  337.    if (sSearchText != False):
  338.        sUrl = URL_SEARCH_MOVIES[0] + sSearchText +'&tab=all&orderby_by=popular&orderby_order=desc&displaychangeto=thumb'
  339.        showMovies(sUrl)
  340.        oGui.setEndOfDirectory()
  341.        return    
  342.  
  343. def film_streamingSearch(sMovieTitle):
  344.    oGui = cGui()
  345.  
  346.    exec "from resources.sites import film_streaming_co as search"
  347.    #sSearchText = oGui.showKeyBoard()
  348.    #title = (_("Enter search criteria")), text = searchTitle, is_dialog=True)
  349.  
  350.   # if (sSearchText != False):
  351.        #sSearchText = cUtil().urlEncode(sSearchText)    
  352.    sUrl = ('(http://www.film-streaming.co/' + sMovieTitle)
  353.    sUrl = URL_SEARCH[0] + sSearchText
  354.    resultSearch(sUrl)        
  355.    searchUrl = "search.php?movie=", ('resultSearch', sUrl)
  356.    exec "searchUrl"
  357.  
  358.    oGui.setEndOfDirectory()
  359.  
  360.  
  361.  
  362. def keplizSearch(sMovieTitle):
  363.    oGui = cGui()
  364.  
  365.    exec "from resources.sites import kepliz_com as search"
  366.    sSearchText = oGui.showKeyBoard()
  367.    #title = (_("Enter search criteria")), text = searchTitle, is_dialog=True)
  368.  
  369.    if (sSearchText != False):
  370.        sSearchText = cUtil().urlEncode(sSearchText)    
  371.        sUrl = ('(http://www.film-streaming.co/' + sMovieTitle)
  372.        searchUrl = "search.php?movie=", ('resultSearch', sUrl)
  373.    exec "searchUrl"
  374.  
  375.    oGui.setEndOfDirectory()
  376.  
  377.  
  378. def movieshdSearch(sMovieTitle):
  379.    oGui = cGui()
  380.  
  381.    exec "from resources.sites import movieshd.tv as search"
  382.    sSearchText = oGui.showKeyBoard()
  383.    #title = (_("Enter search criteria")), text = searchTitle, is_dialog=True)
  384.  
  385.    if (sSearchText != False):
  386.        sSearchText = cUtil().urlEncode(sSearchText)    
  387.        sUrl = ('(http://www.film-streaming.co/' + sMovieTitle)
  388.        searchUrl = "search.php?movie=", ('resultSearch', sUrl)
  389.    exec "searchUrl"
  390.  
  391.    oGui.setEndOfDirectory()
  392.          
  393. def addMoviedb(sId, sFunction, sLabel, sIcon, sThumbnail, fanart, oOutputParameterHandler = ''):
  394.  
  395.    #addMoviedb(oGui, SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumbnail, sFanart, oOutputParameterHandler)
  396.    oGui = cGui()
  397.    oGuiElement = cGuiElement()
  398.    oGuiElement.setSiteName(sId)
  399.    oGuiElement.setFunction(sFunction)
  400.    oGuiElement.setTitle(sLabel)
  401.    #oGuiElement.setIcon(sIcon)
  402.    oGuiElement.setMeta(0)
  403.    #oGuiElement.setThumbnail(sThumbnail)
  404.    #oGuiElement.setFanart(fanart)
  405.  
  406.    #cGui.addFolder(oGuiElement, oOutputParameterHandler)
  407.    oGui.addFolder(oGuiElement, oOutputParameterHandler, False)#-*- coding: utf-8 -*-
  408. #Venom.
  409. from resources.lib.config import cConfig
  410. from resources.lib.gui.hoster import cHosterGui
  411. from resources.lib.handler.rechercheHandler import cRechercheHandler
  412. from resources.lib.handler.hosterHandler import cHosterHandler
  413. from resources.lib.gui.gui import cGui
  414. from resources.lib.favourite import cFav
  415. from resources.lib.gui.guiElement import cGuiElement
  416. from resources.lib.handler.inputParameterHandler import cInputParameterHandler
  417. from resources.lib.handler.outputParameterHandler import cOutputParameterHandler
  418. from resources.lib.handler.requestHandler import cRequestHandler
  419. from resources.lib.parser import cParser
  420. from resources.lib.util import cUtil
  421. import urllib, unicodedata, re
  422. import xbmcgui
  423. import xbmc
  424. #import sqlalchemy
  425.  
  426. try:    import json
  427. except: import simplejson as json
  428.  
  429. SITE_IDENTIFIER = 'topimdb'
  430. SITE_NAME = '[COLOR orange]Top 1000 IMDb[/COLOR]'
  431. SITE_DESC = 'Base de données video.'
  432.  
  433. #doc de l'api http://docs.themoviedb.apiary.io/
  434.  
  435. URL_MAIN = 'http://imdb.com'
  436.  
  437. #API_KEY = '92ab39516970ab9d86396866456ec9b6'
  438. #API_VERS = '3'
  439. #API_URL = URL_MAIN+API_VERS
  440.  
  441. URL_SEARCH = (URL_MAIN + '/search/title?groups=top_1000&sort=user_rating,desc&start=%s', 'showMovies')
  442. #FUNCTION_SEARCH = 'showMovies'
  443.  
  444.  
  445. MOVIE_WORLD = (URL_MAIN + '/search/title?groups=top_1000&sort=user_rating,desc&start=1', 'showMovies')
  446. MOVIE_FR = (URL_MAIN + '/search/title?countries=fr&languages=fr&production_status=released&title_type=feature,tv_movie', 'showMovies')
  447. MOVIE_ACTORS = (URL_MAIN + '/list/ls000004615/', 'showMovies')
  448. MOVIE_GENRES = (True, 'showGenre')
  449.  
  450.  
  451.  
  452. POSTER_URL = 'https://ia.media-imdb.com/images/m/'
  453. #FANART_URL = 'https://image.tmdb.org/t/p/w780/'
  454. FANART_URL = 'https://ia.media-.imdb.com/images/m/'
  455. #FANART_URL = 'https://image.tmdb.org/t/p/original/'
  456.                
  457.         #runtime = ''
  458.         #runtime_match = re.search(r'<span class="runtime">(.+?) mins\.</span>', item, flags=(re.DOTALL | re.MULTILINE))
  459.         #if runtime_match:
  460.             #runtime = int(runtime_match.group(1)) * 60
  461.        
  462.  
  463. def unescape(text):
  464.     def fixup(m):
  465.         text = m.group(0)
  466.         if text[:2] == "&#":
  467.             # character reference
  468.             try:
  469.                 if text[:3] == "&#x":
  470.                     return unichr(int(text[3:-1], 16))
  471.                 else:
  472.                     return unichr(int(text[2:-1]))
  473.             except ValueError:
  474.                 pass
  475.         else:
  476.             # named entity
  477.             try:
  478.                 text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
  479.             except KeyError:
  480.                 pass
  481.         return text # leave as is
  482.     return re.sub("&#?\w+;", fixup, text)
  483.    
  484. #https://api.themoviedb.org/3/movie/popular?api_key=92ab39516970ab9d86396866456ec9b6
  485.  
  486. #<views>551,504,503,508,515,50,51,500,550,560,501,572,573,574,570,571,505,511</views>
  487. #viewmode = 500 Film
  488. #viewmode = 503 Film + Information
  489. #viewmode = 50  Liste
  490.  
  491. def showSearch():
  492.     oGui = cGui()
  493.  
  494.     sSearchText = oGui.showKeyBoard()
  495.     if (sSearchText != False):
  496.         sSearchText = cUtil().urlEncode(sSearchText)
  497.         sUrl = 'http://imdb.com/search/title?groups=top_1000&sort=user_rating,desc&start=%s'+sSearchText
  498.         #sUrl = 'http://%s.imdb.com/search/title?title_type=feature,tv_movie&num_votes=1000,&production_status=released&languages=fr|1&sort=moviemeter,asc&count=40&start=%s', 'showMovies')
  499.  
  500.         resultSearch(sUrl)
  501.         oGui.setEndOfDirectory()
  502.         return
  503.  
  504. def showPage():
  505.     oGui = cGui()
  506.  
  507.     sSearchNum = oGui.showNumBoard()
  508.    
  509.     if (sSearchNum):
  510.  
  511.         oInputParameterHandler = cInputParameterHandler()
  512.         sUrl = oInputParameterHandler.getValue('siteUrlbase')
  513.         sMaxPage = oInputParameterHandler.getValue('MaxPage')
  514.        
  515.         sSearchNum = str(sSearchNum)
  516.        
  517.         if int(sSearchNum) > int (sMaxPage):
  518.             sSearchNum = sMaxPage
  519.            
  520.         sUrl = sUrl + str(sSearchNum)
  521.        
  522.         showMovies(sUrl)
  523.         oGui.setEndOfDirectory()
  524.         return
  525.  
  526.  
  527. def load():
  528.     oGui = cGui()
  529.    
  530.     oOutputParameterHandler = cOutputParameterHandler()
  531.     oOutputParameterHandler.addParameter('siteUrl', 'http://venom/')
  532.     oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche Film', 'search.png', oOutputParameterHandler)
  533.  
  534.     oOutputParameterHandler = cOutputParameterHandler()
  535.     oOutputParameterHandler.addParameter('siteUrl', MOVIE_WORLD[0])
  536.     oGui.addDir(SITE_IDENTIFIER, MOVIE_WORLD[1], 'Top Films Mondial', 'films.png', oOutputParameterHandler)
  537.  
  538.     oOutputParameterHandler = cOutputParameterHandler()
  539.     oOutputParameterHandler.addParameter('siteUrl', MOVIE_FR[0])
  540.     oGui.addDir(SITE_IDENTIFIER, MOVIE_FR[1], 'Top Films Francais', 'films.png', oOutputParameterHandler)
  541.  
  542.     oOutputParameterHandler = cOutputParameterHandler()
  543.     oOutputParameterHandler.addParameter('siteUrl', MOVIE_ACTORS[0])
  544.     oGui.addDir(SITE_IDENTIFIER, MOVIE_ACTORS[1], 'Top 250 - Meilleure Acteurs', 'films.png', oOutputParameterHandler)
  545.  
  546.    
  547.     oOutputParameterHandler = cOutputParameterHandler()
  548.     oOutputParameterHandler.addParameter('siteUrl', 'http://venom')
  549.     oGui.addDir(SITE_IDENTIFIER, 'showGenre', 'Films Genres', 'films_genres.png', oOutputParameterHandler)
  550.    
  551.     oGui.setEndOfDirectory()
  552.  
  553.    
  554. def showGenre():
  555.     oGui = cGui()
  556.     oInputParameterHandler = cInputParameterHandler()
  557.     sUrl = oInputParameterHandler.getValue('siteUrl')
  558.  
  559.     liste = []
  560.     liste.append( ['Action',URL_MAIN + '/search/title?genres=action&groups=top_1000&title_type=feature,tv_movie'] )
  561.     liste.append( ['Animation',URL_MAIN + '/search/title?genres=animation&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  562.     liste.append( ['Aventure',URL_MAIN + '/search/title?genres=adventure&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  563.     liste.append( ['Biographique',URL_MAIN + '/search/title?genres=biography&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )  
  564.     liste.append( ['Comedie',URL_MAIN + '/search/title?genres=comedy&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  565.     liste.append( ['Crime',URL_MAIN + '/search/title?genres=crime&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  566.     liste.append( ['Crime',URL_MAIN + '/search/title?genres=drama&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  567.     liste.append( ['Famille',URL_MAIN + '/search/title?genres=family&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )  
  568.     liste.append( ['Fantastique',URL_MAIN + '/search/title?genres=fantasy&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  569.     liste.append( ['Film Noir',URL_MAIN + '/search/title?genres=film_noir&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  570.     liste.append( ['Horreur',URL_MAIN + '/search/title?genres=horror&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  571.     liste.append( ['Historque',URL_MAIN + '/search/title?genres=history&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  572.     liste.append( ['Guerre',URL_MAIN + '/search/title?genres=war&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  573.     liste.append( ['Music',URL_MAIN + '/search/title?genres=music&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  574.     liste.append( ['Musical',URL_MAIN + '/search/title?genres=musical&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  575.     liste.append( ['Mystere',URL_MAIN + '/search/title?genres=mystery&gr/'] )
  576.     liste.append( ['Romance',URL_MAIN + 'search/title?genres=romance&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  577.     liste.append( ['Sci Fi',URL_MAIN + '/search/title?genres=sci_fi&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )    
  578.     liste.append( ['Sport',URL_MAIN + '/search/title?genres=sport&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie:
  579.    liste.append( ['Thriller',URL_MAIN + 'search/title?genres=thriller&groups=top_1000&languages=fr&production/'] )
  580.    liste.append( ['Wisterne',URL_MAIN + '//search/title?genres=western&groups=top_1000&languages=fr&production_status=released&title_type=feature,tv_movie/'] )
  581.                    
  582.    for sTitle,sUrl in liste:
  583.        
  584.        oOutputParameterHandler = cOutputParameterHandler()
  585.        oOutputParameterHandler.addParameter('siteUrl', sUrl)
  586.        oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler)
  587.      
  588.    oGui.setEndOfDirectory()
  589.    
  590. def showMovies(sSearch = ''):
  591.    oGui = cGui()
  592.  
  593.    if sSearch:
  594.        sUrl = sSearch
  595.    else:
  596.        oInputParameterHandler = cInputParameterHandler()
  597.        sUrl = oInputParameterHandler.getValue('siteUrl')
  598.        oRequestHandler = cRequestHandler(sUrl)
  599.        oRequestHandler.addHeaderEntry('Accept-Language','fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3')
  600.        sHtmlContent = oRequestHandler.request()
  601.        #oRequestHandler = cRequestHandler(sUrl)
  602.        #sHtmlContent = oRequestHandler.request()
  603.        #sHtmlContent = sHtmlContent.replace('<span class="runtime">', '').replace('</span>','')
  604.  
  605.    #fh = open('c:\\test.txt', "w")
  606.    #fh.write(sHtmlContent)
  607.    #fh.close()
  608.  
  609.    #sPattern = '<td class="number">(.*?)<\/td>.*?class="image">.*?<a href=".+?" title=".+?"><img src="(.*?)" alt="(.*?)" title=".*?".*?<a href="([^<]+)">.*?<\/a>'
  610.  
  611.    #sPattern = '<img.*?src="(.*?)"width="67".*?<span class="lister-item-index unbold text-primary">(.*?)<\/span> *<a href="(.*?)">(.*?)<\/a>'
  612.    #sPattern = '<span class="lister-item-index unbold text-primary">(.*?)<\/span>.*?<img.*?src="([^"]+)".*?<a href="\/title\/.*?">([^<]+)<\/a>'      #([^"]+)
  613.     #sPattern = '<span class="lister-item-index unbold text-primary">([^<]+)<\/span>.*?<img.*?src="([^"]+)"?:<a href="\/title\/.*?">([^<]+)<\/a>'  
  614.     #sPattern = '<a href="/title/(.*?)">.*?<img alt=".*?" class="loadlate" data-tconst=".*?" src="([^"]+).*?<span class="lister-item-index unbold text-primary">([^<]+)</span> *<a href="(.*?)">(.*?)<\/a>'
  615.     sPattern = '<img.*?src="([^"]+).*?<span class="lister-item-index unbold text-primary">([^<]+)<\/span> *<a href=".*?">([^<]+)<\/a>'  
  616.     #sPattern = '<img.*?src="(.*?)".*?<div class="number">(.*?)<\/div> *<b><a href=".*?">(.*?)<\/a><\/b>'
  617.     #sPattern = '<div class="number">(.*?)<\/div>.*?class="image">.*?<a href=".+?" title=".+?"><img src="(.*?)" alt="(.*?)" title=".*?".*?<a href="([^<]+)">.*?<\/a>'
  618.  
  619.     #sPattern = '<span class="lister-item-index unbold text-primary">(.*?)<\/span>.*?<img src="(.*?)".*?<a href="(.*?)">(.*?)<\/a>.*?<span class="lister-item-year text-muted unbold">(.*?)<\/span>">'  
  620.     oParser = cParser()
  621.     aResult = oParser.parse(sHtmlContent, sPattern)
  622.    
  623.     if (aResult[0] == True):
  624.         total = len(aResult[1])
  625.         dialog = cConfig().createDialog(SITE_NAME)
  626.         for aEntry in aResult[1]:
  627.             cConfig().updateDialog(dialog, total)
  628.             if dialog.iscanceled():
  629.                 break
  630.  
  631.  
  632.             sTitle = unicode(aEntry[1], 'utf-8')#converti en unicode
  633.             sTitle = unicodedata.normalize('NFD', sTitle).encode('ascii', 'ignore')#vire accent
  634.             sTitle = unescape(str(aEntry[1]))
  635.             #sTitle = sTitle.encode( "utf-8")
  636.             sNumber = aEntry[1].replace('<span class="lister-item-index unbold text-primary">', '').replace('</span>', '')
  637.             #sRuntime = aEntry[0].replace('<span class="runtime">', '').replace('</span>', '')            
  638.             sTitle = '[COLOR azure]'+sNumber+'[/COLOR] ' + aEntry[2]
  639.             sMovieTitle=re.sub('(\[.*\])','', sTitle)
  640.             sMovieTitle = re.sub(r'[^a-z -]', ' ', sMovieTitle)
  641.             sTitle2=re.sub('(.*)(\[.*\])','\\1 [COLOR azure]\\2[/COLOR]', sTitle)
  642.             sThumbnail = str(aEntry[0])
  643.  
  644.             #sCom = unicode(aEntry[3], 'utf-8')#converti en unicode
  645.             #sCom = unicodedata.normalize('NFD', sCom).encode('ascii', 'ignore').decode("unicode_escape")#vire accent et '\'
  646.             #sCom = unescape(sCom)
  647.            
  648.             oOutputParameterHandler = cOutputParameterHandler()
  649.             oOutputParameterHandler.addParameter('siteUrl', ('none'))
  650.             oOutputParameterHandler.addParameter('sMovieTitle', str(aEntry[2]))
  651.             oOutputParameterHandler.addParameter('sThumbnail', str(aEntry[0]))            
  652.             oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumbnail, '', oOutputParameterHandler)
  653.            
  654.         cConfig().finishDialog(dialog)
  655.  
  656.         sNextPage = __checkForNextPage(sHtmlContent)
  657.         if (sNextPage != False):
  658.             oOutputParameterHandler = cOutputParameterHandler()
  659.             oOutputParameterHandler.addParameter('siteUrl', sNextPage)
  660.             oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Next >>>[/COLOR]' , oOutputParameterHandler)
  661.  
  662.     oGui.setEndOfDirectory()
  663.      
  664. def __checkForNextPage(sHtmlContent):
  665.     sPattern = '<a href="([^"]+)" class="lister-page-next next-page" ref-marker="adv_nxt">Next »</a>'
  666.  
  667.     oParser = cParser()
  668.     aResult = oParser.parse(sHtmlContent, sPattern)
  669.     if (aResult[0] == True):
  670.         return aResult[1][0]
  671.  
  672.     return False
  673.  
  674. def showHosters():
  675.  
  676.     oInputParameterHandler = cInputParameterHandler()
  677.     sUrl = oInputParameterHandler.getValue('siteUrl')
  678.     sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
  679.     sThumbnail = oInputParameterHandler.getValue('sThumbnail')
  680.    
  681.     sExtraTitle = ''
  682.     #si c'est une serie
  683.    if sUrl != 'none':
  684.        sExtraTitle = sUrl.split('|')[1]
  685.        sMovieTitle = sUrl.split('|')[0]
  686.    
  687.    #nettoyage du nom pr la recherche
  688.    #print 'avant ' + sMovieTitle
  689.    sMovieTitle = unicode(sMovieTitle, 'utf-8')#converti en unicode pour aider aux convertions
  690.    sMovieTitle = unicodedata.normalize('NFD', sMovieTitle).encode('ascii', 'ignore').decode("unicode_escape")#vire accent et '\'
  691.    sMovieTitle = sMovieTitle.encode("utf-8").lower() #on repasse en utf-8
  692.  
  693.    sMovieTitle = re.sub('\(.+?\)',' ', sMovieTitle) #vire les tags entre parentheses
  694.  
  695.    #modif venom si le titre comporte un - il doit le chercher
  696.    sMovieTitle = re.sub(r'[^a-z -]', ' ', sMovieTitle) #vire les caracteres a la con qui peuvent trainer
  697.  
  698.    sMovieTitle = re.sub('( |^)(le|la|les|du|au|a|l)( |$)',' ', sMovieTitle) #vire les articles
  699.  
  700.    sMovieTitle = re.sub(' +',' ',sMovieTitle) #vire les espaces multiples et on laisse les espaces sans modifs car certains codent avec %20 d'autres avec +
  701.     #print 'apres ' + sMovieTitle
  702.  
  703.     dialog3 = xbmcgui.Dialog()
  704.     ret = dialog3.select('Recherche',['Vstream','zone_telechargement','film_streaming','kepliz','Movieshd'])
  705.  
  706.     if ret == 0:
  707.         VstreamSearch(sMovieTitle)
  708.     elif ret == 1:
  709.         zone_telechargementSearch(sMovieTitle)
  710.     elif ret == 2:
  711.         film_streamingSearch(sMovieTitle + sExtraTitle)
  712.     elif ret == 3:
  713.         keplizSearch(sMovieTitle + sExtraTitl)
  714.     elif ret == 4:
  715.         movieshdSearch(sMovieTitle + sExtraTitle)
  716.        
  717. def VstreamSearch(sMovieTitle):
  718.    
  719.     oGui = cGui()
  720.     oInputParameterHandler = cInputParameterHandler()
  721.     sUrl = oInputParameterHandler.getValue('siteUrl')
  722.    
  723.     #Type de recherche
  724.     sDisp = oInputParameterHandler.getValue('disp')
  725.  
  726.     if not(sDisp):
  727.         sDisp = 'search1'
  728.         if sUrl != 'none':
  729.             sDisp = 'search2'
  730.    
  731.     oHandler = cRechercheHandler()
  732.     oHandler.setText(sMovieTitle)
  733.     oHandler.setDisp(sDisp)
  734.     aPlugins = oHandler.getAvailablePlugins()
  735.                
  736.     oGui.setEndOfDirectory()        
  737.  
  738. def zone_telechargementSearch(sMovieTitle):
  739.     oGui = cGui()
  740.    
  741.     exec "from resources.sites import zone_telechargement_com as search"
  742.     sSearchText = oGui.showKeyBoard()
  743.     if (sSearchText != False):
  744.         sUrl = URL_SEARCH_MOVIES[0] + sSearchText +'&tab=all&orderby_by=popular&orderby_order=desc&displaychangeto=thumb'
  745.         showMovies(sUrl)
  746.         oGui.setEndOfDirectory()
  747.         return    
  748.  
  749. def film_streamingSearch(sMovieTitle):
  750.     oGui = cGui()
  751.    
  752.     exec "from resources.sites import film_streaming_co as search"
  753.     #sSearchText = oGui.showKeyBoard()
  754.     #title = (_("Enter search criteria")), text = searchTitle, is_dialog=True)
  755.  
  756.    # if (sSearchText != False):
  757.         #sSearchText = cUtil().urlEncode(sSearchText)    
  758.     sUrl = ('(http://www.film-streaming.co/' + sMovieTitle)
  759.     sUrl = URL_SEARCH[0] + sSearchText
  760.     resultSearch(sUrl)        
  761.     searchUrl = "search.php?movie=", ('resultSearch', sUrl)
  762.     exec "searchUrl"
  763.    
  764.     oGui.setEndOfDirectory()
  765.    
  766.  
  767.  
  768. def keplizSearch(sMovieTitle):
  769.     oGui = cGui()
  770.    
  771.     exec "from resources.sites import kepliz_com as search"
  772.     sSearchText = oGui.showKeyBoard()
  773.     #title = (_("Enter search criteria")), text = searchTitle, is_dialog=True)
  774.  
  775.     if (sSearchText != False):
  776.         sSearchText = cUtil().urlEncode(sSearchText)    
  777.         sUrl = ('(http://www.film-streaming.co/' + sMovieTitle)
  778.         searchUrl = "search.php?movie=", ('resultSearch', sUrl)
  779.     exec "searchUrl"
  780.    
  781.     oGui.setEndOfDirectory()
  782.  
  783.  
  784. def movieshdSearch(sMovieTitle):
  785.     oGui = cGui()
  786.    
  787.     exec "from resources.sites import movieshd.tv as search"
  788.     sSearchText = oGui.showKeyBoard()
  789.     #title = (_("Enter search criteria")), text = searchTitle, is_dialog=True)
  790.  
  791.     if (sSearchText != False):
  792.         sSearchText = cUtil().urlEncode(sSearchText)    
  793.         sUrl = ('(http://www.film-streaming.co/' + sMovieTitle)
  794.         searchUrl = "search.php?movie=", ('resultSearch', sUrl)
  795.     exec "searchUrl"
  796.    
  797.     oGui.setEndOfDirectory()
  798.            
  799. def addMoviedb(sId, sFunction, sLabel, sIcon, sThumbnail, fanart, oOutputParameterHandler = ''):
  800.    
  801.     #addMoviedb(oGui, SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumbnail, sFanart, oOutputParameterHandler)
  802.     oGui = cGui()
  803.     oGuiElement = cGuiElement()
  804.     oGuiElement.setSiteName(sId)
  805.     oGuiElement.setFunction(sFunction)
  806.     oGuiElement.setTitle(sLabel)
  807.     #oGuiElement.setIcon(sIcon)
  808.     oGuiElement.setMeta(0)
  809.     #oGuiElement.setThumbnail(sThumbnail)
  810.     #oGuiElement.setFanart(fanart)
  811.    
  812.     #cGui.addFolder(oGuiElement, oOutputParameterHandler)
  813.     oGui.addFolder(oGuiElement, oOutputParameterHandler, False)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement