Created
February 19, 2013 11:09
-
-
Save zyxar/4984939 to your computer and use it in GitHub Desktop.
Download Helper for Kuaipan
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import urllib2 | |
from os.path import exists, getsize | |
from urllib import unquote | |
import sys | |
def status(percent): | |
bar_size = 40 | |
percent = int(percent*100) | |
if percent > 100: | |
percent = 100 | |
dots = bar_size * percent / 100 | |
plus = '' | |
if dots < 38: | |
plus = '>' | |
bar = '=' * dots+plus | |
bar = '{0:>3}%[{1:<40}]'.format(percent, bar) | |
sys.stdout.write('\r'+bar) | |
sys.stdout.flush() | |
class Klient(): | |
"""Klient: Download Helper for Kuaipan""" | |
def __init__(self, url=None): | |
if url is not None: | |
self.url = url | |
self.conn = None | |
self.cont = None | |
self.payload = None | |
def seturl(self, url): | |
self.url = url | |
def connect(self): | |
if self.url is not None: | |
try: | |
self.conn = urllib2.urlopen(self.url, timeout = 5) | |
except: | |
self.conn = None | |
return self.conn | |
def meta(self): | |
if self.conn is not None: | |
self.info = self.conn.info() | |
return self.info | |
def parse(self): | |
if self.cont is None: | |
if self.conn is None: | |
r = self.connect() | |
if r is None: | |
return None | |
self.cont = self.conn.read() | |
idx = self.cont.find('var url = encodeURIComponent')+30 | |
self.payload = self.cont[idx:] | |
idx = self.payload.find(');')-1 | |
self.payload = self.payload[:idx] | |
return self.payload | |
def download(self): | |
if self.payload is not None: | |
uu = urllib2.urlopen(self.payload, timeout=5) | |
meta = uu.info() | |
filename = unquote(meta.getheader('content-disposition')[28:]) | |
filename = filename.decode('utf-8') | |
dld = 0 | |
size = int(meta.getheader('content-length')) | |
if exists(filename) and getsize(filename) == size: | |
print "File %s already exists." % filename | |
else: | |
print "Downloading: %s. Bytes: %d" % (filename, size) | |
ff = open(filename, 'wb') | |
while True: | |
buffer = uu.read(8192) | |
if not buffer: | |
break | |
dld += len(buffer) | |
ff.write(buffer) | |
status(dld*1./size) | |
ff.close() | |
if __name__ == '__main__': | |
client = Klient() | |
client.seturl('http://www.kuaipan.cn/file/id_18920726803259181.htm') | |
url = client.parse() | |
client.download() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment