|
|
发表于 2006-11-10 20:44:36
|
显示全部楼层
Post by aiyi
主要有三处改变:
1。脚本改名为getsong,简单些,呵呵。
2。内置多线程下载,不再依赖axel。
3。选择速度较快的站点进行下载,减少您的等待时间。
有需要这个脚本的朋友请查看本帖第一楼从附件中下载最新版本。 再传一下我的patch,改动有三处
1. 出现错误时,重新连接时,应该重新构造请求包,否则将使下载的文件出错;
2. 使用"\r"代替"\b"
3. 使用sys.stdin.encoding代替sys.getfilesystemencoding(),一般来说,这两个应该是一样的。但是从名字来说,应该使用stdin.encoding更准确,虽然我也不知道它能不能带来实际的好处。- --- getsong 2006-11-09 13:09:59.000000000 +0800
- +++ getsong.py 2006-11-10 20:07:21.000000000 +0800
- @@ -68,16 +68,16 @@
- except OSError:
- self.downloaded = 0
- self.percent = self.downloaded/float(self.totalLength)*100
- - self.headerrange = (self.range[0]+self.downloaded, self.range[1])
- self.bufferSize = 8192
- - request = urllib2.Request(self.url)
- - request.add_header('Range', 'bytes=%d-%d' %self.headerrange)
- downloadAll = False
- retries = 1
- while not downloadAll:
- if retries > 10:
- break
- try:
- + self.headerrange = (self.range[0]+self.downloaded, self.range[1])
- + request = urllib2.Request(self.url)
- + request.add_header('Range', 'bytes=%d-%d' %self.headerrange)
- conn = urllib2.urlopen(request)
- startTime = time.time()
- data = conn.read(self.bufferSize)
- @@ -163,10 +163,9 @@
- rate = downloadedThistime / float(etime)/1024
- except:
- rate = 100.0
- - progressStr = u'Filesize: %d(%.2fM) Downloaded: %.2f%% Avg rate: %.1fKB/s' %(length, mb, d, rate)
- + progressStr = u'\rFilesize: %d(%.2fM) Downloaded: %.2f%% Avg rate: %.1fKB/s' %(length, mb, d, rate)
- sys.stdout.write(progressStr)
- sys.stdout.flush()
- - sys.stdout.write('\b'*(len(progressStr)+1))
- live = hasLive(ts)
- time.sleep(0.2)
- except KeyboardInterrupt:
- @@ -497,6 +496,6 @@
- if o in ('-v', '--version'):
- print 'v1.0 by Xupeng Yun <recordus@gmail.com>'
- for title in titles:
- - title = title.decode(sys.getfilesystemencoding(), 'ignore')
- - artist = artist.decode(sys.getfilesystemencoding(), 'ignore')
- + title = title.decode(sys.stdin.encoding, 'ignore')
- + artist = artist.decode(sys.stdin.encoding, 'ignore')
- DownloadSong(artist, title)
复制代码 |
|