Página 1 de 6

Cambio de xml a json

Publicado: 11 Nov 2015, 20:26
por super_berny
Bueno, hoy os traigo un tema de esos q a mi me gustan:
Os propongo cambiar los XML de los canales por JSON. :D

El motivo:
Es mucho mas sencillo manejar JSON mediante las jsontools, que los XMLs tratandolos como texto que es lo que hacemos ahora.

Veamos un ejemplo de xml:

Código: Seleccionar todo

infile = open( local_version_path )
data = infile.read()
infile.close();
patronversion  = '<version>([^<]+)</version>'       
local_version = re.compile(patronversion,re.DOTALL).findall(data)[0]
patronurl= '<update_url>([^<]+)</update_url>'
update_url = re.compile(patronurl,re.DOTALL).findall(data)[0]
y ahora si fuera JSON

Código: Seleccionar todo

infile=open(file_directory)
data = infile.read()
infile.close()
json_data = jsontools.loads(data)
local_version = json_data['version']
update_url = json_data['update_url']
:roll: Vale, es posible q no se aprecie bien la diferencia, pero imaginaros q queramos obtener todos los campos del fichero XML.
Y ahora imaginar que quisieramos guardar algo en esos ficheros, o mejor aun modificar uno de los campos, la cosa se complica en XML ¿no? Habra quien piense ¿por q no tratar los XML como lo q son y no como texto? Pues por lo q yo he visto aunque hay librerias para hacerlo, tampoco es facil.

¿Que podriamos querer modificar en ese fichero?
Pues muy facil, por ejemplo la configuracion propia del canal (user/contraseña, colores predeterminados, orden en las listas, etc...) o incluso la fecha de la ultima vez que se abrio el canal (para ordenarlos en el channelselector por ejemplo) :o

Ahora q estamos acostumbrados a los XML viene este a ... :lol:
Seguro q alguno lo ha pensado, incluso alguno le debe parecer un sistema mas complicado de escribir.
Pero para ello existen webs como:

Re: Cambio de xml a json

Publicado: 14 Nov 2015, 00:59
por super_berny
:cry: :cry:
Nadie dice nada? Jesús, q te parece?
Róbalo? Venga animate q hecho de menos nuestros debates.
:lol: :lol:

Re: Cambio de xml a json

Publicado: 14 Nov 2015, 12:37
por jesus
Yo lo veo muy bien :)

La idea es la misma que perseguíamos con los xml que habíamos empezado a implementar:

1) Todos los "metadatos" del canal están en ese fichero, no solo lo necesario para la actualización sino también la configuración, la categoría dentro del menú, si es de adultos etc.
2) La configuración propia del canal también se puede meter ahí, ahora mismo ya tenemos demasiadas opciones de configuración para algunas plataformas.
3) El canal será independiente de todo lo demás, de forma que cuando un usuario copie el fichero py y el json en su directorio "channels" no tendrá que hacer nada más.

Como el JSON es muy cabezota, y si hay algún fallo ni se abrirá, veo muchos problemas reportados del tipo "He editado el json como me ha dicho super_berny y ahora no me sale el canal" :)

Se te ocurre alguna forma de evitarlo?

Re: Cambio de xml a json

Publicado: 14 Nov 2015, 13:41
por super_berny
Me alegra que al Jefe le parezca buena idea :lol: :lol:
jesus escribió:3) El canal será independiente de todo lo demás, de forma que cuando un usuario copie el fichero py y el json en su directorio "channels" no tendrá que hacer nada más.
Bueno, bueno no nos vengamos arriba tan pronto :D de momento con esto solo no basta. Cuando hice algo similar para la 3.9 me tope con el problema q al abrir el plugin y entrar en channelselector no se pueden recorrer todos los archivos de canales para ver cuales hay q añadir al listado y cuales no (dependiendo del idioma, adulto o categoria) por q eso tarda mucho. Ademas si se añade un nuevo canal al repositorio este no se copia automaticamente en el directorio channels de los usuarios automaticamente como seria deseable.
¿Como lo solucione?
  • Creando un indice (si, tb es un json :lol: q me gustan mucho :lol: ) que contiene los datos mas significativos de cada canal del directorio channels del usuario (nombre/id, categoria, adulto, idioma) y ademas la fecha en la q fue añadido al directorio.
  • Al entrar en channeselector, si las actualizaciones de canales estan activadas, se comprueba existen canales en el repositorio remoto q no este en el indice, y si es el caso se descarga.
  • Al entrar en un determinado canal, si las actualizaciones de canales estan activadas, se comprueba q la fecha de instalacion de ese canal en el indice sea posterior a la fecha de modificacion del mismo canal en su repositorio (en mi caso era un solo repositorio, pero puede personalizarse) y si no lo es se actualiza el canal.
jesus escribió: Como el JSON es muy cabezota, y si hay algún fallo ni se abrirá, veo muchos problemas reportados del tipo "He editado el json como me ha dicho super_berny y ahora no me sale el canal" :)

Se te ocurre alguna forma de evitarlo?
Bueno habra que ir viendo q tipo de fallos son, por ejemplo la primera de las web q puse en el otro mensaje comprueba la sintaxis del json (q no te olvides comas, parentesis o llaves), ahora q si son errores de claves mal escritas o falta de claves importantes como el id o adult, pues sencillamente podriamos hacer q el canla no se abra hasta q este bien.
Pero ya digo q eso ya se ira viendo.

Re: Cambio de xml a json

Publicado: 14 Nov 2015, 17:01
por SeiTaN
Tiene muy buena pinta.

¿Se podría implementar que determinados canales no se actualizasen al cambiar el JSON? Tengo un par con modificaciones y no quiero perderlas, aparte que quiero implementar otras cosas asociadas al canal, como series personalizadas y no sabía donde guardar la configuración.

edito: ¿No habia hecho alguien algo con el tema de las actualizaciones? que comparaba el hash de los ficheros y si era distinto lo bajaba.

Si se usa el fichero como configuración y alguien modifica la estructura posteriormente, al bajar la nueva versión me machacaría mis datos, o al incrementar el número de versión.

No se si lo que digo tiene mucha lógica o ya lo teneis todo controlado.

Saludos.

Re: Cambio de xml a json

Publicado: 14 Nov 2015, 17:27
por jesus
super_berny escribió:Me alegra que al Jefe le parezca buena idea :lol: :lol:
jesus escribió:3) El canal será independiente de todo lo demás, de forma que cuando un usuario copie el fichero py y el json en su directorio "channels" no tendrá que hacer nada más.
Bueno, bueno no nos vengamos arriba tan pronto :D de momento con esto solo no basta.
¿Y qué te parece esta joya? Ja ja ja

https://github.com/tvalacarta/pelisalacarta/pull/66

Lo del índice no es mala idea, sería una especie de cache. Si hay algún fichero con fecha de modificación posterior a la del índice, lo actualiza. Si no, lee el índice y ahorra tiempo.

Lo de hacer un canal que no se auto-actualice también es buena idea, puede ser una de las "settingss" específicas del canal.

Re: Cambio de xml a json

Publicado: 14 Nov 2015, 18:01
por super_berny
SeiTaN escribió:¿Se podría implementar que determinados canales no se actualizasen al cambiar el JSON? Tengo un par con modificaciones y no quiero perderlas, aparte que quiero implementar otras cosas asociadas al canal, como series personalizadas y no sabía donde guardar la configuración.
Para estos caso se me ocurren un par de cosas:
[*]Podrias edita el json de tu canal y poner uns url_update falsa. No la encontraria el repositorio remoto y por tanto no habria de donde actualizar.
[*]Se podria incluir en las configuracion propias del canal (en el futuro) una opcion de actualizar o no. Es decir para actualizar un determinado canal deberia estar activo en la configuracion del canal y la configuracion global de actualizar canales.

Re: Cambio de xml a json

Publicado: 14 Nov 2015, 18:13
por divadr
Buenas, yo estoy muy interesado en todo lo que se está hablando aquí...

Personalmente, veo mucho mas practico de usar JSON que XML... por lo menos desde el punto de vista del código, para editar los archivos quizá es verdad que XML es mas visual...

Pero me surgen algunas dudas:
  • Se ha comentado de guardar las configuraciones de los canales en el JSON, pero eso implicaría que cuando se actualice el canal (JSON + PY) las configuraciones se perderían... o habría que pasarlas manualmente, y cuando se actualice el plugin mucho mas... yo veo bien que se guarden los ajustes de los canales en archivos independientes, pero en la carpeta donde están los ajustes, no en la del plugin...

    Como seria para guardar las configuraciones en el JSON? ya que el menú de configuración de kodi no permite guardar ajustes en otra ruta, y en otras plataformas todavía lo veo mas difícil... y si la idea es mediante el mismo canal a través de los ítems para introducir los datos... no lo acabo de ver del todo práctico...
Por el tema de la actualización de canales, yo ya tengo escrito un updater.py que comprueba mediante la api de github si algún archivo de la carpeta channels y servers se ha modificado o si hay alguno nuevo y lo descarga al entrar en el plugin, de forma bastante mas práctica que como se hace ahora... y al no tener que actualizar el channelselector es mucho mas fácil. y puesto que usa la api con una sola petición http recibe un JSON con el SHA1 de todos los canales, y te ahorras descargar muchos datos, Yo ya utilice este sistema en la versión que saque junto con supercopito para blusens, ya que para eso github es mas práctico que googlecode.

Re: Cambio de xml a json

Publicado: 14 Nov 2015, 18:57
por super_berny
divadr escribió:Se ha comentado de guardar las configuraciones de los canales en el JSON, pero eso implicaría que cuando se actualice el canal (JSON + PY) las configuraciones se perderían... o habría que pasarlas manualmente, y cuando se actualice el plugin mucho mas... yo veo bien que se guarden los ajustes de los canales en archivos independientes, pero en la carpeta donde están los ajustes, no en la del plugin...
La carpeta donde guardar el json tb creo q deberia ser USERDATA/plugin.video.pelisalacarta. Por leer las configuraciones y añadirlas al nuevo json actualizado no es ningun problema. Es realmente sencillo:

Código: Seleccionar todo

config = jsoontools.load(path_json)['settings']
# descargamos el nuevo json y despues...
nuevo_json = jsoontools.load(path_json)
nuevo_json['settings'] = config 
divadr escribió:Por el tema de la actualización de canales, yo ya tengo escrito un updater.py que comprueba mediante la api de github si algún archivo de la carpeta channels y servers se ha modificado o si hay alguno nuevo y lo descarga al entrar en el plugin, de forma bastante mas práctica que como se hace ahora... y al no tener que actualizar el channelselector es mucho mas fácil. y puesto que usa la api con una sola petición http recibe un JSON con el SHA1 de todos los canales, y te ahorras descargar muchos datos
Quiero ver ese updater ya!!!! :D

Re: Cambio de xml a json

Publicado: 14 Nov 2015, 19:00
por SeiTaN
Sabía que sonaba de algo lo del update.

Para intentar solucionar el tema, ¿no podrían hacerse 3 ficheros?

canal.py <-- como hasta ahora
canal.json <-- con la configuracion que se carga para el channelselector
canal.custom.json ó canal.conf.json ó canal.data.json, etc...<-- para cosas especificas del canal como los datos de login o en mi caso para filtrar determinadas cosas de las series que sigo.