Skip to content

Instantly share code, notes, and snippets.

@sney2002
Created Aug 16, 2011
Embed
What would you like to do?
script python para descarga automática de megaupload
#-*- coding: utf-8 -*-
"""
Copyright (c) 2011, Jhonathan Sneider Salguero Villa (http://www.novatoz.com/)
script para descarga automática de archivos alojados en megaupload.
Intenta burlar proxies que bloquean por nombre de dominio y extensión de archivos
"""
from base64 import urlsafe_b64encode
from contextlib import closing
import socket
import os
import sys
import subprocess
import urllib2
import re
import time
IPS = socket.gethostbyname_ex("www.megaupload.com")[2]
re_download_link = re.compile(r'href="([^"]*)".*class="download_regular_usual"')
# El nuevo tiempo de espera es de 60s pero al parecer hay que esperar un poco mas
WAIT_TIME = 65
def get_download_link(url):
"""Obtener link de descarga de megaupload"""
link = None
with closing(urllib2.urlopen(url)) as page:
match = re_download_link.search(page.read())
if match:
link = match.group(1)
return link
def random_string(length):
"retorna texto aleatorio usable en una url"
return urlsafe_b64encode(os.urandom(length))
def getip(hostname):
return socket.gethostbyname(hostname)
def download(link):
"""Descargar archivo alojado en megaupload
Intenta saltar restricciones conectándose por ip y cambiando nombre archivo
"""
link = urllib2.urlparse.urlparse(link)
for ip in IPS:
# sustituir nombre de dominio con ip
new_link = "http://{0}/?{1}".format(ip, link.query)
download_link = get_download_link(new_link)
if download_link:
a = urllib2.urlparse.urlparse(download_link)
server_ip = getip(a.netloc)
# Usar string aleatoria en lugar de nombre de archivo
path, filename = os.path.split(a.path)
fake_name = random_string(20)
# guardar archivo con nombre original usando opción -O de wget
original_name = urllib2.unquote(filename)
# sustituir nombre de dominio con ip y usar nombre de archivo falso
new_url = "http://{0}{1}/{2}".format(server_ip, path, fake_name)
# please wait.... XD
for i in reversed(range(WAIT_TIME)):
print >>sys.stderr, "\rpor favor espere: %-2d" % i,
time.sleep(1)
print >>sys.stderr
args = ['wget', '-c', '-O', original_name, new_url]
# empezamos a descargar ^_^
proc = subprocess.Popen(args)
return proc.wait()
if __name__ == '__main__':
import sys
download(sys.argv[1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment