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?