Página 1 de 1

Propuesta para 'find_videos' de los conectores

Publicado: 05 Oct 2015, 22:27
por robalo
Me gustaría proponeros la modificación de 'find_videos' en los conectores para que se nos haga más fácil el mantenimiento de esta parte del conector.

El primer paso es eliminar todos los 'encontrados.add("http://....' y unificarlo en un archivo sin eliminar 'encontrados' y comprobando únicamente las coincidencias en 'match'.

Os pego la función comentada que uso para 'streaminto.py' y el archivo con la lista de todas las coincidencias a descartar que he encontrado.

find_videos:

Código: Seleccionar todo

def find_videos(data):
    ## Permanece 'encontrados' para las urls vídeos duplicadas
    encontrados = set()
    devuelve = []

    ## 'ignore_matches' reemplaza 'encontrados.add("http://....'
    ## Esta lista se puede añadir a servertools para que sólo exista una lista común para todos los conectores o
    ## crear un archivo .py que contenga la lista 'ignore_matches'
    ## De esta forma únicamente se añadiría la línea:
    ##     from servers.servertools import ignore_matches
    ## o
    ##     from servers.filtro_findvideos import ignore_matches
    ## Particularmente prefiero la segunda opción para no tocar servertools
    from servers.filtro_findvideos import ignore_matches

    ## Urls comentadas que se filtrarán
    # http://streamin.to/z3nnqbspjyne
    # http://streamin.to/embed-z3nnqbspjyne.html

    ## Patrones para el filtro de urls
    patterns = [
        r'streamin.to/([a-z0-9A-Z]+)',
        r'streamin.to/embed-([a-z0-9A-Z]+)'
    ]

    ## server_id para el título
    server_id = "streaminto"
    ## Formato de la url para 'get_video_url'
    url_format = "http://streamin.to/embed-%s.html"

    ## Anida los bucles
    for pattern in patterns:

        logger.info("[" + server_id + ".py] find_videos #" + pattern + "#")
        matches = re.compile(pattern, re.DOTALL).findall(data)

        for match in matches:
            url = url_format % match
            ## Se añade el filtro para 'findvideos'
            if url not in encontrados and match not in ignore_matches:
                logger.info("  url="+url)
                devuelve.append( [ '' , url , server_id ] )
                encontrados.add(url)
            else:
                logger.info("  url duplicada="+url)

    return devuelve
filtro_findvideos:

Código: Seleccionar todo

# -*- coding: utf-8 -*-
#------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# Filtro para urls encontradas no válidas en find_videos
# cuando el contenido de 'data' es el contenido de la página.
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
#------------------------------------------------------------
ignore_matches = {
    'a','cgi','checkfiles','contact','control','css','d','deliver','dmca','embed','f','faq','favicon','file','i','images','jquery','js','links','login','make','new','pages','player','premium','privacy','refund','reward','ri','s','serve','stylesheets','theme','tos','ver','ver-online','video','watch','watch_video','xupload'
}

Re: Propuesta para 'find_videos' de los conectores

Publicado: 06 Oct 2015, 18:57
por SeiTaN
Buena propuesta, estuve mirando los servers y vi que hay muchos que tienen lo que comentas.

Si me dices como probar los enlaces a los servidores facilmente, te echo un cable para modificarlos todos, asi cuando alguien cree un server nuevo se fijara en lo último y estará el código más uniforme.

Saludos.

Re: Propuesta para 'find_videos' de los conectores

Publicado: 06 Oct 2015, 23:13
por robalo
No se exactamente a que te refieres con "Si me dices como probar los enlaces a los servidores facilmente".

Si es por la parte de la cración del archivo y eliminación de los 'encontrados.add("http://....' la única forma de poder probarlo es con un canal que concluya la 'action="findvideos"' (sin función la findvideos y play en el canal) y que en la 'url=' le pase la url del vídeo y no la url que contiene los enlaces de los vídeos. Con la url que contiene los enlaces de los vídeos es posible que se cuele algún enlace no válido, pero es bastante raro.

Afortunadamente, hoy por hoy creo que no quedan canales que entregan la url del vídeo a findvideos como la acción del canal, si queda alguno será de los antiguos. Casi se podría prescindir de los 'encontrados.add("http://....' o de la creación de un archivo.

Re: Propuesta para 'find_videos' de los conectores

Publicado: 07 Oct 2015, 19:38
por SeiTaN
robalo escribió:No se exactamente a que te refieres con "Si me dices como probar los enlaces a los servidores facilmente".

Si es por la parte de la cración del archivo y eliminación de los 'encontrados.add("http://....' la única forma de poder probarlo es con un canal que concluya la 'action="findvideos"' (sin función la findvideos y play en el canal) y que en la 'url=' le pase la url del vídeo y no la url que contiene los enlaces de los vídeos. Con la url que contiene los enlaces de los vídeos es posible que se cuele algún enlace no válido, pero es bastante raro.

Afortunadamente, hoy por hoy creo que no quedan canales que entregan la url del vídeo a findvideos como la acción del canal, si queda alguno será de los antiguos. Casi se podría prescindir de los 'encontrados.add("http://....' o de la creación de un archivo.
Si, me refería si habia una forma sencilla de probarlos sin tener que entrar por canal y luego buscar enlaces para ese servidor.

Re: Propuesta para 'find_videos' de los conectores

Publicado: 07 Oct 2015, 22:59
por robalo
vale :)

Normalmente me apaño para estas cosas con el canal tengourl.py (Tengo una URL). Está muy limpito y está el primero del menú :)

Usa este tengourl.py, no es lo mejor del mundo pero creo que verás que pasa cuando se usa una u otra forma

Código: Seleccionar todo

# -*- coding: utf-8 -*-
#------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# Canal para ver un vídeo conociendo su URL
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
#------------------------------------------------------------
import urlparse,urllib2,urllib,re
import os
import sys

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

__channel__ = "tengourl"
__category__ = "G"
__type__ = "generic"
__title__ = "tengourl"
__language__ = ""

DEBUG = config.get_setting("debug")

def isGeneric():
    return True

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

    itemlist = []
    itemlist.append( Item(channel=__channel__, action="search", title="Entra aquí y teclea la URL"))

    #######################################################################################
    itemlist.append( Item(channel=__channel__, action="findvideos", title="Forma 1 (urls en texto de una url)", url="http://robalo.esy.es/test/test.txt"))
    itemlist.append( Item(channel=__channel__, action="forma_2", title="Forma 2 (url con url)", url="http://robalo.esy.es/test/test.txt"))
    #######################################################################################

    return itemlist

# Al llamarse "search" la función, el launcher pide un texto a buscar y lo añade como parámetro
def search(item,texto):
    logger.info("[tengourl.py] search texto="+texto)
    
    if not texto.startswith("http://"):
        texto = "http://"+texto
    
    itemlist = []

    itemlist = servertools.find_video_items(data=texto)
    for item in itemlist:
        item.channel=__channel__
        item.action="play"

    if len(itemlist)==0:
        itemlist.append( Item(channel=__channel__, action="search", title="No hay ningún vídeo compatible en esa URL"))
    
    return itemlist

#######################################################################################
def forma_2(item):

    itemlist = []

    data = scrapertools.cache_page(item.url).split('\n')

    for url in data:
        itemlist.append(Item(channel=__channel__, title=url, url=url, action="findvideos"))

    return itemlist
#######################################################################################

def test():
    return True
La forma 2 no se suele usar pero se podría por comodidad o por que se escribir poco :lol: para ese fin es el 'encontrados.add("http://....' o el archivo