Manual para creación de canales

En el equipo Alfa hemos decidido inculcar un poco de cultura a los usuarios y porque no, también a desarrolladores para que puedan aprender a programar o mejorar sus conocimientos, Alfa como siempre lo dijimos no solo pretende entretener, también pretende que los usuarios obtengan cierta independencia y conocimiento suficiente el cual les permita poder crear o reparar sus propios canales, addons y no depender de que alguien haga el trabajo por ellos, esperamos sea de utilidad para muchos!

Como somos un addon que publica su codigo en github y nos gustaria ver nuevos desarrolladores, vamos a aportar nuestro granito de arena.

Las preguntas se hacen en público para que otros puedan aprender.

Equipo Alfa
 

Adjuntos

  • manual creacion de canales.pdf
    1 MB · Visitas: 1.992

caperucitaferoz

Usuario
20 Oct 2017
75
36
18
bic tranquilo aun estamos en la peliculas.

Paquito, ya te adverti q el regex te daria problemas con los item q no tuviesen la calidad. Mira esto: Regex101 - online regex editor and debugger
Cada vez q encuentra una serie, o mejor dicho q no encuentra la calidad2 se come al siguiente item de la lista (compara la pagina 2 de novedades en la web y en el canal).

  • Lo primero q me sorprende es el condicional de la linea 27. Has probado: data2 = scrapertools.find_single_match(data,'(?s)<div class="item_1.*?>(.*?)<div class=\'paginado\'>') sin condicion?

  • En segundo lugar lo que yo haria seria sustituir el patron de la linea 38 y 39 por:
patron += 'class="year">(\d{4})' # año
patron += '</span>(.*?)<div' # calidad

Con lo q te quedaria: (?s)class="ml-item.*?a href="([^"]+).*?img src="([^"]+).*?alt="([^"]+).*?class="year">(\d{4})</span>(.*?)<div Con este patron en scrapedquality tendrias siempre algo (pruebalo en regex101)
  • El filtrado de las series (lineas 42+) lo modificariamos e iria dentro del for:
Python:
Por favor, Acceder o Registrarse para ver el contenido

Es decir, por cada coincidencia (matches) comprueba si scrapedurl no contiene "/series/" y solo entonces recupera la calidad mediante otra expresion regular y añade el item al listado.​
 

melimeli

Usuario Novato
5 Feb 2018
3
0
1
29
Excelente aporte!, espero poder usar una gran cantidad de esos cursos, saludos
 

Paquito Porras

Usuario
9 Nov 2017
101
19
18
34
Lo primero, @caperucitaferoz, muchas gracias por tus aclaraciones, sin ellas no sería capaz de avanzar.


Sí, lo he probado y funciona. El caso es que si buscas "<div class="item_1.*?>" hay dos coincidencias en la página principal de la web, es decir, en nuestra sección "Novedades del canal". Entiendo que utilizando la función "scrapertools.find_single_match" sólo cogería la primera ocurrencia, que es la que necesitamos, pero al no estar 100% seguro, preferí utilizar otro patrón que únicamente me devolviera 1 coincidencia.

¿Me aseguras que "scrapertools.find_single_match" sólo coge la primera coincidencia? Al llamarse "single" entiendo que sí, pero prefiero que me lo confirmes. De ser así, evidentemente el "if" sobra.


Esto me ha dado muchos quebraderos de cabeza, pensé que se quedaba solucionado al eliminar las series de la lista, pero veo que no. Tras probar tu patrón para la calidad (utilizo constantemente regex101.com), veo que para las pelis devuelve:

</div> <span class="calidad2">Hd1080p</span> </div>

y para las series:

</div> </div>

Ahora veo claro a qué problema te refieres y veo la forma de solventarlo que has puesto en el código. Así visto, parece hasta sencillo, pero te aseguro que le he echado algunas horas para tratar de solventarlo. :confundido:

Una vez implantado estos cambios, ¿quedaría por retocar algo de las pelis o pasaríamos a las series?

Una vez más, gracias por tu ayuda.
 
Última edición:

caperucitaferoz

Usuario
20 Oct 2017
75
36
18
esa funcion busca TODAS las coincidencias pero solo devuelve aquella cuyo indice se pase como tercer argumento, que sera 0 si se ignora. Asi q de hecho te devuelve la primera coincidencia. Pero ojo la primera coincidencia con el patron completo (comineza por <div class="item_1.*?> y termina por <div class=\'paginado\'>')) q en este caso coincide en q solo hay una.

Esto es parte del aprendizaje, creeme a mi me resulataria mas sencillo pasarte todo el codigo terminado y ya esta, pero asi no ibas a aprender nunca. No pienses q eso es tiempo perdido por q no lo es.

Pero q ganas teneis de acabar!!! :D:D:D ¿tan duro soy como profe? o_0o_0o_0
Si te fijas en el tutorial sobre el objeto Item dice q hay q identificar el tipo de contenido al q corresponde cada item, mediante contentType, aunq si rellenamos correctamente el atributo item.contetTitle ya estaria.
Por otro lado, ahora la funcion contenidos solo nos añade peliculas, asi q propongo cambiarle el nombre por otra mas acorde. ¿q tal movies?
Una vez tenga esto creo q ya podras descomentar la linea 56
 

Paquito Porras

Usuario
9 Nov 2017
101
19
18
34
Gracias por responder de nuevo.


Tienes razón, sólo hay 1 coincidencia por la cadena elegida para cerrar el patrón, no me había dado cuenta.


Aquí quiero aclarar algo, estoy disfrutando con esto aunque a veces me cueste. Por supuesto que no es tiempo perdido. Precisamente todas estas dificultades hacen que se aprenda más. No tengo ninguna prisa.


No he encontrado el tutorial del objeto ITEM, ¿podrías decirme donde está para leermelo???


De acuerdo a esto último.

Una vez más, muchas gracias por tu paciencia.
 

Paquito Porras

Usuario
9 Nov 2017
101
19
18
34

Vale, ya me leí el tutorial del Item y ya he puesto los cambios que me has recomendado.

La línea del itemlist.append quedaría así:

itemlist.append(Item(action = "findvideos", channel = item.channel, title = scrapedtitle + " (" + scrapedyear + ") [" + scrapedquality + "]", contentTitle=scrapedtitle, thumbnail = scrapedthumbnail, url = scrapedurl, quality=scrapedquality, infoLabels={'year':scrapedyear}))


También descomenté la línea del infolabels:

tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
.

Me he dado cuenta que la función de búsqueda, como su action es "movies" (la que anteriormente se llamaba "contenidos") ya no muestra las series puesto que lo hemos filtrado. Es algo que habrá que revisar posteriormente.

A la espera de nuevas directrices ;)
 

bic

Usuario Activo
17 Oct 2017
732
147
43
El caso es que este canal ya lo habia creado alguien pero como addon y estaba en el repositorio Kodigo y como tenia ese addon instalado le eche un vistazo hace pocas semanas y le fallaban la seccion de peliculas pero la seccion series funcionaba perfectamente y tenia series mas modernas y actuales que este canal,por ejemplo tenia una serie recien sacada como estreno llemada La peste y Pelisultra creado aqui como canal no tiene y lo curioso es que creo que tampoco aparece en la pagina web:rolleyes:
 

caperucitaferoz

Usuario
20 Oct 2017
75
36
18
Pero no seas asi Paquito...comparte el codigo con tus follovers jejejeje (mas q nada por q es mas sencillo referirme a una linea en concreto si tenemos el mismo codigo base)

No te preocupes ya lo miraremos.

Ahora vamos con las series.... he dicho SERIES ¿donde esta ese redoble de tambores?
Si te fijas en la web dentro del apartado series te sera realmente sencillo obtener el listado de las series disponibles en una nueva funcion llamada por ejemplo 'tvshows' incluyendo paginacion y añadiendole a cada item el año y el contentSerieName.

Una vez obtenida las series, si te fijas cada item tiene la url de una pagina donde se incluyen todos los episodios disponibles en la web. Aqui tendremos dos opciones una sencilla que seria mostrar todos los capitulos y ya esta, y otra q consiste en añadir un submenu entre la serie y el capitulo para listar las temporadas.
  • Opcion1:
    • Listado series:
      • serie1
      • serie 2:
        • capitulo 1x1
        • capitulo 1x2
        • capitulo 2x1
        • capitulo TxN
  • Opcion 2:
    • Listado series:
      • serie 1
      • serie 2:
        • Temporada 1
        • Temporada 2:
          • capitulo 2x1
          • capitulo 2x2
Yo de momento empezaria con la opcion 1, creando una nueva funcion llamada episodes, aunq confieso q me gusta mas la 2 ;) Resumiendo desde mainlist iriamos a tvshows y de este a episodes
 

Paquito Porras

Usuario
9 Nov 2017
101
19
18
34
Lo primero, como siempre, gracias @caperucitaferoz por tu tiempo y tu atención, realmente lo valoro.


Como eran cambios mínimos, no pensaba que fuera necesario, pero lo subo ahora en este mismo post. He modificado también los idiomas dentro del .json porque me he dado cuenta que todo el audio es latino, así que he quitado el "esp" y el "cast".


:D:D:D Tenía ganas de que llegara este momento, porque creo que será la parte más complicada del canal.


A mí también me gusta más la segunda opción, pero vamos a empezar por la primera, que parece algo más sencilla.
 

Adjuntos

  • PelisUltra.zip
    1,8 KB · Visitas: 1

Paquito Porras

Usuario
9 Nov 2017
101
19
18
34
Buenas de nuevo,
es un desastre el código fuente de las series, el numero de capítulo y el nombre contienen muchos espacios en blanco, saltos de línea, etc. Estoy seguro de que con regex puedes obviar los espacios en blanco, pero como no tengo apenas experiencia, lo he resuelto con Python, que algo de experiencia tengo.
Subo la nueva versión con las series funcionales con la opción 1 que comentaste, @caperucitaferoz. Faltaría crear un paginador para que no te muestre todos los capítulos en el mismo menú. Lo suyo sería mostrar unos 20 resultados y en la siguiente página otros 20 y así.
Ahora me voy a la cama que madrugo mucho :rolleyes:
 

Adjuntos

  • PelisUltra.zip
    1,9 KB · Visitas: 8

caperucitaferoz

Usuario
20 Oct 2017
75
36
18
Un apunte sobre la seccion peliculas: como podras comprobar en algunas de ellas aparece ahora el fanart, la sinopsis y otros datos. Esto es gracias al modulo tmdb (linea 45), pero en otras muchas no. ¿por que? Pues porq el titulo q le pasamos no es exactamente el titulo de la pelicula por ejemplo en las de Cantiflas no se por q pero al webmaster le ha parecido buena idea incluir el nombre del protagonista en el titulo de la pelicula :enojado: En la seccion series funciona mucho mejor por q los titulos estan mas limpios (descomenta la linea 90)

Sobre las series y episodios: da gusto ver como te resuelves con las tareas encomendadas :D:D:D Ya vi en su momento la guarrada de los numeros de capitulos. Por suerte el formato de la url permite extraerlos, si no fuese asi habria q ir a limpiar los espacios en blanco, tabulaciones y saltos de linea. Para obtener el numero de capitulo y episodio de la url (y en general de cualquier texto) puedes utilizar la funcion scrapertools.get_season_and_episode. Echale un ojo. Y ya q sabemos el numero de temporada y episodio ¿por q no incluirlo en el Item? Tambien sabemos el tipo de item ¿no? (todos estos datos q a lo mejor piensas q son inutiles despues los utiliza tmdb para hacer su trabajo)

Otra cosa interesante: si leiste el tutorial de Item recordaras que recomienda clonar los items en lugar de crearlos de cero. Pruebalo en episodios y veras como los datos obtenidos por tmdb en series se heredan automaticamente.

Esto solo lo veo util si nos quedamos con la opcion 1, en otro caso es dificil encontrar (aunq no imposible) una serie q tenga mas de 20 episodios por temporada. La forma de hacerlo seria: una vez obtenido TODOS los episodios me quedo solo con los 20 primeros de la lista: itemlist[x:x+19] y le añado un nuevo item "pagina siguiente" si hay mas episodios en la lista, a este nuevo item le añado un atributo item.extra=x ¿me sigues?

Lo proximo podria ser un apartado en mainlist para "Nuevos Episodios" o bien la opcion 2 de los episodios. Tu decides.
 

Paquito Porras

Usuario
9 Nov 2017
101
19
18
34
Esto marcha bien, @caperucitaferoz! Poco a poco voy entendiendo mejor el funcionamiento de Alfa y crear el menú de series y episodios no me llevó anoche ni una hora, lo cual es un logro para mí. Estoy contento con los avances. De nuevo, gracias por tu ayuda.


¿Crees que merece la pena tratar el texto del título para extraer lo de Cantinflas? Yo creo que no, pero tú eres el profe.
Lo de las series lo descomenté anoche, pero debe ser que subí una versión previa.


Ya he visto la función get_season_and_episode, hubiera sido útil anoche, pero ya le metí yo el hachazo con mis escasos conocimientos de Python. Lo que debería hacer es mirarme todas las funciones de scrapertools para tener en cuenta de cara al futuro qué otras funciones podría utilizar. De eso se trata la POO, ¿no? :p
En cuanto a meter la info en el Item, pues tienes razón, meteré el numero de temporada, de capítulo y el contentType.


Lo miraré, a ver cómo puede mejorar mi vida :p


Este punto no lo veo claro, ¿la idea sería algo así?:

Python:
Por favor, Acceder o Registrarse para ver el contenido


Pues me apunto las dos mejoras ;) Aunque empezaré por lo de las temporadas, que me llama más.

Seguimos adelante.
 
Última edición:

caperucitaferoz

Usuario
20 Oct 2017
75
36
18
Como bien dices no vale la pena, por q no es el unico caso. En otras peliculas incluye el titulo original entre parentesis, etc... Si siempre siguiese un patron podriamos extraerlo, pero no podemos caer en la tentacion de ir añadiendo casos concretos. Estos son los detalles q pueden hacer q una web no sea interesante para convertirla en canal (otro es q no se actualice a menudo), pero en cualquier caso si es una web util para aprender.

No se trata de estudiar todo el codigo de Alfa (a no ser q sea para modificar el propio plugin), pero si algunos archivos, sobretodo los q terminan el xxxtools.py suelen contener 'herramientas' utiles.

Vamos a arremangarnos y crear una paginacion donde no existe, sustituye tu linea 115 por:

Python:
Por favor, Acceder o Registrarse para ver el contenido

Miratelo y si algo no entiendes lo preguntas.
 

Paquito Porras

Usuario
9 Nov 2017
101
19
18
34
Nueva versión con la paginación de las series que nos ha pasado @caperucitaferoz y con contentSeason y contentEpisodeNumber.
Hoy no creo que pueda dedicarle más tiempo, aunque tengo ganas de meter el menú de temporada por cada serie.
 

Adjuntos

  • PelisUltra.zip
    2 KB · Visitas: 8

caperucitaferoz

Usuario
20 Oct 2017
75
36
18
Bien!!! Pero te sobra la linea 119 (supongo q seria debug)

Has visto como al clonar el item tus episodios heredan los datos encontrados en tmdb para la serie?
Ahora te falta añadir tmdb.set_infoLabels_itemlist despues de filtrar la lista para q busque datos del capitulo.

Volviendo al tema de los numeros de temporadas y episodios mira la serie 'Chance'
 
Última edición:

Paquito Porras

Usuario
9 Nov 2017
101
19
18
34

Sí, lo de la línea 119 era una prueba, ya está eliminado (no se te pasa una, eh? :p). He visto como funciona el item.clone... está muy bien.
Añadido el infolabels para los capítulos.
La serie Chance no funciona, el resto sí. Voy a ver qué barbaridad ha hecho el webmaster con esta serie.
El patrón captura correctamente la url y el título, lo que pasa que la url es del tipo:
http:/ /www.pelisultra.com/episodio/chance-1x1-2
es decir, que mete un "-2" al final de todos los enlaces porque sí, porque él lo vale. :enojado:
¿En estos casos como soléis actuar? ¿Creáis una excepción para esta serie en concreto o buscáis una solución "más global"?
 
Última edición:

Intel1

Miembro del equipo
16 Oct 2017
344
176
43
Hola, solo para comentar que la búsqueda no funciona, haber si puedes solucionarlo o lo comentas para ayudarte.

Saludos y muy buen trabajo :)