Para manejar JSON desde pelisalacarta cual es la mejor opcion: ¿Utilizar jsontools.load_json() (dentro de jsontools.py) o directamente el json.loads() incluido en el interprete?
JSON

-
- Mensajes: 801
- Registrado: 12 Jun 2014, 23:28
JSON
Mensaje por super_berny » 07 Oct 2015, 00:01
Para manejar JSON desde pelisalacarta cual es la mejor opcion: ¿Utilizar jsontools.load_json() (dentro de jsontools.py) o directamente el json.loads() incluido en el interprete?
Objeto Item
Modulo tmdb
Mejorando nuestros canales
Github y Pelisalacarta
Tips Github y Pelisalacarta
Re: JSON
Mensaje por robalo » 07 Oct 2015, 08:00
Publicidad
-
- Mensajes: 801
- Registrado: 12 Jun 2014, 23:28
Re: JSON
Mensaje por super_berny » 07 Oct 2015, 11:33
Efectivamente es lo mismo, de ahi mi dudas: ¿Seguia vigente jsontools.py o era una cosa obsoleta? y ¿es json.loads compatible con todas las plataformas?robalo escribió:Creo que lo mismo da que da lo mismo siempre que funcione en otras plataformas no kodi.
Objeto Item
Modulo tmdb
Mejorando nuestros canales
Github y Pelisalacarta
Tips Github y Pelisalacarta
-
- Mensajes: 801
- Registrado: 12 Jun 2014, 23:28
Re: JSON
Mensaje por super_berny » 22 Oct 2015, 10:52
Objeto Item
Modulo tmdb
Mejorando nuestros canales
Github y Pelisalacarta
Tips Github y Pelisalacarta
Re: JSON
Mensaje por robalo » 22 Oct 2015, 12:27

Para las pelis solo tienes que crear una lista de enlaces en url por si tiene más de una enlace a vídeo para presentarla en findvideos, en findvideos mostrar las opciones y mandar a play la opción elgida con una única opción, o plantarte en findvideos eso ya como más te guste.
No lo he mirado mucho, pero creo que recorriendo data_dict['item'] saca todos los datos de interés de las fichas de la página x
-
- Mensajes: 801
- Registrado: 12 Jun 2014, 23:28
Re: JSON
Mensaje por super_berny » 26 Oct 2015, 07:28
Ítem.extra="series|1|azul"
Vs.
Ítem.extra={"tipo":"series", "page": 1, " color":"azul"}
y
Ítem.extra.split[1]=2
Vs.
Ítem.extra["page"]=2
Ya se q hasta ahora lo hemos solucionado mediante str.split y q algunos direis "a mi ya me esta bien así" pero yo creo es mas claro y q ayuda a la hora de mantener los canales (sobretodo si no eres el creador)
Objeto Item
Modulo tmdb
Mejorando nuestros canales
Github y Pelisalacarta
Tips Github y Pelisalacarta
Re: JSON
Mensaje por robalo » 27 Oct 2015, 09:20
para cosas simples split es lo más fácil, en el origen extra=texto y en el destino dict = item.extra.split como es el caso de los tres valores que muestras.
para un mazo gordo de datos, como es el caso de pepecine, split es una locura. O bien te lo curras haciendo scraped del texto que pasas en el atributo extra o el en destido el texto lo pasas a dict y queda más mono para el que lee el code
Te pego lo que hice cuando se inició el hilo de pepecine para poder hablar con fundamento y del que salió el esquema para la respuesta a la primera pregunta del hilo.
En episodios te he puesto unas líneas con print para que veas con claridad el tema del que se habla.
No espero respuestas de tipo esto no funciona, esto sí, esto me gusta, esto no me gusta, etc. Te lo paso para que puedas ver el conjunto que aunque no lo dices creo que el tema es por lo de pepecine
Código: Seleccionar todo
# -*- coding: utf-8 -*-
#------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# Canal para pepecine
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
#------------------------------------------------------------
import urlparse,urllib2,urllib,re
import os, sys
from core import logger
from core import config
from core import scrapertools
from core import jsontools
from core.item import Item
from servers import servertools
__channel__ = "pepecine"
__category__ = "F,S"
__type__ = "generic"
__title__ = "Pepecine"
__language__ = "ES"
host = "http://pepecine.com"
def isGeneric():
return True
def mainlist(item):
logger.info("[pepecine.py] mainlist")
itemlist = []
itemlist.append( Item( channel=__channel__, action="fichas", title="Películas", url=urlparse.urljoin(host,"peliculas-online"), extra="movie|1" ) )
itemlist.append( Item( channel=__channel__, action="fichas", title="Series", url=urlparse.urljoin(host,"series-online"), extra="series|1" ) )
return itemlist
def fichas(item):
logger.info("[pepecine.py] fichas")
itemlist = []
token = scrapertools.get_match(
scrapertools.cache_page(item.url),
"token: '([^']+)'"
)
## Fichas por páginas por contenedor. No es bueno meter muchas, puede causar error.
por_pagina = 20
pagina = int(item.extra.split('|')[1])
tipo = item.extra.split('|')[0]
path = "/titles/paginate?_token=%s&perPage=%s&page=%s&order=mc_num_of_votesDesc&type=%s&minRating=&maxRating=" % (token, por_pagina, pagina, tipo)
data = scrapertools.cache_page(urlparse.urljoin(host,path))
data_dict = jsontools.load_json(data)
id = 0
for ficha in data_dict['items']:
if id != ficha['id']:
title = ficha['title'] + \
" (" + \
verde%ficha['year'] + \
") (" + \
naranja%ficha['mc_user_score'] + \
") (" + \
azul%str(len(ficha['link'])) + \
" enlaces)"
url = str(ficha['id'])
plot = ficha['plot']
fanart = ficha['background']
thumbnail = ficha['poster']
fulltitle = ficha['title']
show = ficha['title']
## pasando de pijadas dict = literal string
extra = re.sub(
r".(u'episode': \d+), u'temp_id': [^,]+, (u'url': '[^']+'), (u'season': \d+), u'created_at': '[^']+', u'approved': \d+, u'updated_at': '[^']+', u'reports': \d+, (u'label': '[^']+'), u'type': '[^']+', u'id': \d+, u'negative_votes': \d+, (u'quality': '[^']+'), u'title_id': \d+, u'positive_votes': \d+.",
r'{\3, \1, \2, \4, \5}',
str(ficha['link'])
)
#extra = str(ficha['link'])
action = "findvideos"
if tipo == "series":
action = "episodios"
itemlist.append( Item( channel=__channel__, title=title, action=action, url=url, plot=plot, fanart=fanart, thumbnail=thumbnail, fulltitle=fulltitle, show=show, extra=extra) )
id = ficha['id']
if len(itemlist) == por_pagina and (por_pagina * pagina) < data_dict['totalItems']:
itemlist.append( Item( channel=__channel__, title=naranja % ">>Página siguiente", action="fichas", url=item.url, extra=tipo + "|" + str(pagina + 1)) )
return itemlist
def episodios(item):
logger.info("[pepecine.py] episodios")
print "## TEXT ##########################################"
print item.extra
print "## DICT ##########################################"
exec "extra_data = {u'links':" + item.extra + "}"
print extra_data['links']
print "##################################################"
itemlist = []
## pasando de pijadas dict = literal string
patron = "\{u'season': (\d+), u'episode': (\d+),"
enlaces = re.compile(patron,re.DOTALL).findall(item.extra)
s_e = set()
for season, episode in enlaces:
if ( str(season) + str(episode).zfill(2) ) not in s_e:
## pasando de pijadas dict = literal string
patron = "({u'season': " + season + ", u'episode': " + episode + ".*?})"
enlaces = re.compile(patron,re.DOTALL).findall(item.extra)
extra = ""
for link in enlaces:
extra+= link + "|"
extra = extra[:-1]
title = item.show + \
" - " + \
naranja%str(season) + \
"x" + \
naranja%str(episode).zfill(2) + \
" (" + \
azul%str(len(extra.split('|'))) + \
" enlaces)"
fulltitle = item.show + " - " + str(season) + "x" + str(episode).zfill(2)
itemlist.append( Item( channel=__channel__, title=title, action="findvideos", url=item.url, plot=item.plot, fanart=item.fanart, thumbnail=item.thumbnail, fulltitle=fulltitle, show=item.show, extra=extra) )
s_e.add( str(season) + str(episode).zfill(2) )
itemlist = sorted(itemlist, key=lambda item: item.title)
return itemlist
def findvideos(item):
logger.info("[pepecine.py] findvideos")
itemlist = []
## pasando de pijadas dict = literal string
patron = "'url': '([^']+)'.*?'label': '([^']+)'.*?'quality': '([^']+)'"
enlaces = re.compile(patron,re.DOTALL).findall(item.extra)
for url, lang, quality in enlaces:
title = "Ver en " + \
azul%servertools.get_server_from_url(url) + \
" (" + \
verde%quality + \
") (" + \
naranja%lang + \
")"
url = url
plot = item.plot
fanart = item.fanart
thumbnail = item.thumbnail
fulltitle = item.fulltitle
show = item.show
itemlist.append( Item( channel=__channel__, title=title, action="play", url=url, plot=plot, fanart=fanart, thumbnail=thumbnail, fulltitle=fulltitle, show=show, folder=False ) )
return itemlist
def play(item):
logger.info("[pepecine.py] play")
itemlist = servertools.find_video_items(data=item.url)
for videoitem in itemlist:
videoitem.title = item.show
videoitem.fulltitle = item.fulltitle
videoitem.thumbnail = item.thumbnail
videoitem.channel = __channel__
return itemlist
if config.is_xbmc():
azul = "[COLOR blue]%s[/COLOR]"
naranja = "[COLOR orange]%s[/COLOR]"
rojo = "[COLOR red]%s[/COLOR]"
verde = "[COLOR green]%s[/COLOR]"
else:
azul = '<span style="color: blue">%s</span>'
naranja = '<span style="color: orange">%s</span>'
rojo = '<span style="color: red">%s</span>'
verde = '<span style="color: green">%s</span>'
-
- Mensajes: 801
- Registrado: 12 Jun 2014, 23:28
Re: JSON
Mensaje por super_berny » 27 Oct 2015, 11:42
Por eso necesitaba el json.dumps() para convertir un objeto json en string en origen y despues en destino json.load() hacer el proceso inverso. Pero como dije de momento no me hace falta, mi item.extra ahora solo tiene un parametro (movie o series)robalo escribió:El motivo de no usar dict en extra es simple, no lo acepta.
Sobre pepecine no te preocupes va ya muy avanzado, sobretodo por la colaboracion de Mario2000 que me ha permitido incluir un par de paginas php en su server.
No he probado el codigo q adjuntas, pero la primera version del otro hilo tenia el problema q los resultado no tienen por q tener enlaces y que de todas las posibles ordenaciones ninguna permite ordenar por enlace mas nuevo (ultimas actualizaciones)

Objeto Item
Modulo tmdb
Mejorando nuestros canales
Github y Pelisalacarta
Tips Github y Pelisalacarta
Re: JSON
Mensaje por robalo » 27 Oct 2015, 12:09
Sí, dices que "Por eso necesitaba el json.dumps() para convertir un objeto json en string en origen y despues en destino json.load() hacer el proceso inverso. Pero como dije de momento no me hace falta, mi item.extra ahora solo tiene un parametro (movie o series)"
Pero también dices "Ya se q hasta ahora lo hemos solucionado mediante str.split y q algunos direis "a mi ya me esta bien así" pero yo creo es mas claro y q ayuda a la hora de mantener los canales (sobretodo si no eres el creador)"
Mi respuesta es coherente a la escrito. Dependiendo de los gustos, posible solución y ejemplo para un mazo de datos en un dict, evidentemente a mi forma de hacer las cosas. También es válido para dos o tres datos pero vamos, personalmente me decanto por lo de a casos sencillos soluciones sencillas
- Ayuda sobre plugins
- ↳ tvalacarta
- ↳ Problemas (no me funciona...)
- ↳ Preguntas (cómo se hace...)
- ↳ Sugerencias (estaría bien que hubiera...)
- ↳ pelisalacarta
- ↳ Problemas (no me funciona...)
- ↳ Preguntas (cómo se hace...)
- ↳ Sugerencias (estaría bien que hubiera...)
- ↳ pelisalacarta (For Italian users)
- ↳ Problemi (Non mi funziona...)
- ↳ Domande (Come fare a...)
- ↳ Suggerimenti (Sarebbe bello che...)
- ↳ mywebtv
- ↳ Problemas (no me funciona...)
- ↳ Preguntas (cómo se hace...)
- ↳ Sugerencias (estaría bien que hubiera...)
- ↳ MediaExplorer
- ↳ Balandro
- ↳ Otros plugins
- ↳ Alfa
- ↳ Alfa (For Italian users)
- ↳ Tutoriales
- Ayuda sobre mediacenters
- ↳ XBMC / Kodi
- ↳ Plex
- ↳ Android
- ↳ Raspberry Pi
- ↳ Boxee
- ↳ WiiMC
- ↳ Enigma 2
- ↳ Otros media center
- Sugerencias
- ↳ Nuevos canales
- ↳ Mejoras
- Desarrolladores
- Comunidad
¿Qué es Mi media center?
Este es el foro oficial de soporte para pelisalacarta, tvalacarta y mywebtv.
También es un lugar para compartir tus experiencias con dispositivos multimedia y software media center, puede que encuentres algo interesante que ni siquiera sabías que se podía hacer.
Primeros pasos en Kodi
Si estás empezando con Kodi, o si estás interesado en sacarle más partido, puedes echar un vistazo a esta colección de video-tutoriales.
Aprenderás a crear y optimizar tu biblioteca, a instalar add-ons, a buscar subtítulos...
Cómo reportar un problema
Si tienes un problema en alguno de los plugins y quieres reportarlo, no olvides incluir el log.
Para que resulte útil tienes que activar la opción de "log completo" en el plugin, luego reiniciar Kodi y dar los pasos necesarios hasta que se produzca el problema.
Luego copia tu fichero de log, siguiendo las instrucciones que se describen en este enlace, e inclúyelo al final de la descripción de tu problema.
Aprende a programar para Kodi
Si sabes programar, esta serie de tutoriales que describen paso a paso cómo desarrollar tu propio add-on para Kodi.
Y si quieres añadir tus propios canales a pelisalacarta también te contamos paso a paso cómo hacerlo en este enlace.
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados