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í

Todo lo que sea para mejorar bienvenido sea

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