biabiamiamia
拥有如此个性名称的脚本是 yangyang.gnu 编写的一个百度音乐网的歌曲下载辅助工具。3 月 5 日更新版本 感谢作者 yangyang.gnu 来稿
biabiamiamia 具有如下命令行参数:
--artist,指定歌手名;--album,指定专辑名(默认该歌手 所有专辑);--quality,指定下载歌曲的品质 (320、192、128,默认320kbps);--version,显示版本信息;--help,显示本帮助信息。
任何BUG,请告知 yangyang.gnu AT gmail.com。
【用例】
- 下载羽泉的所有专辑,歌曲选用 192kbps 码率品质:
biabiamiamia --artist="羽泉" –quality=192 - 下载伍佰的《浪人情歌》专辑,歌曲选用最高码率品质:
biabiamiamia --artist="伍佰" --album="世界第一等"
【效果】 下载界面
百度为防机器人,下载过程中可能出现验证码,按界面提示查看并输入验证码即可继续下载。
【下载】 http://code.google.com/p/yangyanggnu/downloads/list
【安装】
构建系统采用 cmake,需要自行提前安装。源码安装步骤如下:
tar -xv -f biabiamiamia.tar.gz -C .
cd biabiamiamia/
cmake .
make && make install
【后续】 考虑借助开源OCR库,自动识别验证码。
【注意】
- biabiamiamia内部调用curl进行下载操作,请自行提前安装;
- 默认下载路径:
~/biabiamiamia_music
【V0.1.20130305】
- 『优化』指定平均下载速度下限为8kbps,低于此自动重新连接,最多重连4次;
- 『优化』资源不存在时会出现503错误页面,忽略503页面而不再将其当作资源下载;
- 『优化』为减少出现验证码的几率,下载时伪装成firefox且增加页面引用;
- 『优化』对于导致下载失败的不同原因进行区别:因网络质量导致下载失败(处理机制,重新下载)、因出现验证码导致下载失败(处理机制,获取BAIDUVERIFY的cookie键值后重新下载);
- 『优化』修正部分歌曲名中含有“/”的歌曲无法下载的问题(thanks to Iven Hsu);
- 『新增』命令行参数错误时,显示帮助信息;
- 『新增』下载暂停/恢复功能。ctrl+c退出程序,下次若下载先前歌手的所有专辑(指定专辑无效)时,自动从中断歌曲续下;
Read More:
- » No related posts


最高 192 么?作为在线音质很不错了……
呃,看错了,320 ……好 NB ……
名字很可爱啊
好多网上的320是192反压的320.。。。 包括百度 qq
百度验证码是个问题,一般的ocr解决不了
下单首歌能不?
建议支持短选项名,自定义下载路径,增加只打印专辑列表的选项,人名或专辑名搜索选项。
@Tom: 嗯。对付验证码,一般实现逻辑是:
1、解析验证码图片 1)图片灰度化; 2)灰度反转以提高图片对比度; 3)二值化; 4)OCR识别;
2、封装验证码cookie 1)抓包获取提交验证码的完整URL; 2)提交带验证码的URL; 3)获取网站反馈的通过验证的cookie,解析其中“表示通过验证的字段”; 4)基于“表示通过验证的字段”,封装新cookie提交至网站; 后续即可顺利进行下载。
biabiamiamia仅实现了第二部分,第一部分正如TOM兄所说,很多开源OCR库都识别不了,包括google的tesseract-ocr,有空再好好研究下。
另外,以上是说出现了验证码如何识别提交的问题,我也考虑过: 1、如何让百度根本就不出现验证码,尝试过:随机下载不同歌手歌曲、控制下载网速、故意让部分歌曲下载失败等。失败; 2、隐藏(或动态)IP。既然要进行网络连接,那么服务端和客户端势必进行三次握手,必须真实IP才能成功连接。失败; 3、用不同IP进行下载。基本可行,但对用户要求较高,需要本机有代理,且解析歌曲真实下载URL前的其他页面内容时必须用真实IP,真实在下载歌曲时用代理IP。不具普遍性; 4、每次下载前随机休眠8~16秒,甚至尝试过256秒(约4分钟),仍然出现了验证码,如果把休眠时长再调长则用户体验太差。失败;
所以,再研究最终发布时,仍需用户手工输入验证码。
之前我用python写了一个百度音乐下载器:http://youngsterxyf.github.com/Baidu_Music_Downloader/,不过近期百度音乐网站好像修改了一点页面代码。
@yangyang.gnu: 理论上可以开发 P2P 程序来解决此问题。 XDDDD
@Iven: 是个思路,不过动静就大了 :)。另外,你反应的歌曲名中含有“/”的歌曲无法下载问题已修正。
名字好可爱
我在arch下跑不了,到解析所有带下载歌曲后就不动了
没注意一颜文字后面的了解要确定 ==
国外因版权问题无法下载,怎么破
这样不好吧。。
@Gol: 兄弟是部分歌曲有该提示,还是所有都是这样?若前者,那没办法,百度没买那些歌曲的版权;若后者,说明你是境外IP,唯一办法是翻墙,只是你要往里翻(幸福的烦恼 :)
估计ocr搞不定……
截图的字体毛茸茸的,不清晰耶。是不是没有配置好fontconfig?
@Rothsdad: 看起来确实应该再调整一下次像素平滑
biabiamiamia ……這什麼破名字……
另外求 GUI 版
支持啊,不过要是能把“因版权问题无法下载”解决了就好了~
@Mike Manilone: 就不告诉你,啦啦啦~~~~
@yangyang.gnu: 目测难道是“爸爸妈妈”的昵称?
@Iven: 算你狠,这么隐蔽的信息也被你挖掘出来了。
@yangyang.gnu:
你是好人啊,cookie 都内置了。我说我怎么下的了320的歌曲的,那个不是会员才能下的么! 原来是你共享了你的会员帐号啊!
@microcai: 测试时下载过几千首歌曲,发现百度没封号,也就无所谓了。
百度音乐不是一直可以下载?
@yangyang.gnu:
给你发好人卡
坐等python版。
@yangyang.gnu: 试试 Tesseract?
添加个代理的选项吧,墙外不方便
我表示云时代下载音乐干嘛,上个网随便就能听。
@Ma Xiaojun: 带ipod跑步、车载DVD中的SD卡,so...
为啥我编译总报错?。。。。。。。。我已经试过在CentOS、Redhat,Cygwin,MinGW,还有VC 2010。。。。。。。结果都报错了
@NoAnyLove: 请见https://code.google.com/p/yangyanggnu/issues/detail?id=1。下次我在README中强调下GCC版本问题。
百度的验证码确实比较讨厌,上次想做个自动提交云盘离线下载的..想到验证码就郁闷