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
				
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  

 
			 
			
					
				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  

  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?