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库,自动识别验证码。

【注意】

  1. biabiamiamia内部调用curl进行下载操作,请自行提前安装;
  2. 默认下载路径:
    ~/biabiamiamia_music

【V0.1.20130305】

  1. 『优化』指定平均下载速度下限为8kbps,低于此自动重新连接,最多重连4次;
  2. 『优化』资源不存在时会出现503错误页面,忽略503页面而不再将其当作资源下载;
  3. 『优化』为减少出现验证码的几率,下载时伪装成firefox且增加页面引用;
  4. 『优化』对于导致下载失败的不同原因进行区别:因网络质量导致下载失败(处理机制,重新下载)、因出现验证码导致下载失败(处理机制,获取BAIDUVERIFY的cookie键值后重新下载);
  5. 『优化』修正部分歌曲名中含有“/”的歌曲无法下载的问题(thanks to Iven Hsu);
  6. 『新增』命令行参数错误时,显示帮助信息;
  7. 『新增』下载暂停/恢复功能。ctrl+c退出程序,下次若下载先前歌手的所有专辑(指定专辑无效)时,自动从中断歌曲续下;

Read More:

  • » No related posts

37 Comments

  1. 1 Iven 评论 @ 2013-03-01 9:51Reply to this comment

    最高 192 么?作为在线音质很不错了……

  2. 2 Iven 评论 @ 2013-03-01 9:52Reply to this comment

    呃,看错了,320 ……好 NB ……

  3. 3 喵喵 评论 @ 2013-03-01 10:04Reply to this comment

    名字很可爱啊

  4. 4 jssM 评论 @ 2013-03-01 10:06Reply to this comment

    好多网上的320是192反压的320.。。。 包括百度 qq

  5. 5 Tom 评论 @ 2013-03-01 11:00Reply to this comment

    百度验证码是个问题,一般的ocr解决不了

  6. 6 meow 评论 @ 2013-03-01 11:26Reply to this comment

    下单首歌能不?

  7. 7 meow 评论 @ 2013-03-01 11:33Reply to this comment

    建议支持短选项名,自定义下载路径,增加只打印专辑列表的选项,人名或专辑名搜索选项。

  8. 8 yangyang.gnu 评论 @ 2013-03-01 11:49Reply to this comment

    @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分钟),仍然出现了验证码,如果把休眠时长再调长则用户体验太差。失败;

    所以,再研究最终发布时,仍需用户手工输入验证码。

  9. 9 youngsterxyf 评论 @ 2013-03-01 12:53Reply to this comment

    之前我用python写了一个百度音乐下载器:http://youngsterxyf.github.com/Baidu_Music_Downloader/,不过近期百度音乐网站好像修改了一点页面代码。

  10. 10 Iven 评论 @ 2013-03-01 13:18Reply to this comment

    @yangyang.gnu: 理论上可以开发 P2P 程序来解决此问题。 XDDDD

  11. 11 yangyang.gnu 评论 @ 2013-03-01 13:29Reply to this comment

    @Iven: 是个思路,不过动静就大了 :)。另外,你反应的歌曲名中含有“/”的歌曲无法下载问题已修正。

  12. 12 Louis Han 评论 @ 2013-03-01 14:20Reply to this comment

    名字好可爱

  13. 13 wyh 评论 @ 2013-03-01 17:39Reply to this comment

    我在arch下跑不了,到解析所有带下载歌曲后就不动了

  14. 14 wyh 评论 @ 2013-03-01 17:44Reply to this comment

    没注意一颜文字后面的了解要确定 ==

  15. 15 Gol 评论 @ 2013-03-01 19:35Reply to this comment

    国外因版权问题无法下载,怎么破

  16. 16 subting 评论 @ 2013-03-01 19:59Reply to this comment

    这样不好吧。。

  17. 17 yangyang.gnu 评论 @ 2013-03-01 22:20Reply to this comment

    @Gol: 兄弟是部分歌曲有该提示,还是所有都是这样?若前者,那没办法,百度没买那些歌曲的版权;若后者,说明你是境外IP,唯一办法是翻墙,只是你要往里翻(幸福的烦恼 :)

  18. 18 reverland 评论 @ 2013-03-02 12:01Reply to this comment

    估计ocr搞不定……

  19. 19 Rothsdad 评论 @ 2013-03-02 12:46Reply to this comment

    截图的字体毛茸茸的,不清晰耶。是不是没有配置好fontconfig?

  20. 20 比尔盖子 评论 @ 2013-03-02 13:12Reply to this comment

    @Rothsdad: 看起来确实应该再调整一下次像素平滑

  21. 21 Mike Manilone 评论 @ 2013-03-02 16:52Reply to this comment

    biabiamiamia ……這什麼破名字……

    另外求 GUI 版

  22. 22 guanguan 评论 @ 2013-03-02 17:50Reply to this comment

    支持啊,不过要是能把“因版权问题无法下载”解决了就好了~

  23. 23 yangyang.gnu 评论 @ 2013-03-02 18:46Reply to this comment

    @Mike Manilone: 就不告诉你,啦啦啦~~~~

  24. 24 Iven 评论 @ 2013-03-02 22:46Reply to this comment

    @yangyang.gnu: 目测难道是“爸爸妈妈”的昵称?

  25. 25 yangyang.gnu 评论 @ 2013-03-03 1:36Reply to this comment

    @Iven: 算你狠,这么隐蔽的信息也被你挖掘出来了。

  26. 26 microcai 评论 @ 2013-03-03 10:23Reply to this comment

    @yangyang.gnu:

    你是好人啊,cookie 都内置了。我说我怎么下的了320的歌曲的,那个不是会员才能下的么! 原来是你共享了你的会员帐号啊!

  27. 27 yangyang.gnu 评论 @ 2013-03-03 12:17Reply to this comment

    @microcai: 测试时下载过几千首歌曲,发现百度没封号,也就无所谓了。

  28. 28 icook 评论 @ 2013-03-03 13:20Reply to this comment

    百度音乐不是一直可以下载?

  29. 29 microcai 评论 @ 2013-03-03 14:27Reply to this comment

    @yangyang.gnu:

    给你发好人卡

  30. 30 xx 评论 @ 2013-03-03 15:17Reply to this comment

    坐等python版。

  31. 31 比尔盖子 评论 @ 2013-03-03 17:29Reply to this comment

    @yangyang.gnu: 试试 Tesseract?

  32. 32 feng 评论 @ 2013-03-03 20:18Reply to this comment

    添加个代理的选项吧,墙外不方便

  33. 33 Ma Xiaojun 评论 @ 2013-03-03 21:26Reply to this comment

    我表示云时代下载音乐干嘛,上个网随便就能听。

  34. 34 yangyang.gnu 评论 @ 2013-03-03 22:35Reply to this comment

    @Ma Xiaojun: 带ipod跑步、车载DVD中的SD卡,so...

  35. 35 NoAnyLove 评论 @ 2013-03-04 0:52Reply to this comment

    为啥我编译总报错?。。。。。。。。我已经试过在CentOS、Redhat,Cygwin,MinGW,还有VC 2010。。。。。。。结果都报错了

    # make && make install
    Scanning dependencies of target biabiamiamia
    [ 16%] Building CXX object CMakeFiles/biabiamiamia.dir/biabiamiamia.o
    cc1plus: error: unrecognized command line option "-std=gnu++0x"
    make[2]: *** [CMakeFiles/biabiamiamia.dir/biabiamiamia.o] Error 1
    make[1]: *** [CMakeFiles/biabiamiamia.dir/all] Error 2
    make: *** [all] Error 2
    
  36. 36 yangyang.gnu 评论 @ 2013-03-04 9:11Reply to this comment

    @NoAnyLove: 请见https://code.google.com/p/yangyanggnu/issues/detail?id=1。下次我在README中强调下GCC版本问题。

  37. 37 nowind 评论 @ 2013-03-06 21:21Reply to this comment

    百度的验证码确实比较讨厌,上次想做个自动提交云盘离线下载的..想到验证码就郁闷