Página 1 de 2

Libreria XBMC

Publicado: 01 Feb 2011, 09:50
por Chumy
Hola a tod@s,

He estado desarrollando un nuevo "canal" que lea de la biblioteca de XBMC, ya que me encanta como lo deja todo de ordenadito con su scrapper y el curro que hay hecho para añadir las series desde pelisalacarta a la biblioteca. Y como me gusta tenerlo todo ordenadito y no ir buscando la serie que estaba viendo y porque canal iba me decidi a importar la biblioteca.

Advierto que es cuanto menos una pre-alpha y está limitada a las series que se hayan añadido desde seriesyonkis.

Hay que modificar los siguientes archivos:

Cambiad las rutas a las que correspondan

pelisalacarta.conf

Añadid al final del fichero las rutas de directorio de la libreria y la BD de datos de XBMC

Código: Seleccionar todo

# Directorio de la libreria XBMC
LIBRARY_PATH=/home/chumy/.xbmc/userdata/addon_data/plugin.video.pelisalacarta/library/

# Base de datos de XBMC
LIBRARY_BD=/home/chumy/.xbmc/userdata/Database/MyVideos34.db
channelselector.py
Hay que añadir el canal para que aparezca en el listado.

Código: Seleccionar todo

def channels_list():
    channelslist = []
    channelslist.append([ "Libreria XBMC"        , "libreria"             , "" , "ES" , "F,S,A,D" , "generic" ])
    channelslist.append([ "Cinetube"              , "cinetube"             , "" , "ES" , "F,S,A,D" , "generic" ])
    channelslist.append([ "Peliculasyonkis"       , "peliculasyonkis"      , "" , "ES" , "F" , "xbmc" ])
Finalmente crear un fichero libreria.py

Código: Seleccionar todo

# -*- coding: utf-8 -*-
#------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# Canal para Libreria XBMC
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
#------------------------------------------------------------
import urlparse,urllib2,urllib,re
import os, sys

import scrapertools
import servertools
import logger
import buscador
from item import Item
import os.path
import fnmatch
import DecryptYonkis as Yonkis
import config
import sqlite3


CHANNELNAME = "LibreriaXBMC"
DEBUG = True
DIRNAME = config.getSetting("LIBRARY_PATH")
BD = config.getSetting("LIBRARY_BD")

conn = sqlite3.connect(BD)

def isGeneric():
	return True

def mainlist(item):
	logger.info("[libreriaXBMC.py] mainlist")

	itemlist = []
	# Listar entradas y meterlas en "files"
	c = conn.cursor()

	c.execute("""select sh.idShow, sh.c00 as title, 
			    sh.c06 as thumb, max(ep.c12) 
		      from tvshow sh, episode ep, TVSHOWLINKEPISODE rel 
		      where sh.idShow = rel.idShow  
		      and      ep.idEpisode = rel.idEpisode 
		      group by sh.idShow""")
	for row in c:
	    urlR= 'idshow='+str(row[0])+'&temps='+str(row[3])
	    thumb= getThumb(row[2])
	    titulo =  row[1].encode("iso-8859-1")
	    itemlist.append( Item(channel=CHANNELNAME, title=titulo, action="listseries", url=urlR, thumbnail=thumb, folder=True) )
	    
	#conn.close()
	return itemlist
	

def sortedlistdir(d, cmpfunc=cmp):
    l = os.listdir(d)
    l.sort(cmpfunc)
    return l

def getThumb(contenido):
  #<thumb ???></thumb>
  contenido = contenido.split("</thumb>")
  thumb = contenido[0].split(">")
  return thumb[1].encode("iso-8859-1")
  
  


def getParam(contenido,param):
  try:
    contenido = contenido.split(param + "=")
    contenido = contenido[1].split("&")
    result = contenido[0]
  except:
    result = ""
  return result

def listseries(item):
	logger.info("[libreriaXBMC.py] listseries")
	
	itemlist = []
	
	params = item.url
	
	
	# ------------------------------------------------------
	# Calculo de las temporadas
	# ------------------------------------------------------
	c = conn.cursor()

	idSerie = getParam(params,'idshow')
	tempActual = getParam(params,'temp')
	temps      = int(getParam(params,'temps'))
	if tempActual == "" :
	  #lista temporadas
	  if temps > 1 :
	    #Mostramos lista de temporadas
	    c.execute("""select  ep.c12
	    from tvshow sh, episode ep, TVSHOWLINKEPISODE rel
	    where sh.idShow = rel.idShow
	    and     ep.idEpisode = rel.idEpisode
	    and     sh.idShow = ?
	    group by ep.c12
	    order by ep.c12""", idSerie)
	    for row in c:
		urlR= 'idshow='+idSerie+'&temps='+str(temps)+'&temp='+str(row[0])
		titulo =  'Temporada '+ str(row[0]) .encode("iso-8859-1")
		itemlist.append( Item(channel=CHANNELNAME, title=titulo, action="listseries", url=urlR,  folder=True) )
	    return itemlist  
	  else:
	    tempActual = 1
	
	# ------------------------------------------------------
	# Extrae las entradas
	# ------------------------------------------------------
	
	c.execute("""select  ep.idFile
	    from tvshow sh, episode ep, TVSHOWLINKEPISODE rel
	    where sh.idShow = rel.idShow
	    and     ep.idEpisode = rel.idEpisode
	    and     sh.idShow = ?
	    and     ep.c12 = ? """, [idSerie, tempActual])
	    
	for row in c:
	  #urlR= 'idshow='+idSerie+'&temps='+str(temps)+'&temp='+str(tempActual)
	  contenido =  getContentFile(row[0])
	  urlR= str(contenido['url']) + '&idFile=' +str(row[0])
	  itemlist.append( Item(channel=CHANNELNAME, title=contenido['title'], action=contenido['action'], url=urlR, server=contenido['server'], thumbnail=contenido['thumbnail'], folder=True) )
	  
	
	#conn.close()	  
	return itemlist 
	      


def getContentFile(idFile):
	
  #print 'Entramos con ' + str(idFile)
  c = conn.cursor()

  c.execute(""" select  ep.c12||'x'||ep.c13||' - '||ep.c00 as title,
	ep.c06 as thumb,
	f.strFilename as file,
	p.strPath as path,	
	f.playCount as visto
  from episode ep,  files f, 
    tvshowlinkpath relPa,
    tvshowlinkepisode relEp,
    path p
  where     ep.idFile = f.idFile
  and      relPa.idShow = relEp.idShow
  and      relEp.idEpisode = ep.idEpisode
  and      relPa.idPath = p.idPath 
  and      ep.idFile = ?
  """, [idFile])

  for row in c:
    #special://home/userdata/addon_data/plugin.video.pelisalacarta/library/SERIES/titulo/
    path = row[3].split("library/")
    archivo = row[2]
    path = path[1] + archivo
    seriepath = os.path.join(DIRNAME,path)
    #print str(row[4]) + ' archivo ' + seriepath
    fileHandle = open ( seriepath )
    contenido = fileHandle.readline()
    fileHandle.close()
    #Arreglamos la url
    contenido = urllib.unquote(contenido)
    canal = getParam(contenido,"channel")
    urlFile = getParam(contenido,"url") 
    servidor = getParam(contenido,"server")
    
    
    if ( row[4] > 0 ):
      visto = "X - "
    else:
      visto = ""
    
    titulo = visto+row[0].encode("iso-8859-1")
    thumb = getThumb(row[1])
    return {'title':titulo, 'action':canal, 'url':urlFile, 'server':servidor, 'thumbnail':thumb}


def marcarVisto(idFile):
  c = conn.cursor()
  c.execute("""update files
	    set playCount = 1,
		lastPlayed = DATETIME('NOW')  
	    where idFile = ?  """, [idFile])
	    
  conn.commit()
  print 'Marcando como visto el ' + idFile

def seriesyonkis(item):
    logger.info("[libreriaXBMC.py] seriesyonkis")
    itemlist = []
    #archivo = findFile(findURL(item.url))
    print 'Marcamos como visto'
    marcarVisto(getParam(item.url,'idFile'))
    
    data = scrapertools.cachePage(item.url)
    
    # Extrae el bloque de las series
    patronvideos = 'VISUALIZACIONES E IDIOMAS DISPONIBLES(.*?)</table>'
    matches = re.compile(patronvideos,re.DOTALL).findall(data)
    data = matches[0]
        
    patronvideos = 'href="http://www.seriesyonkis.com/player/visor_([^\.]+).php?(.*?)id=([^"]+)"'
    patronidiomas = '<td><div align="center"><img height="30" src="http://simages.seriesyonkis.com/images/f/([.*$"]+) alt=([^"]+)"'
    patronvideos  = 'href="http://www.seriesyonkis.com/player/visor_([^\.]+).php.*?id=([^"]+)".*?alt="([^"]+)".*?'
    patronvideos += '<td><div[^>]+><[^>]+>[^<]+</span></div></td>[^<]+<td><div[^>]+><[^>]+>[^<]+</span></div></td>[^<]+'
    patronvideos += '<td><div[^>]+><[^>]+>(.*?)</tr>'
    matches = re.compile(patronvideos,re.DOTALL).findall(data)


    patronvideos1 = 'Durac.+?:\s?([^<]+?)</span>'
    matches1 = re.compile(patronvideos1,re.DOTALL).findall(data)
    print matches1
          
    
    i = 0
    if len(matches)==0:
        print "No hay videos"
        return ""
    else:
        #Solo lo pruebo con megavideo
 
        for match in matches:
	  if match[0] in ["pymeno2","pymeno3","pymeno4","pymeno5","pymeno6"]:
	      id = match[1]
	      logger.info("[seriesyonkis.py]  id="+id)
	      dec = Yonkis.DecryptYonkis()
	      id = dec.decryptID_series(dec.unescape(id))
	      #Anexamos el capitulo
	      servidor = item.server + " - " + match[2] + " - " + matches1[i] + " min "
	      #servidor = item.server + " - " + match[2] 
	      itemlist.append( Item(channel=item.channel, title=servidor   , action="play", url=id , server=item.server, folder=True ) )
	  else:
	    pass
	i = i + 1;
	
    #conn.close()
    return itemlist
        
El canal mostrará la lista de series que tengais guardada en el XBMC, las agrupara por temporadas, y al seleccionar un capitulo lo marcara como visto. Esto ultimo no se ve directamente, me explico, a seleccionar un capitulo se le añade al titulo un marcador X - 1x11 - El... pero no se ve inmediatamente ya que se recoge el listado de la cache. Pero al reiniciar el servidor ya aparece marcado.

Mejoras:
[*]Eliminar la cache: No se si se puede hacer especificamente, aunque es solo para el tema de que se van inmediatamente los vistos
[*]Más canales de series: Soy muy nuevo con el xbmc y pelisalacarta y no se en que canales se puede añadir series a la biblioteca a parte de seriesyonkis. Si me añadeis un listado voy metiendolos
[*]Peliculas: Aqui si que no se como añadirlas a la biblioteca desde el XBMC. Alguien sabe como?

Lo que he puesto aqui es sobre las fuentes, no se para otras versiones si se necesitas los archivos *.pyc. En ese caso pedidmelos que los colgaré.

Espero que lo disfruteis

Re: Libreria XBMC

Publicado: 01 Feb 2011, 11:17
por flamenkito2000
aunque de momento no puedo probarlo,muchas gracias chumy por tu trabajo.

Re: Libreria XBMC

Publicado: 05 Feb 2011, 18:58
por jesus
Genial, estás leyendo la librería de XBMC directamente!

Supongo que no te importará que lo añadamos en la distribución oficial de pelisalacarta ¿verdad?

Re: Libreria XBMC

Publicado: 06 Feb 2011, 08:22
por Chumy
Por supuesto que no me importa!! Todo lo contrario.

Aún así está muy verde, digamos que solo la he probado con las series que he añadido en la biblioteca desde seriesyonkis, ya que no conozco más sitios donde se añaden series a la biblioteca ni peliculas

Un saludo

Re: Libreria XBMC

Publicado: 27 Feb 2011, 14:09
por jesus
Añadido, aunque no se si funciona bien...

Los espacios en blanco de los tabuladores se quedan mal cuando copias y pegas, así que no se si habrá quedado bin.

La próxima vez mejor comprime el fuente directamente y los pones como adjunto al post.

Gracias ;)

Re: Libreria XBMC

Publicado: 01 Mar 2011, 21:47
por peligropowers
perdonad pero los nada entendidos en xbmc, como se hace funcionar la biblioteca ??? hay que añadir alguna dirección?? o editar algún archivo?

Re: Libreria XBMC

Publicado: 02 Mar 2011, 23:11
por jesus
El truco es que al XBMC le das los vídeos y se descarga desde Internet toda la información, sobre todo si son pelis o series.

Desde pelisalacarta puedes añadir "links" a los vídeos, sin descargártelos, y hacer que XBMC los complete con esa información.

Y el canal de Chumy lo que hace es permitir que lo veas desde WiiMC.

Para ver cómo configurar la biblioteca de pelisalacarta en XBMC, tienes este estupendo vídeo de jurrabi:

viewtopic.php?f=6&t=402

Re: Libreria XBMC

Publicado: 04 Mar 2011, 21:36
por peligropowers
pero luego necesita el xbmc arrancado y alguna dirección en algún archivo para que funcione el canal de la biblioteca???

Re: Libreria XBMC

Publicado: 05 Mar 2011, 08:42
por Chumy
Hola peligropowers,

El canal libreria xbmc lee el archivo de datos que genera XBMC. Es decir, primero has de añadir las series a la biblioteca via XBMC y una vez las tengas, podras acceder al archivo desde wiimc sin tener que tener encendido el xbmc.

Re: Libreria XBMC

Publicado: 10 Mar 2011, 16:41
por peligropowers
yo los tengo instaldos en una unidad diferente, xbmc en C y pelis en D. Influirá para que no funione?