Página 1 de 1

servidor videomega a testear

Publicado: 20 Feb 2016, 12:32
por robalo
Aunque lo he probado y en apariencia funciona prefiero que lo probéis antes de subirlo al Github.

Le he añadido el mensaje que entrega el servidor cuando un vídeo no existe y nos entrega un vídeo fake. El mensaje que veréis en estos casos es La url del vídeo se extrae de 'function(p,a,c,k,e,d)' con un sencillo algoritmo para no tener que usar o 'jsbeautifier' o 'jsunpack' que suelen dar problemas cuando no son 'p,a,c,k,e,r'.

Con todos mis respetos a @Dr-Zer0, @Cmos y @franky creo que modificar 'core.jsunpack' o 'lib.'jsbeautifier' para que ande un par de canales o servidores, no creo que sea una buena solución aunque "posiblemente" funcionen los antiguos canales o servidores que usaban estas librerías.

El code 'packed' no es tan grande como para no poder idear un simple algoritmo efectivo para un canal o servidor dado sin tener que modificar tantas cosas.

Si no estáis contentos con este cambio o idea, no hay problema, nos lo tomaremos como simple ejercicio de aprendizaje :)

Re: servidor videomega a testear

Publicado: 21 Feb 2016, 16:13
por Cmos
Por mi parte confirmo que funciona sin problemas ;) Y desde luego tienes toda la razón en que es preferible no modificar alguna librería de esa clase por alguna excepción que no funcione y más todavía si se puede sacar con un algoritmo específico, pero (hablando por mí) estoy muy pegado con javascript como para que me salga algo así :lol: Todo lo que sea para mejorar bienvenido sea :D

Re: servidor videomega a testear

Publicado: 22 Feb 2016, 22:33
por neno1978
Master ese algoritmo es aplicable para todo (p,a,c,k,e,d) o variaría según servidor o código ;)

Re: servidor videomega a testear

Publicado: 23 Feb 2016, 02:00
por robalo
No, es una solución para viedomega que usa base 44, para otro sería diferente. El caso es que lo normal es que los packed sean base 36 ó 62 y con esas bases ya funcionaba la librería y videomega usa un código muy pequeño que a ojímetro se puede deducir como sacarlo viendo los caractares que usa para la url y las posiciones que le correspondería. Se puede hacer para todos pero tampoco hay que calentarse la cabeza. A mi estos tipos de ejerciccios me gustan desde los tiempos del ábaco :)

Siempre que nos atengamos a la url es fácil sacarlo

Si te gusta jugar como a mi, para una base 36 tipo server flashx podría ser algo parecido a

Código: Seleccionar todo

    matches = scrapertools.get_match(packed,",'(\|[^']+)'").split('|')
    urls = []
    for url in for_urls:
        media_url = ""
        c = 0
        while c < len(url)+1:
            if url[c] >= "a" and url[c] <= "z":
                media_url+= matches[ord(url[c])-87]
                c+= 1
            elif url[c] == "1" and url[c+1] >= "a" and url[c+1] <= "z":
                media_url+= matches[ord(url[c+1])-51]
                c+= 2
            elif url[c] == "1" and url[c+1] >= "0" and url[c+1] <= "9":
                media_url+= matches[ord(url[c+1])-12]
                c+= 2
            elif url[c] == "3" and url[c+1] >= "a" and url[c+1] <= "z":
                media_url+= matches[ord(url[c+1])+21]
                c+= 2
            elif url[c] >= "1" and url[c] <= "9" and (url[c+1] == ":" or url[c+1] == "." or url[c+1] == "/"):
                media_url+= matches[int(url[c])]
                c+= 1
            else:
                media_url+= url[c]
                c+= 1
        urls.append(media_url)
para una base 62 tipo server powvideo podría ser algo así

Código: Seleccionar todo

    for_urls = scrapertools.find_single_match(packed, "\d=\[(\{.*?\})\]")
    for_urls = scrapertools.find_multiple_matches(for_urls, "\{[^']+'([^']+)'")

    matches = scrapertools.get_match(packed,",'(\|[^']+)'").split('|')
    urls = []
    for url in for_urls:
        media_url = ""
        pair = False
        for x in url:
            if not pair:
                pair = False
                if x >= "a" and x <= "z" and not x == "h" and not x == "v": media_url+= matches[ord(x)-87]
                elif x >= "A" and x <= "Z": media_url+= matches[ord(x)-29]
                elif x == "1":
                    pair = True
                else: media_url+= x
            else:
                pair = False
                if x >= "A" and x <= "Z": media_url+= matches[ord(x)+33]
                else: media_url+= "1" + x
        urls.append(media_url)
Recuerdo que en algunos server se hacía algo parecido, la deformación del scraper :)

Re: servidor videomega a testear

Publicado: 23 Feb 2016, 07:41
por neno1978
Me mareao... :lol: :lol: :lol: pero como gusto de romperme la cabeza jugando, vamos a investigar ;)

Re: servidor videomega a testear

Publicado: 23 Feb 2016, 10:47
por kampanita
@robalo: creo que ya te lo comenté otra vez, pero...mola como piensas.

Re: servidor videomega a testear

Publicado: 23 Feb 2016, 12:22
por robalo
En el caso de videomega, también se podría insertar una línea por encima de 'data = jsunpack.unpack(data)' para no modificar el core.jsunpack antiguo

Código: Seleccionar todo

        data = re.sub(r"}',\d+,(\d+),'", r"}',36,\1,'", data)
        data = jsunpack.unpack(data)
pero lo otro es más divertido :)

Re: servidor videomega a testear

Publicado: 23 Feb 2016, 21:18
por robalo
otra id de error para videomega para añadir a 'test_video_exists': "2e42c5f2e35c0c161755fa1f52c3214e"

Código: Seleccionar todo

    if "4cd02ba69e49350faa0aa9e5af16cde7" in packed or \
       "2e42c5f2e35c0c161755fa1f52c3214e" in packed:
        return False, "El vídeo no se pudo cargar, ya sea porque el servidor o la red fracasaron o porque el formato no es compatible."