前言 嗨嘍,大家好呀,這裡是魔王~ 我們空閑時都會聽聽音樂,放鬆一下自己的心情,每個人都會有自己喜歡的歌手或歌 但是通常一個平臺不能完全找到,因為版權原因,經常需要幾個軟體跨著聽,非常的麻煩 那麼現在,我們直接來用代碼全部下載下來用本地播放器播放,美滋滋! 開發環境: 版 本:python3.8 編 ...
前言
嗨嘍,大家好呀,這裡是魔王~
我們空閑時都會聽聽音樂,放鬆一下自己的心情,每個人都會有自己喜歡的歌手或歌
但是通常一個平臺不能完全找到,因為版權原因,經常需要幾個軟體跨著聽,非常的麻煩
那麼現在,我們直接來用代碼全部下載下來用本地播放器播放,美滋滋!
開發環境:
- 版 本:python3.8
- 編輯器:pycharm
所使用模塊
- requests
- prettytable
這兩個都是第三方模塊,所以我們需要安裝:
-
win + R 輸入cmd 輸入安裝命令 pip install 模塊名 如果出現爆紅 可能是因為 網路連接超時 切換國內鏡像源
-
在pycharm中點擊Terminal(終端) 輸入安裝命令
如何配置pycharm裡面的python解釋器?
- 選擇file(文件) >>> setting(設置) >>> Project(項目) >>> python interpreter(python解釋器)
- 點擊齒輪, 選擇add
- 添加python安裝路徑
pycharm如何安裝插件?
- 選擇file(文件) >>> setting(設置) >>> Plugins(插件)
- 點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese
- 選擇相應的插件點擊 install(安裝) 即可
- 安裝成功之後 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效
流程思路
本次主要實現
- 搜索功能
- 下載歌曲功能
搜索功能
- 發送請求 向以前的搜索功能介面發送 請求
- 獲取數據 獲取所有歌曲信息數據
- 解析數據 歌曲 歌手名 專輯 歌曲mid(用來下載歌曲必須要的參數)
- 格式化輸出
- 下載歌曲功能
通過獲取的歌曲mid 拼接 需要的音頻url
- 發送網路請求 需要的音樂url
- 獲取數據 獲取 裡面生成的 部分音樂鏈接 合併 (mp3 數據所在的鏈接了)
- 發送請求 (mp3 數據所在的鏈接了)
- 獲取數據 音樂二進位數據
- 保存數據
代碼
import requests # 發送網路請求 import json import prettytable as pt headers = { 'cookie': 'pgv_pvid=7300130020; tvfe_boss_uuid=242c5295a1cb156d; RK=6izJ0rkfNn; ptcz=622f5bd082de70e3e6e9a077923b48f72600cafd5e4b1e585e5f418570fa30fe; ptui_loginuin=1321228067; luin=o3452264669; o_cookie=3452264669; ts_uid=5501087131; fqm_pvqid=89ea2cc7-6806-4091-989f-5bc2f2cdea5c; lskey=00010000d96bdb23303bc141246a5c2f9a02cf45acf079eaab6645fdc10923e7a0eaac09aa24533ab1299555; fqm_sessionid=d77623f3-4dd0-4709-8e50-a34986b17344; pgv_info=ssid=s4530794666; ts_last=y.qq.com/; ts_refer=ADTAGmyqq; _qpsvr_localtk=0.8458135546904957; euin=oK6kowEAoK4z7eclow6qoiSz7z**; psrf_qqrefresh_token=; psrf_qqaccess_token=; wxuin=1152921504872193707; psrf_qqopenid=; wxrefresh_token=53_FHlMDgGCCfOUCXRxCMGFGYHxwtDV0_rZANu84l_KrYtPYRVSWqpxoWqojdj1coj4CF_H4qNrXw0WrZtQdlsozcwYQbVp0SepI9Jmm_Pfhjk; qqmusic_key=W_X_3mJrl760n0lDWkgqqBhBMX2VPnH1PNwwUZjvNkmSnurNjTTap1J6gjetIU50hraK3AjHgw5T4ay2R3; qm_keyst=W_X_3mJrl760n0lDWkgqqBhBMX2VPnH1PNwwUZjvNkmSnurNjTTap1J6gjetIU50hraK3AjHgw5T4ay2R3; psrf_qqunionid=; tmeLoginType=1; wxunionid=oqFLxsgDOwYRnPDffuK5UINv958c; wxopenid=opCFJw5Vvcf24VLQSyNpKAX6gt3I; wxuin=1152921504872193707; qm_keyst=W_X_3mJrl760n0lDWkgqqBhBMX2VPnH1PNwwUZjvNkmSnurNjTTap1J6gjetIU50hraK3AjHgw5T4ay2R3; login_type=2' } name = input('請輸入你想要下載的歌曲或者歌手名稱:') # 1. 發送請求 向以前的搜索功能介面發送 請求 源碼、資料、解答加Q裙:832157862領取~ url = f'https://c.***/soso/fcgi-bin/client_search_cp?p=1&n=10&w={name}' response = requests.get(url) # print(response) # 2. 獲取數據 獲取所有歌曲信息數據 json_str = response.text # 3. 解析數據 歌曲 歌手名 專輯 歌曲mid(用來下載歌曲必須要的參數) json_str = json_str[9: -1] json_dict = json.loads(json_str) song_list = json_dict['data']['song']['list'] tb = pt.PrettyTable() tb.field_names = ['序號', '歌名', '歌手', '專輯'] music_info_list = [] count = 0 # 4. 格式化輸出 for song in song_list: songname = song['songname'] songmid = song['songmid'] singer = song['singer'][0]['name'] albumname = song['albumname'] tb.add_row([count, songname, singer, albumname]) music_info_list.append([songmid, songname, singer]) count += 1 print(tb) while True: input_index = eval(input('請輸入你要下載的歌曲序號(-1)退出:')) if input_index == -1: break download_info = music_info_list[input_index] songmid = download_info[0] # 1. 通過獲取的歌曲mid 拼接 需要的音樂url music_info_url = 'https://u.***/cgi-bin/musicu.fcg?data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch", "filename":"M800","param":{"guid":"8846039534","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","filename":"M800","param":{"guid":"8846039534","songmid":["%s"],"songtype":[0],"uin":"1152921504784213523","loginflag":1,"platform":"20"}},"comm":{"uin":"1152921504784213523","format":"json","ct":24,"cv":0}}' % songmid # print(music_info_url) # 2. 發送網路請求 需要的音樂url json_data = requests.get(url=music_info_url, headers=headers).json() # 3. 獲取數據 獲取 裡面生成的 部分音樂鏈接 合併 (mp3 數據所在的鏈接了) purl = json_data['req_0']['data']['midurlinfo'][0]['purl'] media_url = 'https://dl.stream.qqmusic.qq.com/' + purl # 4. 發送請求 (mp3 數據所在的鏈接了) # 5. 獲取數據 音樂二進位數據 music_data = requests.get(media_url).content # 6. 保存數據 with open(f'歌曲下載/{download_info[1]}-{download_info[2]}.mp3', mode='wb') as f: f.write(music_data) print(f'{download_info[1]}, 下載完成!')
尾話
好啦,這篇文章就到這裡啦~對你有幫助就點贊收藏一下吧!