Página 1 de 3

Ayuda con la creación de canal

Publicado: 17 May 2017, 20:40
por DanielyD
Buenas tardes, he intentado agregar un servidor online y mas o menos entiendo lo de regex y otras cosas, sin embargo, solo logro encontrar una pelicula y no encuentro ningún enlace, si me pudieran colaborar y decirme lo que tengo mal estaria muy agradecido.
Adjunto subo la creación del canal.

Re: Ayuda con la creación de canal

Publicado: 17 May 2017, 21:33
por Hernan_Ar_c
Hola DanielyD mira primero te recomendaria que utilizaras httptools en lugar de scrapertools, segundo un patron para generar el menu con todos los generos algo mas o menos asi...

Código: Seleccionar todo

from core import httptools

def mainlist(item):
    logger.info()
    itemlist = list()
    data = httptools.downloadpage(host).data
    patron ='class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-.*?"><a href="(.*?)">(.*?)<\/a><\/li>'
    matches = scrapertools.find_multiple_matches(data, patron)
    for scrapedurl, scrapedtitle in matches:
        itemlist.append(item.clone(action='lista', title=scrapedtitle, url=scrapedurl))
    return itemlist
Luego deberias definir un metodo lista que al igual que en mainlist te genere la lista de peliculas por medio de un patron, mientras mas generico mejor asi te servira para varios casos

Código: Seleccionar todo

def lista(item):
    logger.info()

    itemlist = []

    data = httptools.downloadpage(item.url).data
    patron = '<div id=".*?" class="item"> <a href="(.*?)"><div class="image"> <img src="(.*?)" alt="(.*?)".*?ttx"> (.*?)<div class="degradado">.*?"calidad2">(.*?)<\/span> <span class="year">(.*?)<\/span><\/div><\/div>'
    matches = scrapertools.find_multiple_matches(data, patron)

    for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedplot, scrapedquality, scrapedyear in matches:
        title = scrapedtitle+' (%s)'%(scrapedquality)
        itemlist.append(item.clone(title=scrapedtitle, url=scrapedurl, plot=scrapedplot, action="findvideos",
                                   show=scrapedtitle, thumbnail=scrapedthumbnail))
    return itemlist
y finalmente findvideos

Código: Seleccionar todo

def findvideos(item):
    logger.info()

    itemlist = []

    data = httptools.downloadpage(item.url).data
    itemlist.extend(servertools.find_video_items(data=data))
    for videoitem in itemlist:
        videoitem.channel=item.channel

    return itemlist
Siempre lo ideal es tratar de utilizar los regex de manera generalizada para que se puedan utilizar en varios caso con minimas modificaciones.

Atencion, no soy el mejor para dar consejos de programacion es mas apenas estoy aprendiendo, hay muchos por aqui que son verdaderos genios y te podran ayudar muuuucho mas, aun asi espero que te sirva lo que te comento.
Saludos

Re: Ayuda con la creación de canal

Publicado: 17 May 2017, 21:40
por SeiTaN
Hola, gracias por animarte a crear ;)

Consideraciones:
- Los nombres de los archivos, por favor en minúsculas, como el resto.
- version en el fichero .xml, me supongo que será la 1 y no la 10.
- usar httptools.downloadpage en vez de scrapertools.cache_page, el primero es más rápido lleva incluido anticloudflare entre algunas mejoras. Los canales más nuevos ya lo llevan por si quieres ver como se usa.
- los metodos romance, accion y comedia, creo que son exactamente lo mismo y solo cambia los nombres de variables.

Y del fallo que comentas es que no obtienes todas las peliculas en el bloque si no una.

Se arregla cambiando la expresión regular.

Código: Seleccionar todo

patron_accion = '<div class="box_item"><div class="peliculas">(.*?)</div></div><div id="paginador">'
Aqui la prueba con el regex
https://regex101.com/r/cR8aC9/14

Saludos y a seguir ;)

Re: Ayuda con la creación de canal

Publicado: 17 May 2017, 21:45
por Hernan_Ar_c
Ya vez mencionas genios y aparece SeiTaN :lol:

Re: Ayuda con la creación de canal

Publicado: 18 May 2017, 02:03
por DanielyD
Muchas gracias por su ayuda, ya el canal coge forma y puedo ver una que otra película, tengo ahora los siguientes inconvenientes: 1.Cree la función search pero no se como agregarla a los items (tampoco la probé) 2.No logro encontrar el regex para agregar "pagina siguiente". El mejor que conseguí me manda a la pagina 2, pero en ella me devuelve a la 1. Las otras ideas que tuve no me muestra la opción "pagina siguiente".
Adjunto subo de nuevo los archivos, luego de esto creo que ya tendríamos
cinehindi.rar
Agregadas sugerencias
(1.47 KiB) Descargado 316 veces
un canal nuevo!!!!

Re: Ayuda con la creación de canal

Publicado: 18 May 2017, 12:49
por SeiTaN
Gracias por los halagos, es intentar ayudar y mejorar siempre, si fuera un genio estaría en la NASA o arreglando openload :lol:

Re: Ayuda con la creación de canal

Publicado: 18 May 2017, 13:06
por Hernan_Ar_c
La busqueda, deberia ir en el mainlist, o en realidad deberias hacer un nuevo mainlist con las opciones por generos y buscar, cada una tendra como action la funcion que le corresponde, en este caso deberias cambiar el nombre a tu funcion mainlist actual por algo asi como generos, y obviamente la opcion buscar llamaria a la funcion busqueda, recibiendo como url la url donde se realiza la busqueda en la pagina, que seria, "http://www.cinehindi.com/?s=".
Por otro lado, estas repitiendo el error que te comento SeiTaN, vuelves a repetir "metodos"/"funciones"/"procedimentos", como prefieras llamarlos, ya que sub_search hace lo mismo que lista, la idea de un metodos, procedimiento, funcion, es que sea algo que se pueda reutilizar, en este caso tu busqueda deberia hacer la llamada a lista, si es que la informacion que obtendra tanto desde generos, como buscar es totalmente la misma.
Edito:
Con respecto a la paginacion, lo ideal es investigar el canal, y por ejemplo ver a donde te llevan los enlaces, en tu caso la paginacion, si observas en el codigo existe la etiqueta "siguiente" que pretenece al boton de la pagina, en esa etiqueta tienes la direccion de la siguiente pagina obiamente, lo que deberias hacer es tomar esa direccion mediante un regex que sea generico para todas las paginas.

Ten paciencia y analiza el codigo de otros canales, hay muchos que son sencillos de entender, pero lo basico de este canal ya lo tienes, solo te queda pulirlo un poco, ;)


Saludos.

Re: Ayuda con la creación de canal

Publicado: 18 May 2017, 13:23
por Hernan_Ar_c
SeiTaN escribió:
18 May 2017, 12:49
Gracias por los halagos, es intentar ayudar y mejorar siempre, si fuera un genio estaría en la NASA o arreglando openload :lol:
En realidad eres como beetlejuice, te nombran 3 veces y apareces! :lol:
Para openload, Cmos o nadie, es que no se si algun genio de la lampara podra hacer que dejen de modificarlo cada tanto :roll:

Re: Ayuda con la creación de canal

Publicado: 18 May 2017, 17:17
por DanielyD
Buenos Días, ya encontré la solución a la paginación, (ademas de mi regex, pasaba que solo Drama y Romance tienen siguiente los demás géneros no). Ya corregí lo del menú "principal", lo que no me sirve es la búsqueda y lo que encontre es que tiene la misma estructura de los géneros (aunque tal vez ese sea mi error) asi que lo dirijo a la función lista pero no me muestra ningún resultado, no se que será.

Re: Ayuda con la creación de canal

Publicado: 18 May 2017, 21:39
por super_berny
Muevo este hilo al foro de desarrolladores.

En primer lugar bienvenido a la comunidad de creadores, veras q esto es como un droga y cada vez querras mas :lol:

Supongo q ya te habras leido los tutoriales de Jesus, Seitan y tal vez hasta los mios tb, asi q empecemos:
  • Los thumbnails de los canales deberian ser cuadrados de por ejemplo 254x254 y los bannermenu deberian ser de 1400x140
  • El tema de la paginacion no lo he mirado, pero el regex q obtiene los generos parece q tampoco es correcto ya q veo "Proximas peliculas" repetido varias veces.
  • En el mainlist creo q te faltarian las novedades o ultimas agregadas (q serian las q salen cuando entras en la web)
  • En este caso no seria necesaria la funcion 'findvideos()', ya q lo q haces es llamar a la funcion generica de busqueda de servidores. Prueba de eliminarla (o comentarla o renombrarla) y veras q te funciona igual.
  • En la expresion regular de la funcion lista() tienes un error ya q hay peliculas q no incluyen la calidad, por lo q se toma la calidad de la siguiente, se aprecia por q hay peliculas de la web q no aparecen en el listado (fijate mas abajo como lo he solucionado mediante scrapedfixyear).
  • Es preferible evitar, siempre q se pueda, las capturas tipo '...<img src="(.*?)" alt=...' y usar en su lugar '<img src="([^"]+)" alt=...'.
  • Yo aconsejo eliminar de la pagina descagada las tabulaciones, los dobles espacios, los saltos de linea, etc... Por experiencia son un nido de errores.
  • Otra cosa q acostumbro a hacer es dividir el patron en varias lineas q me ayudan a localizar posibles fallos del regex.
Por ejemplo en este caso seria:

Código: Seleccionar todo

    data = httptools.downloadpage(item.url).data
    #patron = '<div id=".*?" class="item"> <a href="(.*?)"><div class="image"> <img src="(.*?)" alt="(.*?)".*?ttx"> (.*?)<div class="degradado">.*?"calidad2">(.*?)<\/span> <span class="year">(.*?)<\/span><\/div><\/div>'
    data = re.sub(r"\n|\r|\t|\s{2}|&nbsp;", "", data) # Eliminamos tabuladores, dobles espacios saltos de linea, etc...
    patron = 'class="item">.*?' # Todos los items de peliculas (en esta web) empiezan con esto
    patron += '<a href="([^"]+).*?' # scrapedurl
    patron += '<img src="([^"]+).*?' # scrapedthumbnail
    patron += 'alt="([^"]+).*?' # scrapedtitle
    patron += '<span class="ttx">([^<]+).*?' # scrapedplot
    patron += '<div class="fixyear">(.*?)</span></div></div>' # scrapedfixyear


    matches = scrapertools.find_multiple_matches(data, patron)

    for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedplot, scrapedfixyear in matches:
        patron = '<span class="year">([^<]+)'  # scrapedyear
        scrapedyear = scrapertools.find_single_match(scrapedfixyear, patron)
        if scrapedyear:
            scrapedtitle += ' (%s)' % (scrapedyear)

        patron = '<span class="calidad2">([^<]+).*?'  # scrapedquality
        scrapedquality = scrapertools.find_single_match(scrapedfixyear,patron)
        if scrapedquality:
            scrapedtitle += ' [%s]'%(scrapedquality)

        itemlist.append(item.clone(title=scrapedtitle, url=scrapedurl, plot=scrapedplot, action="findvideos",
                                   show=scrapedtitle, thumbnail=scrapedthumbnail))
Con esto te cogeria las listas en los generos y en la busqueda.

Animo q vas por buen camino!!!