百度音乐下载地址解析
軟件初步介紹:
為什么我要干這檔子事情啊?
一個字,懶,太懶,懶得自己去找,懶得沖會員去下載一些高品質歌,所以干脆寫個小東西來搞一搞吧。直接了當,干脆直接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
總結
以上是生活随笔為你收集整理的百度音乐下载地址解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 帕斯卡契约蔷薇骑士技能怎么打
- 下一篇: [Angular 依赖注入详谈] Ang