Página 2 de 2

Re: Nuevo canal: PelisPedia

Publicado: 24 Mar 2016, 12:01
por SeiTaN
Buenas,

Pongo la última versión con paginación (no sale ordenada la lista por que no viene asi en la web y es un poco caotico si lo hiciera yo por fuera),ya se carga siempre los subtitulos en las 3 opciones; html5, openload y flash (gracias a Cmos como siempre :)).

Echadle un ojo y si veis algo por favor comentadlo que lo subiré al GitHub después de unos días.

Un saludo.

Re: Nuevo canal: PelisPedia

Publicado: 19 Abr 2016, 14:04
por elrules
Han puesto un cloudflare en la web así que no funciona el plugin. Es un anti DOS layer 7.

He encontrado sobre ese tipo de cloudflare esto en un foro:
http://hackforums.net/printthread.php?tid=4423864

Código: Seleccionar todo

import re
import requests
import PyV8

def grab_cloudflare(url, *args, **kwargs):
    sess = requests.session()
    sess.headers["User-Agent"] = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0"
    resp = sess.get(url, *args, **kwargs)
    url = resp.url
    page = resp.content

    if "a = document.getElementById('jschl-answer');" not in page:
      # Return page as it is; no Cloudflare protection detected
      return page

    # Otherwise, Cloudflare anti-bots is on
    domain = url.split("/")[2]

    challenge = re.search(r'name="jschl_vc" value="(\w+)"', page).group(1)

    builder = re.search(r"setTimeout.+?\r?\n([\s\S]+?a\.value =.+?)\r?\n", page).group(1)
    builder = re.sub(r"a\.value =(.+?) \+ .+?;", r"\1", builder)
    builder = re.sub(r"\s{3,}[a-z](?: = |\.).+", "", builder)

    with PyV8.JSContext() as ctxt:
      # Safely evaluate Javascript expression
      answer = str(int(ctxt.eval(builder)) + len(domain))

    params = {"jschl_vc": challenge, "jschl_answer": answer}
    submit_url = url + "/cdn-cgi/l/chk_jschl"
    return sess.get(submit_url, params=params, headers={"Referer": url}, *args, **kwargs).content, sess

Un saludo

Re: Nuevo canal: PelisPedia

Publicado: 19 Abr 2016, 14:44
por Cmos
elrules escribió:Han puesto un cloudflare en la web así que no funciona el plugin. Es un anti DOS layer 7.

He encontrado sobre ese tipo de cloudflare esto en un foro:
http://hackforums.net/printthread.php?tid=4423864

Bien visto, el problema es que utiliza la librería PyV8 que hay que compilarla según sea el s.o. Por suerte tenemos una función que creó el compañero DrZ3r0 para este tema y que funciona de maravilla:

Código: Seleccionar todo

def anti_cloudflare(url):
    # global headers

    try:
        resp_headers = scrapertools.get_headers_from_response(url, headers=headers)
        resp_headers = dict(resp_headers)
    except urllib2.HTTPError, e:
        resp_headers = e.headers

    if 'refresh' in resp_headers:
        time.sleep(int(resp_headers['refresh'][:1]))

        scrapertools.get_headers_from_response(host + '/' + resp_headers['refresh'][7:], headers=headers)

    return scrapertools.cache_page(url, headers=headers)
SeiTaN, tienes trabajo :lol:

Re: Nuevo canal: PelisPedia

Publicado: 21 Abr 2016, 02:01
por elrules
Confirmo que con el anticloudflare que habéis posteado funciona. Lo malo es que la web en sí ha cambiado un poco. Hay que revisar cómo pide las secciones. Por otra parte el findvideos no funciona. Yo he conseguido implementar el nuevo tipo de video que es como lo están subiendo ahora en HTML5:

Código: Seleccionar todo

if "pelispedia" in scrapedurl and "/player/" in scrapedurl:

            data = scrapertools.cachePage(scrapedurl, headers=headers, device=item.device)

            try:
                matches = re.findall( 'sources: (\[\{.+\}\]),' , data)
                jsoncontent = matches[0]
            except:
                jsoncontent = None

            if jsoncontent:
                try:
                    array = json.loads(jsoncontent)
                except:
                    array = []


            try:
                matches = re.findall( 'tracks: \[\{file: "(.+)",label:' , data)
                subtitle = matches[0]
            except:
                subtitle = None

            for video in array:
                url = video['file']
                label = video['label']
                title = "Ver video en ["+label+"]"
                itemlist.append(Item(channel=__channel__, title=title, subtitle=subtitle, url=url, player="vlc" if subtitle else "native", server="directo", action="play", folder=False))

Re: Nuevo canal: PelisPedia

Publicado: 21 Abr 2016, 12:04
por Cmos
elrules escribió:Confirmo que con el anticloudflare que habéis posteado funciona. Lo malo es que la web en sí ha cambiado un poco. Hay que revisar cómo pide las secciones. Por otra parte el findvideos no funciona. Yo he conseguido implementar el nuevo tipo de video que es como lo están subiendo ahora en HTML5:
Una solución muy buena :D En las demás como dices han cambiado varias cosas, en principio las secciones normales con la función anticloudflare no hay problema, y para los vídeos la función play podría quedar así, para no cambiar mucho lo que ya hay:

Código: Seleccionar todo

def play(item):
    logger.info("pelisalacarta.channels.pelispedia play url={0}".format(item.url))

    itemlist = []
    # Para videos flash y html5
    if "pelispedia.biz" in item.url:
        logger.info("estoy en el otro html5")
        key = scrapertools.find_single_match(item.url, 'v=([^&]+).+?imagen=([^&]+)')

        thumbnail = ""
        if len(key) > 1:
            thumbnail = key[1]
        headers.append(['Referer',item.extra])
        data = scrapertools.cache_page(item.url, headers=headers)

        media_url = scrapertools.find_single_match(data, '"file":"([^"]+)"').replace("\\","")
        sub = scrapertools.find_single_match(data, 'file:\s"([^"]+)".+?label:\s"Spanish"')
        itemlist.append(Item(channel=__channel__, title=item.title, url=media_url, server="directo", action="play",
                                 subtitle=sub, thumbnail=thumbnail))
    elif "pelispedia" in item.url:
        key = scrapertools.find_single_match(item.url, 'index.php\?id=([^&]+)&sub=([^&]+)&.+?imagen=([^&]+)')

        subtitle = ""
        thumbnail = ""

        if key[2] != "":
            thumbnail = key[2]
        if key[1] != "":
            url_sub = "http://www.pelispedia.tv/sub/%s.srt" % key[1]
            data_sub = anti_cloudflare(url_sub
            #Función que guarda los subs en un archivo y devuelve la ruta
            subtitle = save_sub(data_sub)
        if "Player_Html5" in item.url:
            url = "http://www.pelispedia.tv/Pe_Player_Html5/pk/pk1/plugins/protected.php"
            post = "fv=21&url="+urllib.quote(key[0])+"&sou=pic"
        else:
            url = "http://www.pelispedia.tv/Pe_flsh/plugins/gkpluginsphp.php"
            post = "link="+urllib.quote(key[0])
        data = scrapertools.cache_page(url, post=post, headers=headers)
        media_urls = scrapertools.find_multiple_matches(data, '(?:link|url)":"([^"]+)"')
        # Si hay varias urls se añade la última que es la de mayor calidad
        if len(media_urls) > 0:
            url = media_urls[len(media_urls)-1].replace("\\", "")
            itemlist.append(Item(channel=__channel__, title=item.title, url=url, server="directo", action="play",
                                 subtitle=subtitle, thumbnail=thumbnail))
    else:
        itemlist = servertools.find_video_items(data=item.url)
        for videoitem in itemlist:
            videoitem.title = item.title
            videoitem.channel = __channel__

    return itemlist

Re: Nuevo canal: PelisPedia

Publicado: 22 Abr 2016, 20:00
por SeiTaN
Ya funciona de nuevo el canal.

https://raw.githubusercontent.com/SeiTa ... ispedia.py

Falta por arreglar 2 enlaces (1 html5 y el flash), los otros 2 funcionan perfectamente.

Re: Nuevo canal: PelisPedia

Publicado: 05 May 2016, 14:46
por elrules
SeiTaN, el enlace que has posteado no funciona, puedes decirme dónde encontrar el parche? o es tan solo añadir el código que ha puesto Cmos en el mensaje anterior?