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
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" ])
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
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