- 软件初步介绍:
- 为什么我要干这档子事情啊?
- 一个字,懒,太懒,懒得自己去找,懒得冲会员去下载一些高品质歌,所以干脆写个小东西来搞一搞吧。直接了当,干脆直接balbala一堆歌曲源下载地址,然后丢给迅雷去帮我下载,想想都是很爽的(全站歌曲下载我的电脑撑不住啊)。我也是很不情愿把钱交给程序猿啊,那就来解析解析吧。
- 命令行执行
- 懒得去写界面了,直接黑框框挺好看的(哈哈哈,linux用户的一种病)。那就直接用命令行处理所有操作吧。
- 支持功能
- 0)绕开白金收费会员才能下载无损品质歌曲的限制;
1)绕开百度自身版权问题歌曲而无法下载的限制(即便白金收费会员从官方渠道也无该功能);
2)绕开非大陆之外区域无法下载的限制(即便白金收费会员从官方渠道也无该功能);
3)一键式全站歌曲下载(即便白金收费会员从官方渠道也无该功能);
4)绕开高频访问出现验证码的限制
- 软件开发流程
- 大体流程:
- 开发流程:
- 解析命令行:获取一系列歌曲歌手专辑信息,判定用户使用系统,建立所有数据保存路径。
- 模拟登陆:通过利用CURL和libcurl库进行模拟登陆。(对百度网页登陆源码进行分析)调用libcurl获得百度的BAIDUID的cookie,从而获得cookie中的token;因为百度会有验证码,所以分析验证码源码,获取验证码进行输入(只需要输入验证码一次),得到BDUSS的cookie(实现免验证登陆的关键);获取完成之后重新编辑登陆源码,(get/post)发送给百度的服务器实现登陆。只有只要利用BDUSS就能够实现免验证登陆了。由于下面频繁的访问百度音乐网页,频繁登陆会使百度敏感,所以后面解析下载地址的时候直接采用并行解析方式进行解析(利用线程容器实现)
- 获取歌手信息:对网页源码进行解析,得出所有歌手对应的超链接和歌手名称,利用unorder_map进行存储。
- 获取所有专辑信息:根据歌手的id去解析网页源码,找到对应的额专辑接口(这里比较难以处理),所以直接利用了json11库进行网页解析(解析json格式的网页源码),得出歌手对应的额专辑名称和id,保存在map中。
- 解析专辑中的所有歌曲信息:由于专辑列表中的歌曲比较多,如果我们高频访问单线程处理的话,百度会对这种操作敏感,所以这里我们采用thread容器进行处理每一张专辑;根据命令中的音质要求进行网页源码解析(歌曲信息都是json格式:采用json11进行解析),解析出每一种品质 --> 对应的三个属性值(码率,歌曲id,等),因为歌曲的下载地址都是一个统一的接口api再加上这三个属性值,所以直接将api和每首歌的三个属性值进行组合即可得到每一首歌的下载地址,保存到map中与歌曲名称对应。输出到txt中。
- libcurl库的使用:采用easy interface(阻塞传输进行发送数据)模拟登陆。了解他的一些基本的使用方法和使用过程。
- 源码:
- 主要是采用一些c++11的新特性进行的开发。
- 源码:github
posted @
2017-02-12 15:08
Kobe10
阅读(
534)
评论()
编辑
收藏
举报