Página 8 de 44

Re: Reportar aquí cualquier problema con Openload

Publicado: 23 Oct 2016, 07:08
por robalo
Cmos escribió:Me llegó a rayar un poco con tanto split y join, además como en python los join se escriben "a la inversa" por un momento ya no sabía lo que hacía xD Estos montan un puzzle cada vez que tocan algo :lol:
Como somos muy cafres/cabezones y lo queremos hacer todo de cabeza pues es lo que nos suele pasar :lol:

Re: Reportar aquí cualquier problema con Openload

Publicado: 25 Oct 2016, 08:20
por zastilla
Para evitar falsos errores he sacado el script de openload y lo he modificado para que funcione en el pc fuera de xbmc. Simplemente llamando a la funcion get_video_url() me saca el enlace.

Puedo decir sin riesgos a cagarla de nuevo que el script resuelve correctamente la url a reproducir a ciertas horas.
mas o menos tengo comprobado que por las mañanas va bien pero por las noches por ejemplo no va (ayer entre las 21.00h y las 24h que estuve probando no iba, mientras otros scripts de otros sitios si lo hacían)y no resuelve correctamente.
Esta noche estaré atento y si vuelve a fallar os aviso, pero el script no va bien.Hay algo que en ciertos momentos no funciona.

un saludo y gracias

Re: Reportar aquí cualquier problema con Openload

Publicado: 25 Oct 2016, 20:18
por zastilla
Ahora mismo como casi todas las noches últimamente no funciona el plugin.

la función get_video_url() da como resultado []

un saludo

Re: Reportar aquí cualquier problema con Openload

Publicado: 25 Oct 2016, 20:59
por Cmos
Gracias por tu "investigación" zastilla :D, tienes razón en que con algunos enlaces falla, pero en realidad no tiene que ver con el momento del día. La función que se usa para decodificar el código está correcta, es solo que el método decodeHtmlentities de la librería scrapertools que se ejecuta en la línea 150, parece que no transforma correctamente el código cuando en él hay un ">" o "<". Estas dos entidades html debería traducirlas como ">" y "<", pero no lo hace y por eso falla. Aun así eso solo pasa una vez cada varios intentos, si no funciona es solo volver a probar que debe funcionar.

De todas formas, actualizo el archivo en el enlace del primer mensaje, si bien como digo el que está ahora es funcional aunque en algunas ocasiones falle ;)
robalo escribió:
Cmos escribió:Me llegó a rayar un poco con tanto split y join, además como en python los join se escriben "a la inversa" por un momento ya no sabía lo que hacía xD Estos montan un puzzle cada vez que tocan algo :lol:
Como somos muy cafres/cabezones y lo queremos hacer todo de cabeza pues es lo que nos suele pasar :lol:
Desde luego, a mí a cafradas no me gana nadie xD, si es que "cuando el programador coge el camino..." :lol:

Re: Reportar aquí cualquier problema con Openload

Publicado: 26 Oct 2016, 13:47
por zastilla
Hola Cmos,

Me están saliendo errores en la función get_link_api(page_url): del openload.py cuando intenta sacar la extensión.

Código: Seleccionar todo

extension = "." + find_single_match(data["result"]["content_type"], '/(\w+)')
No se si soy yo al tenerlo modificado para que funcione en el pc, pero creo que no

Un saludo y perdón por ser tan pesado.

Re: Reportar aquí cualquier problema con Openload

Publicado: 26 Oct 2016, 15:02
por Cmos
zastilla escribió:Hola Cmos,

Me están saliendo errores en la función get_link_api(page_url): del openload.py cuando intenta sacar la extensión.

Código: Seleccionar todo

extension = "." + find_single_match(data["result"]["content_type"], '/(\w+)')
No hay nada que perdonar hombre. La función get_link_api que comentas solo se ejecuta si la principal no puede descodificar el código, y además la api funciona cuando quiere, a veces la desactivan por exceso de tráfico, otras ponen captcha, es normal que falle porque no siempre da un resultado válido. Lo que no es normal es que llegue a ejecutarse esa función, yo he probado varios enlaces y todos los extrae correctamente, algo tienes que tener mal.

Re: Reportar aquí cualquier problema con Openload

Publicado: 26 Oct 2016, 15:04
por zastilla
Ahora mismo no me suelta error, simplemente me resuelve la url final como []

gracias por tu interés en el tema

Re: Reportar aquí cualquier problema con Openload

Publicado: 27 Oct 2016, 08:43
por zastilla
Bueno ya se por qué según horas del día me resuelve bien y a otras horas me lo hace mal....
A mi siempre me lo resuelve la API, así que cuando está saturada la web (tardes-noche) me tira error y por las mañanas me va bien :lol: :lol: :lol:

PD ya he solucionado los errores que tenía y ya me funciona todo con normalidad.

Perdón por las molestias y gracias por todo

Re: Reportar aquí cualquier problema con Openload

Publicado: 27 Oct 2016, 13:25
por Cmos
Muy buenas zastilla, ya decía yo que era raro lo de las horas del día :mrgreen: Ahora lo entiendo. Gracias por comentarme lo de esa línea en la función de la api, lo apunto para corregirlo ;) Y hombre, tampoco es plan de echarse por tierra, ni mediocre aprendiz ni nada, aquí estamos para colaborar y aprender, yo cometo muchísimos fallos y he necesitado mucha ayuda para poder defenderme un poco con python xD

Respecto a la línea que comentas que te da error, seguramente hay algo que está fallando antes, y cuando llega a esa parte la variable magic no tiene el valor correcto. Lo mismo se debe a alguna referencia a scrapertools o a la libreria aadecode. Puedes probar con este código, que no necesita de otros archivos, y a mí al menos por línea de comandos me funciona bien, ya tendrías que cambiar el print videourl por lo que quieras hacer con el enlace ;)

Código: Seleccionar todo

# -*- coding: utf-8 -*-

import re, urllib2, urllib, sys

def get_video_url(url):
    req = urllib2.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko/20100101 Firefox/46.0')
    req.add_header('X-Requested-With','XMLHttpRequest')
    response = urllib2.urlopen(req)
    data = response.read()
    response.close()
    if "videocontainer" not in data:
        url = url.replace("/embed/","/f/")
        req = urllib2.Request(url)
        req.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko/20100101 Firefox/46.0')
        req.add_header('X-Requested-With','XMLHttpRequest')
        response = urllib2.urlopen(req)
        data = response.read()
        response.close()

    text_encode = re.findall('(゚ω゚.*?\(\'\_\'\));',data,re.DOTALL)
    text_decode = ""
    for t in text_encode:
        text_decode += decode(t)
    number = re.findall('charCodeAt\(0\)\s*\+\s*(\d+)',text_decode,re.DOTALL)[0]
    varj = re.findall('var magic\s*=\s*(\w+)\.slice',text_decode,re.DOTALL)[0]
    varhidden = re.findall('var\s*'+varj+'\s*=\s*\$\("[#]*([^"]+)"\).text',text_decode,re.DOTALL)[0]
    valuehidden = re.findall('id="'+varhidden+'">(.*?)<', data,re.DOTALL)[0]
    magic = ord(valuehidden[-1])
    valuehidden = valuehidden.split(chr(magic-1))
    valuehidden = "\t".join(valuehidden)
    valuehidden = valuehidden.split(valuehidden[-1])
    valuehidden = chr(magic-1).join(valuehidden)
    valuehidden = valuehidden.split("\t")
    valuehidden = chr(magic).join(valuehidden)
    videourl = decode_hidden(valuehidden, number)
    print videourl


def decode_hidden(text, number):
    text = text.replace("&gt9", ">").replace("&quot9", '"').replace("&lt9", '<') \
               .replace("&amp9", '&').replace(">", ">").replace("<", "<")
    text = decodeHtmlentities(text)
    
    s = []
    for char in text:
        j = ord(char)
        s.append(chr(33 + ((j+14) % 94)))

    temp = "".join(s)
    text_decode = temp[0:-1] + chr(ord(temp[-1]) + int(number))
    videourl = "https://openload.co/stream/{0}?mime=true".format(text_decode)

    opener = urllib2.build_opener(urllib2.HTTPHandler(), NoRedirectHandler())
    urllib2.install_opener(opener)
    req = urllib2.Request(videourl)
    req.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko/20100101 Firefox/46.0')
    response = urllib2.urlopen(req)
    info = response.info()
    response.close()
    for header in info:
        if header == "location":
            videourl = info[header]
    videourl = videourl.replace("https", "http").replace("?mime=true", "")

    return videourl


class NoRedirectHandler(urllib2.HTTPRedirectHandler):
    def http_error_302(self, req, fp, code, msg, headers):
        infourl = urllib.addinfourl(fp, headers, req.get_full_url())
        infourl.status = code
        infourl.code = code
        return infourl
    http_error_300 = http_error_302
    http_error_301 = http_error_302
    http_error_303 = http_error_302
    http_error_307 = http_error_302


def decodeHtmlentities(string):
    entity_re = re.compile("&(#?)(\d{1,5}|\w{1,8});")

    def substitute_entity(match):
        from htmlentitydefs import name2codepoint as n2cp
        ent = match.group(2)
        if match.group(1) == "#":
            return unichr(int(ent)).encode('utf-8')
        else:
            cp = n2cp.get(ent)

            if cp:
                return unichr(cp).encode('utf-8')
            else:
                return match.group()

    return entity_re.subn(substitute_entity, string)[0]

def decode(text):
    text = re.sub(r"\s+|/\*.*?\*/", "", text)
    data = text.split("+(゚Д゚)[゚o゚]")[1]
    chars = data.split("+(゚Д゚)[゚ε゚]+")[1:]

    txt = ""
    for char in chars:
        char = char \
            .replace("(o゚ー゚o)","u") \
            .replace("c", "0") \
            .replace("(゚Д゚)['0']", "c") \
            .replace("゚Θ゚", "1") \
            .replace("!+[]", "1") \
            .replace("-~", "1+") \
            .replace("o", "3") \
            .replace("_", "3") \
            .replace("゚ー゚", "4") \
            .replace("(+", "(")
        char = re.sub(r'\((\d)\)', r'\1', char)

        c = ""; subchar = ""
        for v in char:
            c+= v
            try: x = c; subchar+= str(eval(x)); c = ""
            except: pass
        if subchar != '': txt+= subchar + "|"
    txt = txt[:-1].replace('+','')

    txt_result = "".join([ chr(int(n, 8)) for n in txt.split('|') ])

    return toStringCases(txt_result)

def toStringCases(txt_result):
    sum_base = ""
    m3 = False
    if ".toString(" in txt_result:
        if "+(" in  txt_result:
            m3 = True
            sum_base = "+"+re.findall(".toString...(\d+).", txt_result,re.DOTALL)[0]
            txt_pre_temp = re.findall("..(\d),(\d+).", txt_result,re.DOTALL)
            txt_temp = [ (n, b) for b ,n in txt_pre_temp ]
        else:
            txt_temp = re.findall('(\d+)\.0.\w+.([^\)]+).', txt_result, re.DOTALL)
        for numero, base in txt_temp:
            code = toString( int(numero), eval(base+sum_base) )
            if m3:
                txt_result = re.sub( r'"|\+', '', txt_result.replace("("+base+","+numero+")", code) )
            else:
                txt_result = re.sub( r"'|\+", '', txt_result.replace(numero+".0.toString("+base+")", code) )
    return txt_result

def toString(number,base):
    string = "0123456789abcdefghijklmnopqrstuvwxyz"
    if number < base:
        return string[number]
    else:
        return toString(number//base,base) + string[number%base]

if __name__ == '__main__':
    get_video_url(sys.argv[1])
Edito: Vale, veo que ya lo has solucionado, pues perfecto entonces, me alegro :)

Re: Reportar aquí cualquier problema con Openload

Publicado: 28 Oct 2016, 07:17
por zastilla
Wow qué pasada,
funciona de maravilla y bastante más limpio de como yo lo había dejado.
Me va a venir perfecto, para intentar comprenderlo.

Muchísimas gracias, todo un detalle por tu parte que te hayas tomado la molestia para ayudarme.