Advertisement
Guest User

Series.ly

a guest
Aug 15th, 2012
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 26.82 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. #------------------------------------------------------------
  3. # pelisalacarta - XBMC Plugin
  4. # Canal para series.ly
  5. # http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
  6. #------------------------------------------------------------
  7. import re
  8. import sys
  9. import os
  10. import traceback
  11. import urllib2
  12.  
  13. from core import logger
  14. from core import config
  15. from core import scrapertools
  16. from core.item import Item
  17. from servers import servertools
  18.  
  19.  
  20. __channel__ = "seriesly"
  21. __category__ = "S,A"
  22. __type__ = "generic"
  23. __title__ = "Series.ly"
  24. __language__ = "ES"
  25. __creationdate__ = "20111119"
  26.  
  27.  
  28. DEBUG = config.get_setting("debug")
  29. SESION = config.get_setting("session","seriesly")
  30. LOGIN = config.get_setting("login","seriesly")
  31. PASSWORD = config.get_setting("password","seriesly")
  32.  
  33. def load_json(data):
  34.     # callback to transform json string values to utf8
  35.     def to_utf8(dct):
  36.         rdct = {}
  37.         for k, v in dct.items() :
  38.             if isinstance(v, (str, unicode)) :
  39.                 rdct[k] = v.encode('utf8', 'ignore')
  40.             else :
  41.                 rdct[k] = v
  42.         return rdct
  43.     try :        
  44.         from lib import simplejson
  45.         json_data = simplejson.loads(data, object_hook=to_utf8)
  46.         return json_data
  47.     except:
  48.         import sys
  49.         for line in sys.exc_info():
  50.             logger.error( "%s" % line )
  51.  
  52. ''' URLEncode a string '''
  53. def qstr(string):
  54.     return string # urllib2.quote(string)  
  55.  
  56. def isGeneric():
  57.     return True
  58.  
  59. def mainlist(item):
  60.     logger.info("[seriesly.py] mainlist")
  61.    
  62.     itemlist = []
  63.  
  64.     auth_token, user_token = perform_login(LOGIN,PASSWORD)
  65.    
  66.     extra_params = '%s|%s' % ( auth_token, user_token )
  67.  
  68.     itemlist.append( Item(channel=__channel__, title="Buscar", action="search") )
  69.     itemlist.append( Item(channel=__channel__, title="Mis series", action="mis_series", extra=extra_params ) )
  70.     itemlist.append( Item(channel=__channel__, title="Mis pelis", action="mis_pelis", extra=extra_params ) )
  71.     itemlist.append( Item(channel=__channel__, title="Series Mas Votadas", action="series_mas_votadas", extra=extra_params ) )
  72.     itemlist.append( Item(channel=__channel__, title="Peliculas Mas Vistas", action="pelis_mas_vistas", extra=extra_params ) )
  73.     itemlist.append( Item(channel=__channel__, title="Ultimas Pelis Modificadas", action="ultimas_pelis_modificadas", extra=extra_params ) )
  74.  
  75.     if SESION=="true":
  76.         itemlist.append( Item(channel=__channel__, title="Cerrar sesion ("+LOGIN+")", action="logout"))
  77.     else:
  78.         itemlist.append( Item(channel=__channel__, title="Iniciar sesion", action="login"))
  79.  
  80.     return itemlist
  81.  
  82. def logout(item):
  83.     nombre_fichero_config_canal = os.path.join( config.get_data_path() ,__channel__+".xml" )
  84.     config_canal = open( nombre_fichero_config_canal , "w" )
  85.     config_canal.write("<settings>\n<session>false</session>\n<login></login>\n<password></password>\n</settings>")
  86.     config_canal.close();
  87.    
  88.     #Refrescamos variables globales
  89.     SESION = config.get_setting("session","seriesly")
  90.     LOGIN = config.get_setting("login","seriesly")
  91.     PASSWORD = config.get_setting("password","seriesly")
  92.  
  93.     if config.get_platform() == "wiimc":
  94.         SESION = "false"
  95.         LOGIN = ""
  96.         PASSWORD = ""
  97.  
  98.     itemlist = []
  99.     itemlist.append( Item(channel=__channel__, title="Sesión finalizada", action="mainlist"))
  100.     return itemlist
  101.  
  102. def login(item):
  103.    
  104.     if config.get_platform() in ("xbmcdharma", "xmbc", "xbmceden"):
  105.         import xbmc
  106.         keyboard = xbmc.Keyboard("","Login")
  107.         keyboard.doModal()
  108.         if (keyboard.isConfirmed()):
  109.             milogin = keyboard.getText()
  110.    
  111.         keyboard = xbmc.Keyboard("","Password")
  112.         keyboard.doModal()
  113.         if (keyboard.isConfirmed()):
  114.             mipassword = keyboard.getText()
  115.            
  116.     if config.get_platform()=="wiimc":
  117.         login = item.extra
  118.         milogin, mipassword = login.split('|')
  119.  
  120.     itemlist = []
  121.     auth_token,user_token = perform_login(milogin,mipassword)
  122.     if(user_token == "invalid login"):
  123.         itemlist.append( Item(channel=__channel__, title=user_token, action="mainlist"))
  124.         return itemlist
  125.    
  126.     nombre_fichero_config_canal = os.path.join( config.get_data_path() , __channel__+".xml" )
  127.     config_canal = open( nombre_fichero_config_canal , "w" )
  128.     config_canal.write("<settings>\n<session>true</session>\n<login>"+milogin+"</login>\n<password>"+mipassword+"</password>\n</settings>")
  129.     config_canal.close();
  130.    
  131.     #Refrescamos variables globales
  132.     SESION = config.get_setting("session","seriesly")
  133.     LOGIN = config.get_setting("login","seriesly")
  134.     PASSWORD = config.get_setting("password","seriesly")
  135.  
  136.     if config.get_platform() == "wiimc":
  137.         SESION = "true"
  138.         LOGIN = milogin
  139.         PASSWORD = mipassword
  140.  
  141.     itemlist.append( Item(channel=__channel__, title="Sesión iniciada", action="mainlist"))
  142.     return itemlist
  143.  
  144. def perform_login(login,password):
  145.  
  146.     # AuthToken
  147.     url = "http://series.ly/api/auth.php?api=8&secret=N5X54c4OeDUwU8dWBbMW"
  148.     data = scrapertools.cache_page(url)
  149.     logger.info("****")
  150.     logger.info(data)
  151.     logger.info("****")
  152.     auth_token = data.strip()
  153.    
  154.     # UserToken
  155.     url = "http://series.ly/scripts/login/login.php"
  156.     post = "lg_login=%s&lg_pass=%s&callback_url=no&auth_token=%s&autologin=" % ( qstr(login), qstr(password), qstr(auth_token) )
  157.     data = scrapertools.cache_page(url,post=post)
  158.     logger.info("****")
  159.     logger.info(data)
  160.     logger.info("****")
  161.     user_token=data.strip()
  162.    
  163.     return [auth_token,user_token]
  164.  
  165. def getCredentials(auth_token, user_token):
  166.     logged = False
  167.     old_auth_token = auth_token
  168.     old_user_token = user_token
  169.     try:
  170.         if SESION != "true":
  171.             return [old_auth_token,old_user_token, logged, "Sesión no iniciada"]
  172.        
  173.         count = 0
  174.         while (not logged and count<6):
  175.             if(count > 0):
  176.                 auth_token,user_token = perform_login(LOGIN,PASSWORD)
  177.             post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
  178.             url='http://series.ly/api/isUserLogged.php?type=&format=json'
  179.             logresult = load_json(scrapertools.cache_page(url, post=post))
  180.             if logresult == None or logresult['result'] != '1':
  181.                 count = count + 1
  182.             else:
  183.                 logged=True
  184.            
  185.            
  186.     except:
  187.         return [old_auth_token,old_user_token, logged, "Error al obtener credenciales"]
  188.      
  189.     if(not logged):
  190.         return [old_auth_token,old_user_token, logged, "Error al obtener credenciales"]
  191.    
  192.     return [auth_token,user_token, logged, user_token]
  193.  
  194. def mis_series(item):
  195.    
  196.     logger.info("[seriesly.py] mis_series")
  197.    
  198.     auth_token, user_token = item.extra.split('|')
  199.     auth_token, user_token, logged, nologgedmessage = getCredentials(auth_token, user_token)
  200.     if (not logged):
  201.         itemlist = []
  202.         itemlist.append( Item(channel=__channel__, title=nologgedmessage, action="mainlist"))
  203.         return itemlist
  204.     post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
  205.    
  206.     #Series Usuario
  207.     url='http://series.ly/api/userSeries.php?type=&format=json'
  208.    
  209.     # Extrae las entradas (carpetas)
  210.     # {"idSerie":"?", "title":"?", "seasons":?d, "episodes":?d, "poster":"http:?", "thumb":"http:?, "small_thumb":"http:?", "status":"Pending/Watching/Finished"}
  211.    
  212.     serieList = load_json(scrapertools.cache_page(url, post=post))
  213.     if serieList == None : serieList = []
  214.    
  215.     logger.info('[seriesly.py] hay %d series' % len(serieList))
  216.    
  217.     itemlist = []
  218.     for serieItem in serieList:
  219.         logger.info("serieItem="+str(serieItem))
  220.         #serieItem={u'status': 'Watching', u'thumb': 'http://cdn.opensly.com/series/HV9RTVP6XN-p.jpg', u'title': 'Digimon: Digital Monsters', u'poster': 'http://cdn.opensly.com/series/HV9RTVP6XN.jpg', u'episodes': 343, u'small_thumb': 'http://cdn.opensly.com/series/HV9RTVP6XN-xs.jpg', u'seasons': 7, u'idSerie': 'HV9RTVP6XN'}
  221.  
  222.         if serieItem['title'] is not None:
  223.             status = serieItem['status']
  224.             if status == 'Pending' : serieItem['estado'] = 'Pendiente'
  225.             elif status == 'Watching' : serieItem['estado'] = 'Viendo'
  226.             elif status == 'Finished' : serieItem['estado'] = 'Finalizada'
  227.             else : serieItem['estado'] = '?'
  228.             # Añade al listado de XBMC
  229.             itemlist.append(
  230.                 Item(channel=item.channel,
  231.                      action = 'serie_capitulos',
  232.                      title = '%(title)s (%(seasons)d Temporadas) (%(episodes)d Episodios) [%(estado)s]' % serieItem,
  233.                      url = 'http://series.ly/api/detailSerie.php?idSerie=%(idSerie)s&caps=1&format=json' % serieItem,
  234.                      thumbnail = serieItem['thumb'],
  235.                      plot = "",
  236.                      show = serieItem['title'],
  237.                      extra = item.extra
  238.                 )
  239.             )
  240.            
  241.     itemlist = sorted( itemlist , key=lambda item: item.title)
  242.        
  243.     return itemlist
  244.  
  245. def serie_capitulos(item):
  246.    
  247.     logger.info('[seriesly.py] serie_capitulos')
  248.    
  249.     # TOKENS
  250.     auth_token, user_token = item.extra.split('|')
  251.     auth_token, user_token, logged, nologgedmessage = getCredentials(auth_token, user_token)
  252.     if (not logged):
  253.         itemlist = []
  254.         itemlist.append( Item(channel=__channel__, title=nologgedmessage, action="mainlist"))
  255.         return itemlist
  256.     post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
  257.    
  258.     # Extrae las entradas (carpetas)
  259.    
  260.     # {"title":"?", "ids":"?", "synopsis":"?", "seriesly_score":?d, "participants_score":"?d", "poster":"http:?, "thumb":"http:?", "small_thumb":"http:?", "episode":
  261.     #           [   {"idc":"?","title":"?","season":"?","viewed":"1/0"} ]
  262.    
  263.     serieInfo = load_json(scrapertools.cache_page(item.url, post=post))
  264.     if serieInfo == None : serieInfo = {}
  265.     if (not serieInfo.has_key('episode')) or serieInfo['episode'] == None : serieInfo['episode'] = []
  266.    
  267.     logger.info('hay %d capitulos' % len(serieInfo['episode']))
  268.  
  269.     itemlist = []
  270.     for episode in serieInfo['episode'] :
  271.         if episode.has_key('viewed'):
  272.             viewed = episode['viewed']
  273.             if viewed == '0' : episode['estado'] = ' [Pendiente]'
  274.             elif viewed == '1' : episode['estado'] = ' [Visto]'
  275.             else : episode['estado'] = ' [?]'
  276.         else:
  277.             episode['estado'] = ''
  278.        
  279.         itemlist.append(
  280.             Item(channel=item.channel,
  281.                 action = 'capitulo_links',
  282.                 title = '%(season)s - %(title)s%(estado)s' % episode,
  283.                 url = 'http://series.ly/api/linksCap.php?idCap=%(idc)s&format=json' % episode,
  284.                 thumbnail = item.thumbnail,
  285.                 plot = "",
  286.                 show = item.show,
  287.                 extra = item.extra
  288.             )
  289.         )
  290.  
  291.     #if config.get_platform().startswith("xbmc") or config.get_platform().startswith("boxee"):
  292.     #    itemlist.append( Item(channel=item.channel, title="Añadir esta serie a la biblioteca de XBMC", url=item.url, action="add_serie_to_library", extra="serie_capitulos###"+item.extra, show=item.show) )
  293.  
  294.     return itemlist
  295.  
  296. def capitulo_links(item):
  297.     logger.info("[seriesly.py] capitulo_links")
  298.    
  299.     # TOKENS
  300.    
  301.     auth_token, user_token = item.extra.split('|')
  302.     auth_token, user_token, logged, nologgedmessage = getCredentials(auth_token, user_token)
  303.     if (not logged):
  304.         itemlist = []
  305.         itemlist.append( Item(channel=__channel__, title=nologgedmessage, action="mainlist"))
  306.         return itemlist
  307.     post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
  308.     # Extrae las entradas (carpetas)
  309.     # data=[{"language":"versi\u00f3n original","subtitles":"castellano","hd":"0","url":"http:\/\/series.ly\/api\/goLink.php?auth_token=2ee35ed4a2x2b7f734a&user_token=2PDP;zP2xkPI0&enc=dkx.N6i\/j*3X","server":"wupload"},
  310.     #{"language":"versi\u00f3n original","subtitles":"no","hd":"0","url":"http:\/\/series.ly\/api\/goLink.php?auth_token=2ee35ed4aaa&user_token=2PDP;aaaI0&enc=dkaaaR~H5?n%","server":"Novamov"}]
  311.     data = scrapertools.cache_page(item.url+"&"+post)
  312.     linkList = load_json(data)
  313.     if linkList == None : linkList = []
  314.    
  315.     logger.info("hay %d videos" % len(linkList))
  316.    
  317.     itemlist = []        
  318.     for link in linkList:
  319.  
  320.         #hd = link['hd']
  321.         #if hd == '0' : link['hdtag'] = ''
  322.         #elif hd == '1' : link['hdtag'] = ' (HD)'
  323.         #else : link['hdtag'] = ' (?)'
  324.  
  325.         itemlist.append(
  326.             Item(channel=item.channel,
  327.                 action = "links",
  328.                 title = '%(info)s - %(host)s - %(lang)s(sub %(sub)s)' % link,
  329.                 url = link['url'],
  330.                 thumbnail = item.thumbnail,
  331.                 plot = "",
  332.                 extra = ''
  333.             )
  334.         )
  335.  
  336.     return itemlist
  337.  
  338. def links(item):    
  339.        
  340.     itemlist = []
  341.     try:
  342.         count = 0
  343.         exit = False
  344.         while(not exit and count < 5):
  345.             #A veces da error al intentar acceder
  346.             try:
  347.                 page = urllib2.urlopen(item.url)
  348.                 urlvideo = "\"" + page.geturl() + "\""
  349.                 exit = True
  350.             except:
  351.                 count = count + 1
  352.  
  353.         logger.info("urlvideo="+urlvideo)
  354.         for video in servertools.findvideos(urlvideo) :
  355.             #scrapedtitle = title.strip() + " " + match[1] + " " + match[2] + " " + video[0]
  356.             scrapedtitle = scrapertools.htmlclean(video[0])
  357.             scrapedurl = video[1]
  358.             server = video[2]
  359.             itemlist.append( Item(channel=__channel__, action="play" , title=scrapedtitle, url=scrapedurl, thumbnail=item.thumbnail, plot="", server=server, extra="", category=item.category, fanart=item.thumbnail, folder=False))
  360.     except:  
  361.         import sys
  362.         for line in sys.exc_info():
  363.             logger.error( "%s" % line )
  364.                
  365.        
  366.     return itemlist
  367.  
  368. def mis_pelis(item):
  369.    
  370.     # TOKENS
  371.     auth_token, user_token = item.extra.split('|')
  372.     auth_token, user_token, logged, nologgedmessage = getCredentials(auth_token, user_token)
  373.     if (not logged):
  374.         itemlist = []
  375.         itemlist.append( Item(channel=__channel__, title=nologgedmessage, action="mainlist"))
  376.         return itemlist
  377.    
  378.     #Peliculas Usuario
  379.    
  380.     itemlist = []
  381.    
  382.     itemlist.append( Item(channel=__channel__, title="Vistas", action="mis_pelis_categoria", extra='%s|%s|%s' % (auth_token, user_token, 'Watched')) )
  383.     itemlist.append( Item(channel=__channel__, title="Favoritas", action="mis_pelis_categoria", extra='%s|%s|%s' % (auth_token, user_token, 'Favourite')) )
  384.     itemlist.append( Item(channel=__channel__, title="Pendientes", action="mis_pelis_categoria", extra='%s|%s|%s' % (auth_token, user_token, 'Pending')) )
  385.    
  386.     return itemlist
  387.  
  388. def limpia_lista(movielist, campo):
  389.        
  390.     cleanlist = []
  391.     for movieItem in movielist:
  392.         if(movieItem[campo] is not None):
  393.             cleanlist.append( movieItem)
  394.     return cleanlist
  395.  
  396. def mis_pelis_categoria(item):
  397.  
  398.     logger.info("[seriesly.py] mis_pelis_categoria")
  399.  
  400.     # TOKENS
  401.     auth_token, user_token, cat_filter = item.extra.split('|')
  402.     auth_token, user_token, logged, nologgedmessage = getCredentials(auth_token, user_token)
  403.     if (not logged):
  404.         itemlist = []
  405.         itemlist.append( Item(channel=__channel__, title=nologgedmessage, action="mainlist"))
  406.         return itemlist
  407.     post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
  408.     #Peliculas Usuario (Filtradas por categoria)
  409.    
  410.     url='http://series.ly/api/userMovies.php?format=json'
  411.    
  412.     # Extrae las entradas (carpetas)
  413.     #¬†[ {"idFilm":"?","title":"?","year":"?","genre":"?","poster":"http://?","thumb":"http://?","small_thumb":"http://?","status":"Watched/Favourite/Pending"} ]
  414.     data = scrapertools.cache_page(url, post=post)
  415.     movieList = load_json(data)
  416.     if movieList == None : movieList = []
  417.    
  418.     logger.info("hay %d peliculas" % len(movieList))
  419.  
  420.     # compare function
  421.     def movie_compare_criteria( x, y) :
  422.         strx = x['title'].strip().lower()
  423.         stry = y['title'].strip().lower()
  424.         if strx == stry :
  425.             return 0
  426.         elif strx < stry :
  427.             return -1
  428.         else :
  429.             return 1
  430.  
  431.     itemlist = []
  432.     try:
  433.         movieList = limpia_lista(movieList, 'title')
  434.         sortedlist = sorted(movieList, lambda x, y: movie_compare_criteria(x, y))
  435.     except:
  436.         sortedlist = movieList
  437.        
  438.     for movieItem in sortedlist:
  439.         status = movieItem['status']
  440.         if status == cat_filter:
  441.             if status == 'Pending' : movieItem['estado'] = 'Pendiente';
  442.             elif status == 'Watched' : movieItem['estado'] = 'Vista';
  443.             elif status == 'Favourite' : movieItem['estado'] = 'Favorita';
  444.             else : movieItem['estado'] = '?';
  445.             # A√±ade al listado de XBMC
  446.             itemlist.append(
  447.                 Item(channel=item.channel,
  448.                      action = "peli_links",
  449.                      title = '%(title)s (%(year)s) [%(estado)s]' % movieItem,
  450.                      url = 'http://series.ly/api/detailMovie.php?idFilm=%s&format=json' % qstr(movieItem['idFilm']),
  451.                      thumbnail = movieItem['poster'],
  452.                      plot = "",
  453.                      extra = '%s|%s' % ( qstr(auth_token), qstr(user_token) )
  454.                 )
  455.             )
  456.    
  457.     return itemlist
  458.  
  459. def peli_links(item):
  460.  
  461.     logger.info("[seriesly.py] peli_links")
  462.    
  463.     # TOKENS
  464.     auth_token, user_token = item.extra.split('|')
  465.     auth_token, user_token, logged, nologgedmessage = getCredentials(auth_token, user_token)
  466.     if (not logged):
  467.         itemlist = []
  468.         itemlist.append( Item(channel=__channel__, title=nologgedmessage, action="mainlist"))
  469.         return itemlist
  470.     post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
  471.    
  472.     # Extrae las entradas (carpetas)
  473.     #¬†{"title":"?","idp":"?", "synopsis":"?", "year":"?", "seriesly_score":?d, "participants_score":"?", "genre":"terror", "poster":"http://?","thumb":"http://?","small_thumb":"http://?","links":
  474.     #   [{"language":"?","subtitles":"yes/no","quality":"?","part":"?","uploader":"?","highDef":"0/1","server":"?","url_cineraculo":"?","url_megavideo":"?"}]
  475.     # }
  476.     data = scrapertools.cache_page(item.url, post=post)
  477.     linkList = load_json(data)
  478.     if linkList == None : linkList = []
  479.    
  480.     logger.info("hay %d videos" % len(linkList))
  481.     itemlist = []
  482.     try:
  483.         for link in linkList['links']:
  484.            
  485.             #hd = link['highDef']
  486.             #if hd == '0' : link['hdtag'] = ''
  487.             #elif hd == '1' : link['hdtag'] = ' (HD)'
  488.             #else : link['hdtag'] = ' (?)'
  489.            
  490.             #Neofreno: Cambio a partir de aquí
  491.             link['titletag'] =linkList['title'];
  492.            
  493.             itemlist.append(
  494.                 Item(channel=item.channel,
  495.                     action = "links",
  496.                     title = '%(host)s - %(lang)s %(quality)s' % link,
  497.                     url = qstr(link['url'].strip()),
  498.                     thumbnail = item.thumbnail,
  499.                     plot = linkList['synopsis'],
  500.                     extra = ''
  501.                 )
  502.             )
  503.     except:
  504.         import sys
  505.         for line in sys.exc_info():
  506.             logger.error( "%s" % line )
  507.        
  508.     return itemlist
  509. def series_mas_votadas(item):
  510.  
  511.     logger.info("[seriesly.py] series_mas_votadas")
  512.    
  513.     # TOKENS
  514.     auth_token, user_token = item.extra.split('|')
  515.     auth_token, user_token, logged, nologgedmessage = getCredentials(auth_token, user_token)
  516.     if (not logged):
  517.         itemlist = []
  518.         itemlist.append( Item(channel=__channel__, title=nologgedmessage, action="mainlist"))
  519.         return itemlist
  520.     post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
  521.    
  522.     url="http://series.ly/api/top.php?&format=json&id=1"
  523.    
  524.     # Extrae las entradas (carpetas)
  525.     # {series_mes_votades":[{"nom_serie":"?", "vots":"?", "id_serie":"?"}]}
  526.    
  527.     topInfo = load_json(scrapertools.cache_page(url, post=post))
  528.     if topInfo == None : topInfo = {}
  529.     if topInfo['series_mes_votades'] == None : topInfo['series_mes_votades'] = []
  530.    
  531.     logger.info("hay %d series" % len(topInfo['series_mes_votades']))
  532.    
  533.     itemlist = []
  534.     for serieItem in topInfo['series_mes_votades']:
  535.         # Añade al listado de XBMC
  536.         itemlist.append(
  537.             Item(channel=item.channel,
  538.                  action = 'serie_capitulos',
  539.                  title = '%(nom_serie)s [%(vots)s Votos]' % serieItem,
  540.                  url = 'http://series.ly/api/detailSerie.php?idSerie=%s&caps=1&format=json' % qstr(serieItem['id_serie']),
  541.                  thumbnail = '',
  542.                  plot = "",
  543.                  extra = item.extra
  544.             )
  545.         )  
  546.     return itemlist
  547.  
  548. def pelis_mas_vistas(item):
  549.  
  550.     logger.info("[seriesly.py] pelis_mas_vistas")
  551.    
  552.     # TOKENS
  553.     auth_token, user_token = item.extra.split('|')
  554.     auth_token, user_token, logged, nologgedmessage = getCredentials(auth_token, user_token)
  555.     if (not logged):
  556.         itemlist = []
  557.         itemlist.append( Item(channel=__channel__, title=nologgedmessage, action="mainlist"))
  558.         return itemlist
  559.     post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
  560.    
  561.     url="http://series.ly/api/top.php?&format=json&id=2"
  562.    
  563.     # Extrae las entradas (carpetas)
  564.     # {pelis_mes_vistes":[{"nom_peli":"?", "id_peli":"?"}]}
  565.    
  566.     topInfo = load_json(scrapertools.cache_page(url, post=post))
  567.     if topInfo == None : topInfo = {}
  568.     if topInfo['pelis_mes_vistes'] == None : topInfo['pelis_mes_vistes'] = []
  569.    
  570.     logger.info("hay %d pelis" % len(topInfo['pelis_mes_vistes']))
  571.    
  572.     itemlist = []
  573.     for movieItem in topInfo['pelis_mes_vistes']:
  574.         # Añade al listado de XBMC
  575.         itemlist.append(
  576.             Item(channel=item.channel,
  577.                  action = 'peli_links',
  578.                  title = '%(nom_peli)s' % movieItem,
  579.                  url = 'http://series.ly/api/detailMovie.php?idFilm=%s&format=json' % qstr(movieItem['id_peli']),
  580.                  thumbnail = '',
  581.                  plot = "",
  582.                  extra = item.extra
  583.             )
  584.         )  
  585.     return itemlist
  586.  
  587. def ultimas_pelis_modificadas(item):
  588.  
  589.     logger.info("[seriesly.py] ultimas_pelis_modificadas")
  590.    
  591.     # TOKENS
  592.     auth_token, user_token = item.extra.split('|')
  593.     auth_token, user_token, logged, nologgedmessage = getCredentials(auth_token, user_token)
  594.     if (not logged):
  595.         itemlist = []
  596.         itemlist.append( Item(channel=__channel__, title=nologgedmessage, action="mainlist"))
  597.         return itemlist
  598.     post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
  599.    
  600.     url="http://series.ly/api/top.php?&format=json&id=3"
  601.    
  602.     # Extrae las entradas (carpetas)
  603.     # {ultimes_pelis":[{"nom_peli":"?", "id_peli":"?"}]}
  604.    
  605.     topInfo = load_json(scrapertools.cache_page(url, post=post))
  606.     if topInfo == None : topInfo = {}
  607.     if topInfo['ultimes_pelis'] == None : topInfo['ultimes_pelis'] = []
  608.    
  609.     logger.info("hay %d pelis" % len(topInfo['ultimes_pelis']))
  610.    
  611.     itemlist = []
  612.     for movieItem in topInfo['ultimes_pelis']:
  613.         # Añade al listado de XBMC
  614.         itemlist.append(
  615.             Item(channel=item.channel,
  616.                  action = 'peli_links',
  617.                  title = '%(nom_peli)s [%(any)s]' % movieItem,
  618.                  url = 'http://series.ly/api/detailMovie.php?idFilm=%s&format=json' % qstr(movieItem['id_peli']),
  619.                  thumbnail = '',
  620.                  plot = "",
  621.                  extra = item.extra
  622.             )
  623.         )  
  624.     return itemlist
  625.  
  626.  
  627. def search(item,texto, categoria="*"):
  628.    
  629.     auth_token, user_token, logged, nologgedmessage = getCredentials("","")
  630.     if (not logged):
  631.         itemlist = []
  632.         itemlist.append( Item(channel=__channel__, title=nologgedmessage, action="mainlist"))
  633.         return itemlist
  634.    
  635.     res = search_series(auth_token, user_token, item, texto)
  636.     res.extend(search_films(auth_token, user_token, item, texto))
  637.    
  638.     return res
  639.    
  640. def search_series(auth_token, user_token, item, texto):
  641.     logger.info("[seriesly.py] search")
  642.    
  643.     post = 'auth_token=%s' % ( qstr(auth_token) )
  644.    
  645.     url = 'http://series.ly/api/search.php?search=%s&type=serie&format=json' % ( qstr(texto) )
  646.    
  647.     # Extrae las entradas (carpetas)
  648.     #¬†[{"idSerie":"?","title":"?","seasons":?d,"episodes":?d,"poster":"http://?","thumb":"http://?","small_thumb":"http://?"}
  649.    
  650.     serieList = load_json(scrapertools.cache_page(url, post=post))
  651.     if serieList == None : serieList = []
  652.    
  653.     logger.info("hay %d series" % len(serieList))
  654.    
  655.     itemlist = []
  656.     for serieItem in serieList:
  657.        
  658.         itemlist.append(
  659.             Item(channel=item.channel,
  660.                 action = 'serie_capitulos',
  661.                 title = 'Serie: %(title)s (%(seasons)d Temporadas) (%(episodes)d Episodios)' % serieItem,
  662.                 url = "http://series.ly/api/detailSerie.php?caps=1&auth_token=" + auth_token + "&user_token=" + user_token + "&idSerie=" + serieItem['idSerie'] + "&format=json",
  663.                 thumbnail = serieItem['poster'],
  664.                 plot = '',
  665.                 extra = '%s|%s' % (auth_token, user_token)
  666.             )
  667.         )
  668.          
  669.     return itemlist
  670.  
  671. def search_films(auth_token, user_token, item, texto):
  672.     logger.info("[seriesly.py] search_films")
  673.    
  674.     post = 'auth_token=%s' % ( qstr(auth_token) )
  675.    
  676.     url = 'http://series.ly/api/search.php?search=%s&type=film&format=json' % ( qstr(texto) )
  677.    
  678.     # Extrae las entradas (carpetas)
  679.     # [{"idFilm":"?","title":"?","year":"?","genre":"?","poster":"http://?","thumb":"http://?","small_thumb":"http://?"}
  680.    
  681.     movieList = load_json(scrapertools.cache_page(url, post=post))
  682.     if movieList == None : movieList = []
  683.    
  684.     logger.info("hay %d peliculas" % len(movieList))
  685.    
  686.     itemlist = []
  687.     for movieItem in movieList:
  688.        
  689.         itemlist.append(
  690.             Item(channel=item.channel,
  691.                 action = 'peli_links',
  692.                 title = 'Peli: %(title)s (%(year)s) (%(genre)s)' % movieItem,
  693.                 url = "http://series.ly/api/detailMovie.php?idFilm=" + movieItem['idFilm'] + "&format=json",
  694.                 thumbnail = movieItem['poster'],
  695.                 plot = '',
  696.                 extra = '%s|%s' % (auth_token, user_token)
  697.             )
  698.         )
  699.          
  700.     return itemlist
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement