LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: aiyi

写了一个从百度下载Mp3的python脚本

[复制链接]
 楼主| 发表于 2006-11-12 12:22:22 | 显示全部楼层
Post by 三翻领
需要帮忙,我从你那个多线程的脚本里”透“了点代码,但是没有完全理解,尤其是ranges的算法,帮我看看,多谢了。
一个多资源多线程的portage下载脚本,你肯定有用,我这里sync太慢了。

等等,我发现很多问题,地址我先删掉了,我先改改


呵呵,三兄弟在写多线程的portage下载脚本?强烈支持啊。

我原先写的那个单独的多线程下载的那段代码还是有些问题的,比如连接错误时不能重试,要是用的话还是用一楼帖子里下载mp3的脚本里的那段比较好。我刚加入了重试以后也有问题,pupilzeng帮忙给修改了一下现在应该是没有什么问题了。
回复 支持 反对

使用道具 举报

发表于 2006-11-12 14:28:33 | 显示全部楼层
呵呵,多线程不稀奇了,现在在搞多资源多线程。问题是,发现速度没的快,还要修改下,尤其是镜像的选择上。
你的代码受益菲浅,多谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-12 16:52:40 | 显示全部楼层
多资源,偶把最重要的给看没了,汗一下。
镜像的选择是每次emerge时都做?还是一次性选择好了镜像以后每次emerge时就分别从那几个镜像下载?不知道现在在镜像的选择上有什么问题?我写下载mp3的脚本时也用到了镜像选择,尽管我是只选快的不选对的,呵呵。
等待你的portage工具诞生。
回复 支持 反对

使用道具 举报

发表于 2006-11-12 20:54:26 | 显示全部楼层
先抓gentoo页面上的镜像,技术原因,先不管ftp,然后多线程比对指定某个portage的md5,相同的就放在一个列表里,现在是一个个选择从列表里筛选合适的下载一部分(有些镜像不支持下载漂移),以后大概要多线程同时检测吧。
最近身体不好............
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-12 21:26:36 | 显示全部楼层
我现在还不是太明白你是怎么来实现的,你直接修改了emerge命令?还是另外写了一个对emerge进行包装?

我现在有一个还没有来得及细想的idea,是另外写一个小家伙对现有的东东包装,不知道可不可取。
1。使用mirrorselect选择几个速度比较快的镜像,添加到make.conf里。(镜像的速度应该是相对稳定的,这一步只需要做一次,因此镜像选择在下载过程中就不需要做了)
2。使用emerge -pf列出url。
3。多资源多线程下载。

我从emerge -pf的结果中看到镜像一般都有ftp和http两种方式吧,所以http的多线程也就够用了,真的有必要的话再写一个也不算难。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-14 00:14:20 | 显示全部楼层

在啄木鸟社区创建了pygetsong项目

今天(发现已经是凌晨00:14了,严格来讲是昨天)在limodou的引荐下向Zoom.Quiet申请在啄木鸟社区创建了pygetsong项目。
项目的wiki页面地址为:
http://wiki.woodpecker.org.cn/moin/PyGetsong
项目的svn代码仓库地址为:
http://cvs.woodpecker.org.cn/svn/woodpecker/pygetsong/
感谢Zoom.Quiet,大中午还忙着配置pygetsong的svn仓库,感谢所有关心和支持pygetsong的人们:)

从今天开始最新的getsong将会出现在svn软件仓库里,使用过程中出现问题的朋友请先检查一下所使用的getsong是否为最新版本,从svn获取最新getsong代码的方法如下:
方法一:安装subversion客户端,使用如下命令:
  svn co http://cvs.woodpecker.org.cn/svn/woodpecker/pygetsong/trunk getsong
方法二:使用其他的svn客户端,使用方法参考该客户端的帮助文档。
回复 支持 反对

使用道具 举报

发表于 2006-11-14 05:51:37 | 显示全部楼层
下载 亲爱的  (徐若瑄) 的时候出错,UnicodeEncodeError,应该是Xuan字导致的

加了一个Exception Handler
def DownloadTopSongs(type='100'):
    try:
        if type == '100':
            songs = GetArtistAndTitle('http://list.mp3.baidu.com/list/newhits.html?id=1#top1')
        elif type == '500':
            songs = GetArtistAndTitle('http://list.mp3.baidu.com/topso/mp3topsong.html?id=1#top2')
        for rank, info in songs.items():
            artist = info['artist']
            title = info['title']
            print
            try:
              print u"姝e??涓??浇绗??d棣????????d棣?? 姝????锛??s ??插??锛??s" %(rank, len(songs), artist, title)
              DownloadSong(artist, title)
            except UnicodeEncodeError:
                print "Unicode Encode Error, Skip this song"
    except KeyboardInterrupt:
        print "Exiting..."
回复 支持 反对

使用道具 举报

发表于 2006-11-14 09:34:12 | 显示全部楼层
想下载摇滚, 随便改了一下,加了-r --rock参数,发现-r不起作用,--rock倒可以,不管了,能用就可以。 不知道这是什么语言,语法够诡异的,居然还要求对齐,比Perl还奇怪。(一向认为Java/C的语法比较正常)

原文件有个地方把Baidu拼错了,呵呵

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-11-14 09:35:23 | 显示全部楼层
反正一葫芦画瓢一通

原文件有个地方把Baidu拼错了,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-14 10:38:40 | 显示全部楼层
呵呵,多谢,偶就需要更多人能够提供错误信息、修复bug,加入新的功能就更好了。
-r参数不能用是因为在下面一段代码里“15”后面少加了一个“r”,加上就OK了。
  1. opts, args = getopt.getopt(sys.argv[1:],
  2.                                    '15hva:t:d:',
  3.                                    ['100','500','rock','help', 'version', 'artist=','title=', 'songsdir='])
复制代码

所用的语言是python,对缩进有语法级的严格要求,习惯就好了,习惯之后会发现这是一种很优雅的表达方式(不是广告啊,呵呵)。阁下能够轻松的对它进行bugfix和加入新的东西想必有比较好的C/C++功底吧?另一方面估计也得益于python的简洁性
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表