You are on page 1of 14

ADDON ALFA www.alfa-addon.

com

MANUAL BASICO DE CREACION DE CANALES


PARA EL ADDON ALFA DE KODI

El lenguaje de programación que se usa para la creación de los canales es Python. Usaremos el editor de
texto Notepad++ (Editor de textos básico) para la edición los archivos:
https://notepad-plus-plus.org/
Empezaremos a crear un canal con lo más básico pero funcional, el canal que tomaremos en cuenta es Pelis
Ultra:
http://www.pelisultra.com
La creación de un canal está compuesto por 2 archivos:

1.- pelisultra.json
2.- pelisultra.py
En el archivo pelisultra.json encontraremos la configuración del canal.
En el archivo pelisultra.py encontraremos el código para mostrar los videos del canal.
Estos 2 archivos lo colocaremos en la carpeta “channels” del addon Alfa.

El código del archivo pelisultra.json básico sería el siguiente:

{
"id": "pelisultra",
"name": "Pelisultra",
"active": true,
"adult": false,
"language": ["lat"],
"categories": [
"movie"
]
}
ADDON ALFA www.alfa-addon.com

id =
nombre físico del canal y tiene que coincidir con el del py
name =
nombre del canal que aparece en la lista de canales de Alfa
active =
si el canal está activo o no
adult =
si el canal es un canal adulto
language =
que idiomas de los videos tiene ese canal
lat = latino
esp = español de españa
categories = las categorías al cual pertenecerá el canal:
movie = películas
tvshow = series
documentary = documentales
anime = anime
direct = directos
adult = adultos

“language” tiene que ser una lista al igual que categories


una lista de un elemento -->["lat"]
una lista de dos elementos (idiomas) --> ["lat", "cast"]

el idioma (language) tiene que ser el que contenga el canal.


ADDON ALFA www.alfa-addon.com

El código completo del canal pelisultra básico (archivo pelisultra.py) es éste:

# -*- coding: utf-8 -*-

from core import httptools


from core import scrapertools
from core import servertools
from core.item import Item
from platformcode import logger

def mainlist(item):
logger.info()
itemlist = []
itemlist.append(Item(channel = item.channel,
title = "Novedades",
action = "peliculas",
url = “http://www.pelisultra.com”
))
return itemlist

def peliculas(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
patron = '(?s)class="ml-item.*?a href="([^"]+).*?'
patron += 'img src="([^"]+).*?'
patron += 'alt="([^"]+)'
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedthumbnail, scrapedtitle in matches:
itemlist.append(Item(action = "findvideos",
channel = item.channel,
title = scrapedtitle,
thumbnail = scrapedthumbnail,
url = scrapedurl
))
return itemlist

El código se irá viendo poco a poco, línea por línea.


ADDON ALFA www.alfa-addon.com

# -*- coding: utf-8 -*-

Es la línea inicial de todo archivo de canales, que especifica el tipo de codificación del archivo, que es: utf-8

from core import httptools


from core import scrapertools
from core import servertools
from core.item import Item
from platformcode import logger

Estas son las librerías básicas de Alfa (métodos que simplifican la creación de los canales), que serán
importadas para su uso en los canales.

def mainlist(item):
logger.info()
itemlist = []
itemlist.append(Item(channel = item.channel,
title = "Novedades",
action = "peliculas",
url = “http://www.pelisultra.com”
))
return itemlist

Este es el método principal (mainlist) para mostrar las opciones del canal, éste código se mostrará como la
siguiente imagen en kodi:
ADDON ALFA www.alfa-addon.com

itemlist.append(Item(channel = item.channel,
title = "Novedades",
action = "peliculas",
url = “http://www.pelisultra.com”
))

Esta parte del código ( itemlist.append(Item )se usa para definir cada una de las secciones que
aparecerán en el canal, por ejemplo: Novedades, Recientes, Por año, Por género, Buscar, etc.

channel = nombre del canal, se puede usar item.channel.


title = título de la sección que se mostrará en kodi.
action = acción (método) que se ejecutará cuando se escoja (clic) la sección.
url = url de donde se buscará la información (videos) de cada sección del canal.
Si se quiere agregar otra sección al canal se debe agregar otro itemlist.append(Item
al canal como por ejemplo:

itemlist.append(Item(channel = item.channel,
title = "Géneros",
action = "generos",
url = “http://www.pelisultra.com/generos”
))
ADDON ALFA www.alfa-addon.com

Este es el código del método que se ejecutará cuando se escoja la categoría “Novedades” que se definió en
el método mainlist()

def peliculas(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
patron = '(?s)class="ml-item.*?a href="([^"]+).*?'
patron += 'img src="([^"]+).*?'
patron += 'alt="([^"]+)'
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedthumbnail, scrapedtitle in matches:
itemlist.append(Item(action = "findvideos",
channel = item.channel,
title = scrapedtitle,
thumbnail = scrapedthumbnail,
url = scrapedurl
))
return itemlist

logger.info() se usa para registrar en el log detallado en que método se encuentra la ejecución del
canal y hacer seguimiento a posibles errores del canal.

itemlist = [] se usa para definir itemlist como una lista.

data = httptools.downloadpage(item.url).data se usa para para descargar la pagina


“ítem.url” la cual es pasada desde el método mainlist desde esta parte: url = “http://www.pelisultra.com”

patron = '(?s)class="ml-item.*?a href="([^"]+).*?'


patron += 'img src="([^"]+).*?'
patron += 'alt="([^"]+)'

Es el famoso regex (expresiones regulares), la cual es clave para obtener la información de las páginas para
que sea mostrado en el addon Alfa.
Un manual básico para empezar con las expresiones regulares lo pueden ver aquí:
https://www.youtube.com/watch?v=PS51kS8rvao
ADDON ALFA www.alfa-addon.com

Para ver que regex usar hay que ver primero el código fuente de la página de la cual se quiere obtener la
información. En Google Chrome, se hace de la siguiente manera:

Click derecho en la página – Ver código fuente de la página


ADDON ALFA www.alfa-addon.com

Código fuente de la página www.pelisultra.com:

Y allí empezar a buscar la información que se necesita.


Se puede buscar (Ctrl-F) el nombre de la primera película para ubicarnos en la posición para empezar a
analizar el código fuente, por ejemplo buscar: Muertos de miedo (O la primera película que aparezca cuando
estén leyendo éste manual):
En la línea 994, se puede apreciar que encontró la película: Muertos de miedo.
Luego hay que buscar el patrón de código fuente que se repita en cada película, para utilizar el regex y
obtener la información.
ADDON ALFA www.alfa-addon.com

En éste caso sería éste código “el patrón” en todas las películas (de la línea 991 a la 1006):

<div id="mt-11173" class="ml-item item ">


<a href="http://www.pelisultra.com/muertos-de-miedo-the-frightener/">
<div class="image">
<img src="https://image.tmdb.org/t/p/w185/xGTPzAob8b4A52CVXFbX24tlLIE.jpg" alt="Muertos de miedo
(The Frightener)" width="100%" height="100%" />
<span class="player"></span>
<span class="imdb"><b><b class="icon-star"></b></b> 7.1</span>
</div>
</a>
<div class="fixyear">
<h2>Muertos de miedo (The Frightener)</h2>
<span class="year">1996</span>
</div>

De éste código obtendremos el url, la imagen y el título de la película.


ADDON ALFA www.alfa-addon.com

Los regex lo pueden probar en la siguiente página:

www.regex101.com
1.- Clic para configurar el “flavor” en Python.
2.- Clic para configurar el “delimiter” en triple comillas “”” para no tener problemas
1.- Regular expresión: Colocar aquí el regex que se quiere probar.
2.- Test String: Colocar aquí el texto en el cual se quiere buscar.

La primera línea del patrón obtiene la url de la película:

patron = '(?s)class="ml-item.*?a href="([^"]+).*?'

(?s) : Ésta parte indica que obviará todo salto de línea para la búsqueda si lo que se busca está dividido en 2
líneas o mas para no tener problemas
class = "ml-item : Ésta parte del regex busca en el código fuente de la página el texto: 'class="ml-item
.*? : Busca cualquier texto hasta lo siguiente.
a href=”([^”]+) : Ésta parte busca todo el texto (+) que está después del texto a href=” hasta que encuentre
el carácter “ , los paréntesis quiere decir que es el texto que tomará el regex (grupo)
.*? Vuelve a buscar todo el texto después del caracter “
ADDON ALFA www.alfa-addon.com

En la página www.regex101.com se vería de ésta manera:

Con éste regex ya encontró el primer dato que queríamos que era el url de la película: Donde dice “Group 1”
a la derecha en verde.
La segunda línea del patrón obtiene la imagen de la película:

patron += 'img src="([^"]+).*?'

img src=" : Buscará el texto img src="


"([^"]+) : Buscará todo el texto (+) hasta el carácter “ (comillas) , los paréntesis quiere decir que es el texto
que tomará el regex (grupo)
.*?: Buscará todo el texto a continuación.
ADDON ALFA www.alfa-addon.com

La tercera línea del patrón obtiene el título de la película:

patron += 'alt="([^"]+)'

alt=" : Buscará el texto alt="


"([^"]+) : Buscará todo el texto (+) hasta el carácter “ (comillas) , los paréntesis quiere decir que es el texto
que tomará el regex (grupo)
Con este patrón ya obtenemos los 3 datos que queríamos: url, imagen, título de la película:
patron = '(?s)class="ml-item.*?a href="([^"]+).*?'
patron += 'img src="([^"]+).*?'
patron += 'alt="([^"]+)'

Se puede poner en una sola línea como esto:


patron = '(?s)class="ml-item.*?a href="([^"]+).*?img src="([^"]+).*?alt="([^"]+)’

Se hace el código en las 3 líneas solo para que pueda ser mas legible, y separar cada línea con el dato (grupo)
que se busca.

En www.regex.com quedaría de ésta forma:


ADDON ALFA www.alfa-addon.com

A la derecha (group 1, group 2, group 3) son los datos obtenidos con nuestro regex.

matches = scrapertools.find_multiple_matches(data, patron)

Con esta línea se ejecuta el regex que creamos y se guardarán los “3 grupos encontrados en la variable
matches

for scrapedurl, scrapedthumbnail, scrapedtitle in matches:


itemlist.append(Item(action = "findvideos",
channel = item.channel,
title = scrapedtitle,
thumbnail = scrapedthumbnail,
url = scrapedurl
))

Con estas líneas agregamos a itemlist, los 3 datos encontrados y el action = “findvideos” hace que Alfa
busque automáticamente los links de los servidores en la página “url”
scrapedurl, scrapedthumbnail, scrapedtitle son variables con el nombre que nosotros le demos, de los 3
grupos de datos encontrados en “matches”
return itemlist

Devuelve itemlist al addon alfa con los datos que agregamos para que sean mostrados en kodi.
Itemlist contiene internamente algunos datos como éstos:

09:30:11.900 T:9620 NOTICE: alfa.core.scrapertools [printMatches] 0


action= 'findvideos'
channel= 'pelisultra'
infoLabels= {}
thumbnail= 'https://image.tmdb.org/t/p/w185/9dGLc0m4MlB4q38WmWTTaL7adQm.jpg'
title= 'Street Fighter: La leyenda de Chun-Li'
url= 'http://www.pelisultra.com/street-fighter-la-leyenda-de-chun-li/'
09:30:11.901 T:9620 NOTICE: alfa.core.scrapertools [printMatches] 1
action= 'findvideos'
channel= 'pelisultra'
infoLabels= {}
thumbnail= 'https://image.tmdb.org/t/p/w185/pTdf8kWBbijOsnoCY24nwiGadBB.jpg'
title= 'Los Picapiedra (The Flintstones)'
url= 'http://www.pelisultra.com/los-picapiedra-the-flintstones/'
ADDON ALFA www.alfa-addon.com

09:30:11.901 T:9620 NOTICE: alfa.core.scrapertools [printMatches] 2


action= 'findvideos'
channel= 'pelisultra'
infoLabels= {}
thumbnail= 'https://image.tmdb.org/t/p/w185/wLUdUo8fNe1NSaLzFxsdDboHnYF.jpg'
title= 'Diabólico (The Diabolical)'
url= 'http://www.pelisultra.com/diabolico-the-diabolical/'
09:30:11.902 T:9620 NOTICE: alfa.core.scrapertools [printMatches] 3
action= 'findvideos'
channel= 'pelisultra'
infoLabels= {}
thumbnail= 'https://image.tmdb.org/t/p/w185/87LUY0NnhiL6Anm8IHxTfGArarn.jpg'
title= 'Los Pitufos 3: en la aldea perdida (Smurfs: The Lost Village)'
url= 'http://www.pelisultra.com/los-pitufos-3-en-la-aldea-perdida-smurfs-the-lost-village/'

Este es el manual básico para la creación de canales, por supuesto hay mucho mas para crear los canales,
como encontrar los links escondidos o encriptados, usar la base de datos TMDB para mostrar información de
la serie o película, pero estas cosas solo se logra practicando, preguntando y siendo perseverante, para que
tu canal favorito esté en el Addon Alfa.

Cualquier consulta en el foro:

www.alfa-addon.com
Team Developers Alfa Addon

You might also like