前天自己的阿里妈妈账号再次被冻结了,好不容易有5000多收入,一下又没了。
没办法,还是拿自己的一点小手艺,赚点吃饭的钱,花一天时间写了这个小工具。
可以下载豆瓣的红心兆赫、豆瓣小站和大部分专辑。下载任意兆赫的功能没有写,时间有限。
这个程序我希望能够收费提供,所以虽然公开代码,但并不希望你生成无限制的exe免费提供,请谅解。
Tkinter是single-threaded,记住这一点比较重要。 对于耗时的操作,比如下载,需要创建新的线程来完成。
我在程序启动时创建了5个daemon线程,用于下载MP3,一般,5个线程就足够达到较好的下载效率。
windows可执行文件 (请注意,文件夹名称中不能存在中文)
下载源代码 (如果你做了任何改进,欢迎提交给我。 :))
大神,我下了你的这个下载工具,但是一运行就报错啊怎么办。。。我是win8系统的
错误的描述是? 可以加我的QQ,远程协助你看看。
your need install ghost to execute javascript请问ghost怎么安装,谢谢。新手求交流
可以先在这里下载系统对应的pyqt4: http://www.riverbankcomputing.co.uk/software/pyqt/download ,完成安装后,再下载链接上对应的Ghost.py,解压后在目录下执行setup.py install就可以了。
ok 可以运行了,但是那个验证码一直加载不出来
self.lbl_CAPTCHA.image = CAPTCHA_img = PhotoImage(file=’CAPTCHA.jpg’) ^IndentationError: unindent does not match any outer indentation level
请无视我上面的回复,我的python里面好像没有ImageTk这个模块。
需要安装PIL: http://www.pythonware.com/products/pil/
已ok, 非常感谢
这个快:pip install ghost
博主,我在fedora下跑这个程序,不行。貌似在linux下,非主线程不可以更新GUI。那个获取验证码显示验证码就在非主线程里。不工作。windows下倒是工作。我现在用app.root.after()来判断验证码有没有下载好,下载好了就显示。请问博主,你学习tkinter参考哪些资料哇?好像python官方的资料好少哇。比如那个withdraw方法,我在ptyhon doc上就木有找到。。。。
现有的代码并没有在另一个线程中直接刷新Label,也是通过after()来更新的,第35行:self.root.after(10, self.lbl_CAPTCHA.update_idletasks),这份代码我在Ubuntu下有测试过,还没遇到你描述的问题。 之前看的是这份:http://effbot.org/tkinterbook/, 算是相对完整的。
运行到第33行就报错了。[gaoshijie@gaoshijie douban-music-downloader]$ python ./doubanFM.py Fontconfig warning: “/etc/fonts/conf.d/50-user.conf”, line 14: reading configurations from ~/.fonts.conf is deprecated.Exception in thread Thread-1:Traceback (most recent call last): File “/usr/lib64/python2.7/threading.py”, line 811, in __bootstrap_inner self.run() File “/usr/lib64/python2.7/threading.py”, line 764, in run self.__target(*self.__args, **self.__kwargs) File “./doubanFM.py”, line 33, in downCAPTCHA self.lbl_CAPTCHA.image = CAPTCHA_img = PhotoImage(file=’CAPTCHA.jpg’) File “/usr/lib64/python2.7/site-packages/PIL/ImageTk.py”, line 118, in __init__ self.__photo = tkinter.PhotoImage(**kw) File “/usr/lib64/python2.7/lib-tk/Tkinter.py”, line 3306, in __init__ Image.__init__(self, ‘photo’, name, cnf, master, **kw) File “/usr/lib64/python2.7/lib-tk/Tkinter.py”, line 3262, in __init__ self.tk.call((‘image’, ‘create’, imgtype, name,) + options)TclError: out of stack space (infinite loop?)Exception AttributeError: “PhotoImage instance has no attribute ‘_PhotoImage__photo'” in > ignored我把第33改成:self.lbl_CAPTCHA.config(text=u’我是一只小鸭子,一丫一丫哟。’)报错如下:[gaoshijie@gaoshijie douban-music-downloader]$ python ./doubanFM.py Fontconfig warning: “/etc/fonts/conf.d/50-user.conf”, line 14: reading configurations from ~/.fonts.conf is deprecated.Exception in thread Thread-1:Traceback (most recent call last): File “/usr/lib64/python2.7/threading.py”, line 811, in __bootstrap_inner self.run() File “/usr/lib64/python2.7/threading.py”, line 764, in run self.__target(*self.__args, **self.__kwargs) File “./doubanFM.py”, line 33, in downCAPTCHA self.lbl_CAPTCHA.config(text=u’我是一只小鸭子,一丫一丫哟。’) File “/usr/lib64/python2.7/lib-tk/Tkinter.py”, line 1262, in configure return self._configure(‘configure’, cnf, kw) File “/usr/lib64/python2.7/lib-tk/Tkinter.py”, line 1253, in _configure self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))TclError: out of stack space (infinite loop?)感觉还是属于非主线程修改GUI导致的。。。
看你的测试,很可能是这个原因。 可以再试试把对应的那条语句用lambda生成匿名函数放到after()方法中做参数,如果正常,就确定了。 不过我很疑惑如果那条语句有问题,那down_slave线程中lbl_status.config这行应该也会失败。 在Ubuntu上我也是用的python2.7,不知道跟版本有没有什么关系。Tkinter单线程确实需要很小心才能避免出问题,所以我打算稍后花点时间看看wxPython。
哦
杰神,来翻看你的文章了。。。这几天试着也用c艹写个下载工具,发现各种API各种蛋疼,豆瓣返回那个JSON格式的,c艹也没有那个库,看了你这个,觉得python真好用(虽然我不懂python),我这种渣渣有杰兄一半水平就好咯。。。
Python确实用起来舒服,几行代码就能做不少事。 类库太丰富了,所以只需要关心程序的逻辑和算法。 不过C++用好了更是牛逼,python不也是用的c库吗。 C/C++学得好,再玩python,会非常顺手,有时间你可折腾下。
http://itfanr.sinaapp.com/ 不错啊!!! 捐助账号多少?你怎么赚钱
以前是直接卖过一段时间的工具,现在没有花费时间再维护更新了。
哦 原来是这样
大神,以后不更新了么???最近没什么可下载豆瓣FM音乐的工具,都变成不能用了,大神,求你更新一下吧!!!