Página 1 de 1

Version html - series.ly

Publicado: 01 Dic 2012, 14:31
por igle81
Hola:
He tenido problemas para ver las pelis, os dejo un script que parece que funciona bien por si a alguien le puede interesar:
# -*- coding: utf-8 -*-
#------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# Canal para series.ly
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
#------------------------------------------------------------
import re
import sys
import os
import urllib2

from core import logger
from core import config
from core import scrapertools
from core.item import Item
from servers import servertools

__channel__ = "seriesly"
__category__ = "S,A"
__type__ = "generic"
__title__ = "Series.ly"
__language__ = "ES"
__creationdate__ = "20111119"

DEBUG = config.get_setting("debug")

def isGeneric():
return True

"""Handler para library_service"""
def episodios(item):
# Obtiene de nuevo los tokens
episode_list = serie_capitulos(item)
for episode in episode_list:
episode.extra = item.extra

"""Handler para launcher (library)"""
def findvideos(item):
return capitulo_links(item)

"""Handler para launcher (library)"""
def play(item):
return links(item)

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

itemlist = []

if config.get_setting("serieslyaccount")!="true":
itemlist.append( Item( channel=__channel__ , title="Habilita tu cuenta en la configuración..." , action="openconfig" , url="" , folder=False ) )
else:
auth_token, user_token = perform_login()
if not "invalid login" in user_token:
extra_params = '%s|%s' % ( auth_token, user_token )

itemlist.append( Item(channel=__channel__, title="Buscar", action="search") )
itemlist.append( Item(channel=__channel__, title="Mis series", action="mis_series", extra=extra_params ) )
itemlist.append( Item(channel=__channel__, title="Mis pelis", action="mis_pelis", extra=extra_params ) )
itemlist.append( Item(channel=__channel__, title="Series Mas Votadas", action="series_mas_votadas", extra=extra_params ) )
itemlist.append( Item(channel=__channel__, title="Peliculas Mas Vistas", action="pelis_mas_vistas", extra=extra_params ) )
itemlist.append( Item(channel=__channel__, title="Ultimas Pelis Modificadas", action="ultimas_pelis_modificadas", extra=extra_params ) )
else:
itemlist.append( Item( channel=__channel__ , title="Cuenta incorrecta, revisa la configuración..." , action="" , url="" , folder=False ) )

return itemlist

def openconfig(item):
if "xbmc" in config.get_platform() or "boxee" in config.get_platform():
config.open_settings( )
return []

def getCredentials():
logged = False

try:
count = 0
while (not logged and count<6):
auth_token,user_token = perform_login()
post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
url='http://series.ly/api/isUserLogged.php?type=&format=json'
logresult = load_json(scrapertools.cache_page(url, post=post))
if logresult == None or logresult['result'] != '1':
count = count + 1
else:
logged=True
except:
return [auth_token,user_token, logged, "Error al obtener credenciales"]

if(not logged):
return [auth_token,user_token, logged, "Despues de 5 intentos no hemos podido loguear"]

return [auth_token,user_token, logged, user_token]

def mis_pelis(item):

itemlist = []
itemlist.append( Item(channel=__channel__, title="Vistas", action="mis_pelis_categoria", url='Watched') )
itemlist.append( Item(channel=__channel__, title="Favoritas", action="mis_pelis_categoria", url='Favourite') )
itemlist.append( Item(channel=__channel__, title="Pendientes", action="mis_pelis_categoria", url='Pending') )

return itemlist

def mis_pelis_categoria(item):

logger.info("[seriesly.py] mis_pelis")

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()

# Extrae las entradas (carpetas)
post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )

# Peliculas Usuario (Filtradas por categoria)
url='http://series.ly/api/userMovies.php?format=json'
data = scrapertools.cache_page(url, post=post)
movieList = load_json(data)
if movieList == None : movieList = []
logger.info("hay %d peliculas" % len(movieList))

cat_filter = item.url

itemlist = []
default = 'Pending'
for movieItem in movieList:
# Añade al listado de XBMC

status = movieItem.get('status',default)
if status == cat_filter:
itemlist.append(
Item(channel=__channel__,
action = "peli_links",
title = '%(title)s (%(year)s)' % movieItem,
url = 'http://series.ly/api/detailMovie.php?id ... ormat=json' % qstr(movieItem['idFilm']),
thumbnail = movieItem['poster'],
plot = "",
extra = '%s|%s' % ( qstr(auth_token), qstr(user_token) )
)
)

itemlist = sorted( itemlist , key=lambda item: item.title)
return itemlist


def mis_series(item):

logger.info("[seriesly.py] mis_series")

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()

# Series Usuario
post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
url='http://series.ly/api/userSeries.php?type=&format=json'
serieList = load_json(scrapertools.cache_page(url, post=post))
if serieList == None : serieList = []

logger.info('[seriesly.py] hay %d series' % len(serieList))

itemlist = []
for serieItem in serieList:
logger.info("serieItem="+str(serieItem))
#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'}

if serieItem['title'] is not None:
status = serieItem['status']
if status == 'Pending' : serieItem['estado'] = 'Pendiente'
elif status == 'Watching' : serieItem['estado'] = 'Viendo'
elif status == 'Finished' : serieItem['estado'] = 'Finalizada'
else : serieItem['estado'] = '?'
# Añade al listado de XBMC
itemlist.append(
Item(channel=__channel__,
action = 'serie_capitulos',
title = '%(title)s (%(seasons)d Temporadas) (%(episodes)d Episodios) [%(estado)s]' % serieItem,
url = 'http://series.ly/api/detailSerie.php?id ... ormat=json' % serieItem,
thumbnail = serieItem['thumb'],
plot = "",
show = serieItem['title'],
extra = item.extra
)
)

itemlist = sorted( itemlist , key=lambda item: item.title)

return itemlist

def serie_capitulos(item):

logger.info('[seriesly.py] serie_capitulos')

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()

# Extrae las entradas (carpetas)
post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
serieInfo = load_json(scrapertools.cache_page(item.url, post=post))
if serieInfo == None : serieInfo = {}
if (not serieInfo.has_key('episode')) or serieInfo['episode'] == None : serieInfo['episode'] = []

logger.info('hay %d capitulos' % len(serieInfo['episode']))

itemlist = []
for episode in serieInfo['episode'] :
if episode.has_key('viewed'):
viewed = episode['viewed']
if viewed == '0' : episode['estado'] = ' [Pendiente]'
elif viewed == '1' : episode['estado'] = ' [Visto]'
else : episode['estado'] = ' [?]'
else:
episode['estado'] = ''

itemlist.append(
Item(channel=__channel__,
action = 'capitulo_links',
title = '%(season)s - %(title)s%(estado)s' % episode,
url = 'http://series.ly/api/linksCap.php?idCap ... ormat=json' % episode,
thumbnail = item.thumbnail,
plot = "",
show = item.show,
extra = item.extra
)
)

if config.get_platform().startswith("xbmc") or config.get_platform().startswith("boxee"):
itemlist.append( Item(channel='seriesly', title="Añadir esta serie a la biblioteca de XBMC", url=item.url, action="add_serie_to_library", extra="serie_capitulos###", show=item.show) )

return itemlist

def capitulo_links(item):
logger.info("[seriesly.py] capitulo_links")

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()

# Extrae las entradas (carpetas)
post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
data = scrapertools.cache_page(item.url+"&"+post)
linkList = load_json(data)
if linkList == None : linkList = []

logger.info("hay %d videos" % len(linkList))

itemlist = []
for link in linkList:

#hd = link['hd']
#if hd == '0' : link['hdtag'] = ''
#elif hd == '1' : link['hdtag'] = ' (HD)'
#else : link['hdtag'] = ' (?)'

itemlist.append(
Item(channel=__channel__,
action = "links",
title = '%(info)s - %(host)s - %(lang)s(sub %(sub)s)' % link,
url = link['url'],
thumbnail = item.thumbnail,
plot = "",
extra = ''
)
)

return itemlist

def links(item):

itemlist = []
try:
count = 0
exit = False
while(not exit and count < 5):
#A veces da error al intentar acceder
try:
page = urllib2.urlopen(item.url)
urlvideo = "\"" + page.geturl() + "\""
exit = True
except:
count = count + 1

logger.info("urlvideo="+urlvideo)
for video in servertools.findvideos(urlvideo) :
#scrapedtitle = title.strip() + " " + match[1] + " " + match[2] + " " + video[0]
scrapedtitle = scrapertools.htmlclean(video[0])
scrapedurl = video[1]
server = video[2]
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))
except:
import sys
for line in sys.exc_info():
logger.error( "%s" % line )


return itemlist

def limpia_lista(movielist, campo):

cleanlist = []
for movieItem in movielist:
if(movieItem[campo] is not None):
cleanlist.append( movieItem)
return cleanlist

def peli_links(item):

logger.info("[seriesly.py] peli_links")

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()

# Extrae las entradas (carpetas)
post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
data = scrapertools.cache_page(item.url, post=post)
linkList = load_json(data)
if linkList == None : linkList = []

logger.info("hay %d videos" % len(linkList))
itemlist = []
try:
for link in linkList['links']:

#hd = link['highDef']
#if hd == '0' : link['hdtag'] = ''
#elif hd == '1' : link['hdtag'] = ' (HD)'
#else : link['hdtag'] = ' (?)'

#Neofreno: Cambio a partir de aquí
link['titletag'] =linkList['title'];

itemlist.append(
Item(channel=item.channel,
action = "links",
title = '%(host)s - %(lang)s %(quality)s' % link,
url = qstr(link['url'].strip()),
thumbnail = item.thumbnail,
plot = linkList['synopsis'],
extra = ''
)
)
except:
import sys
for line in sys.exc_info():
logger.error( "%s" % line )

return itemlist

def series_mas_votadas(item):

logger.info("[seriesly.py] series_mas_votadas")

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()

# Extrae las entradas (carpetas)
url="http://series.ly/api/top.php?&format=json&id=1"
post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )
topInfo = load_json(scrapertools.cache_page(url, post=post))
if topInfo == None : topInfo = {}
if topInfo['series_mes_votades'] == None : topInfo['series_mes_votades'] = []

logger.info("hay %d series" % len(topInfo['series_mes_votades']))

itemlist = []
for serieItem in topInfo['series_mes_votades']:
# Añade al listado de XBMC
itemlist.append(
Item(channel=item.channel,
action = 'serie_capitulos',
title = '%(nom_serie)s [%(vots)s Votos]' % serieItem,
url = 'http://series.ly/api/detailSerie.php?id ... ormat=json' % qstr(serieItem['id_serie']),
thumbnail = '',
plot = "",
extra = item.extra
)
)
return itemlist

def pelis_mas_vistas(item):

logger.info("[seriesly.py] pelis_mas_vistas")

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()
post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )

# Extrae las entradas (carpetas)
url="http://series.ly/api/top.php?&format=json&id=2"
topInfo = load_json(scrapertools.cache_page(url, post=post))
if topInfo == None : topInfo = {}
if topInfo['pelis_mes_vistes'] == None : topInfo['pelis_mes_vistes'] = []

logger.info("hay %d pelis" % len(topInfo['pelis_mes_vistes']))

itemlist = []
for movieItem in topInfo['pelis_mes_vistes']:
# Añade al listado de XBMC
itemlist.append(
Item(channel=item.channel,
action = 'peli_links',
title = '%(nom_peli)s' % movieItem,
url = 'http://series.ly/api/detailMovie.php?id ... ormat=json' % qstr(movieItem['id_peli']),
thumbnail = '',
plot = "",
extra = item.extra
)
)
return itemlist

def ultimas_pelis_modificadas(item):

logger.info("[seriesly.py] ultimas_pelis_modificadas")

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()
post = 'auth_token=%s&user_token=%s' % ( qstr(auth_token), qstr(user_token) )


# Extrae las entradas (carpetas)
url="http://series.ly/api/top.php?&format=json&id=3"
topInfo = load_json(scrapertools.cache_page(url, post=post))
if topInfo == None : topInfo = {}
if topInfo['ultimes_pelis'] == None : topInfo['ultimes_pelis'] = []

logger.info("hay %d pelis" % len(topInfo['ultimes_pelis']))

itemlist = []
for movieItem in topInfo['ultimes_pelis']:
# Añade al listado de XBMC
itemlist.append(
Item(channel=item.channel,
action = 'peli_links',
title = '%(nom_peli)s [%(any)s]' % movieItem,
url = 'http://series.ly/api/detailMovie.php?id ... ormat=json' % qstr(movieItem['id_peli']),
thumbnail = '',
plot = "",
extra = item.extra
)
)
return itemlist


def search(item,texto, categoria="*"):

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()

item.channel="seriesly"

res = search_series(auth_token, user_token, item, texto)
res.extend(search_films(auth_token, user_token, item, texto))

return res

def search_series(auth_token, user_token, item, texto):
logger.info("[seriesly.py] search")

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()
post = 'auth_token=%s' % ( qstr(auth_token) )

url = 'http://series.ly/api/search.php?search= ... ormat=json' % ( qstr(texto) )

# Extrae las entradas (carpetas)
serieList = load_json(scrapertools.cache_page(url, post=post))
if serieList == None : serieList = []

logger.info("hay %d series" % len(serieList))

itemlist = []
for serieItem in serieList:

itemlist.append(
Item(channel=item.channel,
action = 'serie_capitulos',
title = 'Serie: %(title)s (%(seasons)d Temporadas) (%(episodes)d Episodios)' % serieItem,
url = "http://series.ly/api/detailSerie.php?caps=1&auth_token=" + auth_token + "&user_token=" + user_token + "&idSerie=" + serieItem['idSerie'] + "&format=json",
thumbnail = serieItem['poster'],
plot = '',
extra = '%s|%s' % (auth_token, user_token)
)
)

return itemlist

def search_films(auth_token, user_token, item, texto):
logger.info("[seriesly.py] search_films")

# Obtiene de nuevo los tokens
auth_token, user_token, logged, loginmessage = getCredentials()
post = 'auth_token=%s' % ( qstr(auth_token) )

url = 'http://series.ly/api/search.php?search= ... ormat=json' % ( qstr(texto) )

# Extrae las entradas (carpetas)
# [{"idFilm":"?","title":"?","year":"?","genre":"?","poster":"http://?","thumb":"http://?","small_thumb":"http://?"}

movieList = load_json(scrapertools.cache_page(url, post=post))
if movieList == None : movieList = []

logger.info("hay %d peliculas" % len(movieList))

itemlist = []
for movieItem in movieList:

itemlist.append(
Item(channel=item.channel,
action = 'peli_links',
title = 'Peli: %(title)s (%(year)s) (%(genre)s)' % movieItem,
url = "http://series.ly/api/detailMovie.php?idFilm=" + movieItem['idFilm'] + "&format=json",
thumbnail = movieItem['poster'],
plot = '',
extra = '%s|%s' % (auth_token, user_token)
)
)

return itemlist

def load_json(data):
# callback to transform json string values to utf8
def to_utf8(dct):
rdct = {}
for k, v in dct.items() :
if isinstance(v, (str, unicode)) :
rdct[k] = v.encode('utf8', 'ignore')
else :
rdct[k] = v
return rdct
try :
import json
json_data = json.loads(data, object_hook=to_utf8)
return json_data
except:
import sys
for line in sys.exc_info():
logger.error( "%s" % line )

''' URLEncode a string '''
def qstr(string):
return string # urllib2.quote(string)

def perform_login():

LOGIN = config.get_setting("serieslyuser")
PASSWORD = config.get_setting("serieslypassword")

# AuthToken
url = "http://series.ly/api/auth.php?api=8&sec ... UwU8dWBbMW"
data = scrapertools.cache_page(url)
logger.info("****")
logger.info(data)
logger.info("****")
auth_token = data.strip()

# UserToken
url = "http://series.ly/scripts/login/login.php"
post = "lg_login=%s&lg_pass=%s&callback_url=no&auth_token=%s&autologin=" % ( qstr(LOGIN), qstr(PASSWORD), qstr(auth_token) )
data = scrapertools.cache_page(url,post=post)
logger.info("****")
logger.info(data)
logger.info("****")
user_token=data.strip()

return [auth_token,user_token]

Re: Version html - series.ly

Publicado: 08 Dic 2012, 10:56
por jurr
Como se utiliza este script? donde hay que ponerlo??

Un saludo

Re: Version html - series.ly

Publicado: 09 Dic 2012, 18:10
por igle81
en la carpeta chanels,, si tienes pelisalacarta en c: seria C:\pelisalacarta\pelisalacarta\channels\seriesly.py, nose si sive tambien para plex, pero seguramente, lo mismo pero en

C:\Users\XXX\AppData\Local\Plex Media Server\Plug-ins\pelisalacarta.bundle\Contents\Code\pelisalacarta\channels

Adjunto el fichero mejor.

Re: Version html - series.ly

Publicado: 18 Dic 2012, 18:38
por jesus
He visto los cambios pero no entiendo en qué consisten...

De todas formas este canal es raro, intento ver por ejemplo enlaces de "Prometheus" y no devuelve ninguno, pero en la web sí que hay.

Yo creo que el API que nos han dado es de cartón-piedra :lol: :lol: :lol: :lol: :lol:

Re: Version html - series.ly

Publicado: 27 Dic 2012, 20:58
por igle81
Mas que nada era porque en la version html para abrirlo desde la xbox360 en el navegador, nunca me cogia las peliculas y modificando esa parte del script he conseguido que me salgan las pelis, por lo que he visto le pasa a mucha gente.

Saludos.

Re: Version html - series.ly

Publicado: 11 Ene 2013, 23:08
por jesus
Sí, sí, lo que pasa es que he visto el código y no entiendo los cambios. Y a mí no me arregla el problema.

¿Puedes explicarme un poco qué has cambiado para que funcione?