Category: megaupload

  • Actualización mget

    Actualización mget

    Debido al rediseño de megaupload mget ha dejado de funcionar, el problema se debe específicamente a que el link de descarga ya no se identifica con el id downloadlink sino con la clase download_regular_usual, ademas el tiempo de espera ahora es de 60 segundos.

    Por el momento no tengo como arreglar la versión para windows pero la de linux ya esta lista, solo hay que reemplazar el archivo antiguo y dar permisos de ejecución.

  • mget ahora para windows

    mget ahora para windows

    Actualización: se incluyeron las dependencias del wget que faltaban, que pena u_u.

    Un amigo me pidió que le pasara el programa con el que descargo de megaupload, pero en cuanto le dije que tenia que:

    1. Descargar e instalar python 2.6.
    2. Descargar e instalar wget para Windows.
    3. Poner los directorios de wget y python en el PATH de Windows.
    En seguida se desanimo (no se por que XD), así que me pase toda una tarde mejorando un poco el programa e intentando convertirlo en un ejecutable usando pyinstaller y he aquí el resultado:
    Basta con descomprimir los archivos en la carpeta windows y a descargar de megaupload. Lo probé en varias maquinas con Windows XP y funciono correctamente, pero si tienen algún problema no duden en dejarlo en los comentarios.
    Su uso es muy sencillo, abren la consola de comandos y:
    mget -c url-con-link-de-megaupload

    mget -i archivo-con-links

    mget link1 link2 link3 ...

    Para una próxima explico como fue lo de convertir el script en ejecutable, algo muy util para compartir los programas que hagamos con amigos.

    Pueden seguirme en twitter o agregarme en Google+

  • script: descarga automática de Megaupload

    Aprovechando que estoy aprendiendo a programar en bash y que megaupload ahora no requiere llenar ningún captcha para realizar las descargas, decidí rescribir el anterior script (escrito en python) y agregarle nuevas características.

    Ahora es posible indicar una URL (con la opcion -c) y el script extrae los links de Megaupload que encuentre, me parece una funcionalidad muy conveniente ya que con el anterior script era necesario copiar a mano todos los links a un archivo de texto, lo cual puede ser muy tedioso.

    Otra funcionalidad es la de usar la dirección ip de los servidores para realizar las descargas, esto ayuda a saltarse algunos proxies que están configurados para bloquear paginas por nombres de dominio en lugar de direcciones ip XD.

    El script ha sido probado con Ubuntu 10.10 que es el OS que uso actualmente, pero no creo que tengan problemas usándolo en otra distro, siempre y cuando tenga instalado wget que es el programa que usa para realizar las descargas.

    Pueden descargarlo del siguiente enlace:

    Luego le damos permisos de ejecución y lo copian en el directorio bin:

    novatoz@sney2002:~$ chmod +x mget
    novatoz@sney2002:~$ sudo cp mget /bin/

    Espero les sea de utilidad, y si tienen alguna inquietud o sugerencia no duden en dejarla en los comentarios.

    update: corregido error que impedía descargar archivos cuyos nombres contuvieran  caracteres no ascii, los cuales están codificados usando html entities, ejemplo:

    # este link no apunta a ningún archivo
    http://www465.megaupload.com/files/f4f4ab2163558f1f/Capacitación.mp4
    # el link es valido al cambiar ó por ó
    http://www465.megaupload.com/files/f4f4ab2163558f1f/Capacitación.mp4

    ahora es necesario tener instalado w3m

  • Saltándose los captchas de Megaupload con python

    Como todo buen gorrón me gusta las cosas gratis y fáciles, sobre todo cuando se tiene una serie de 24 capítulos que se quiere descargar sin estar pendiente rellenando captchas, y aunque las cuentas premiun no son tan caras, la verdad no me apetece gastarme una platica en algo que voy a utilizar muy rara vez, así que hice lo que cualquier persona normal haría, juntar un montón de software libre y pegarlos con un poco de python y voila mi propio gestor de descarga con reconocimiento de captchas (solo megaupload), ya se que hay muchos programas que hacen lo mismo y ademas libres (Tucan por ejemplo), pero usarlos no seria tan divertido, así que me puse a recolectar los materiales para mi “manualidad”. Gestor de descargas ya tenia y no podía ser mejor que wget, solo faltaba el reconocimiento de caracteres, ocr que llaman; después de un poco de búsqueda apareció tesseract que sin lugar a dudas es el mejor programa de reconocimiento de caracteres que haya visto hasta el momento. Solo faltaban algunas librerías como pytesser para “comunicarse” con tesseract y  libxml2dom (requiere libxml2) para consultar el dom en documentos aun cuando estos estén mal formados.

    Como ven, lo bonito del software libre es que con tan solo una búsqueda nos encontramos con programas maravillosos, los cuales podemos utilizar sin ninguna restricción (sí, ya se que esto no es completamente cierto). Ahora si, con ustedes el script:

    import libxml2dom
    import urllib2
    import urllib
    import pytesser
    import Image

    MAX_TRY = 5 # intentos antes de rendirse
    WAIT_TIME = 45 # tiempo de espera en segundos
    CAPTCHA_INPUT_NAME = "captcha"
    TEMP_FILE_NAME = "tempImg.gif"
    ID_DOWNLOAD_LINK = "downloadlink"

    def urlopen(url, data={}):
    """Abrir un recurso remoto, si se pasa data se envía por POST"""
    req = urllib2.Request(url, urllib.urlencode(data) if data else None)
    try:
    sock = urllib2.urlopen(req)
    try:
    data = sock.read()
    finally:
    sock.close()
    except IOError:
    print "el archivo no existe"
    else:
    return data

    def html2dom(page):
    """Retornar representación DOM de un documento html"""
    dom = libxml2dom.parseString(page, html=1)
    return dom

    def tag(elem, tag):
    """Encontrar descendientes de un elementos por su tag"""
    elements = elem.getElementsByTagName(tag)
    return elements[0] if len(elements) == 1 else elements

    def id(elem, Id):
    return elem.getElementById(Id)

    def attr(elem, attr):
    """Retornar atributo de un elemento"""
    return elem.getAttribute(attr)

    def save_img(uri):
    """Guardar imagen en local"""
    data = urlopen(uri)
    temp = file(TEMP_FILE_NAME, 'wb')
    temp.write(data)
    temp.close()

    def resolver_captcha():
    """Resolver captcha"""
    data = Image.open(TEMP_FILE_NAME)
    return pytesser.image_to_string(data)[:4]

    def fill_form(page):
    """Recolectar datos de formulario"""
    try:
    form = tag(page, 'form')
    img = tag(form, 'img')

    save_img(attr(img, "src"))

    # crear diccionario valores a enviar
    data = dict([(attr(i, 'name'),attr(i, 'value')) for i in tag(form, 'input')])

    # "rellenar" campo captcha
    captcha = resolver_captcha()
    data[CAPTCHA_INPUT_NAME] = captcha
    except:
    return None
    else:
    return (data, captcha)

    # Donde la magia sucede XD
    def get(url):
    """Descargar archivo"""
    times = 1

    # solo links de megaupload
    if url.find('http://www.megaupload.com/') != 0:
    print "%s no es un link de megaupload" % url
    return 0

    # Abrir pagina de formulario
    page = html2dom( urlopen(url) )

    while True:
    # llenamos el formulario
    data, captcha = fill_form(page)

    if not data or times == MAX_TRY:
    print "Error al abrir %s, puede que el link haya sido deshabilitado" % url
    return 0

    print "%s ==> intento %dncaptcha = %s" % (url, times, captcha)
    times += 1

    # Enviamos formulario por POST
    page = html2dom( urlopen(url, data) )

    # Si el captcha esta correcto obtenemos la página de descarga
    download_page = id(page, ID_DOWNLOAD_LINK)

    if download_page:
    download_link = tag( download_page , 'a' )
    import subprocess, time

    # please wait.... XD
    time.sleep(WAIT_TIME)

    args = ['wget', '-c', attr(download_link, 'href')]

    # empezamos a descargar ^_^
    proc = subprocess.Popen(args)
    retcode = proc.wait()
    return 1

    def get_from_file(file_path):
    """descargar múltiples archivos leyendo urls almacenadas en un archivo"""
    try:
    sock = file(file_path)
    try:
    lines = sock.readlines()
    finally:
    sock.close()
    except IOError:
    print "el archivo %s no existe" % file_path
    else:
    for line in lines:
    url = line.strip()
    if url:
    get( url )

    if __name__ == "__main__":
    import sys

    arg = sys.argv[1:]

    if arg[0] == "-f":
    get_from_file(arg[1])
    elif "http" in arg[0]:
    get(arg[0])
    else:
    print "uso:nmget link_descarganmget -f /ruta/archivo/links_descargan"

    Claro que le hacen falta algunas funcionalidades, pero para lo que lo necesito me basta y me sobra, ademas como ya dije existe una gran variedad de programas que hacen lo mismo. Si lo desean pueden descargar los archivos desde el siguiente enlace:

    P.D.: Se aceptan criticas, solo no sean tan duros XD