百度音樂下載地址解析
- 軟件初步介紹:
- 爲何我要幹這檔子事情啊?
- 一個字,懶,太懶,懶得本身去找,懶得衝會員去下載一些高品質歌,因此乾脆寫個小東西來搞一搞吧。直接了當,乾脆直接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
歡迎關注本站公眾號,獲取更多信息