我們聽歌什么的,現在這限制那限制,要不只能在這個平台 ,要不就只能在那個平台,多麻煩,咱們直接用代碼全部下載下來用本地播放器播放,美滋滋!
這里咱們用python和pycharm就好了,沒有安裝的小伙伴可以先安裝一下。
這兩個模塊也需要安裝一下
requests
prettytable
打開cmd輸入(pip install 加上模塊名)回車等待即可,第二個也一樣的。
本次主要實現
- 搜索功能
- 下載歌曲功能
搜索功能
- 發送請求 向以前的搜索功能接口發送 請求
- 獲取數據 獲取所有歌曲信息數據
- 解析數據 歌曲 歌手名 專輯 歌曲mid(用來下載歌曲必須要的參數)
- 格式化輸出
下載歌曲功能
- 通過獲取的歌曲mid 拼接 需要的音樂url
- 發送網絡請求 需要的音樂url
- 獲取數據 獲取 里面生成的 部分音樂鏈接 合並 (mp3 數據所在的鏈接了)
- 發送請求 (mp3 數據所在的鏈接了)
- 獲取數據 音樂二進制數據
- 保存數據
import requests # 發送網絡請求 import json import prettytable as pt # Python學習交流群:924040232 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. 發送請求 向以前的搜索功能接口發送 請求 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]}, 下載完成!')
兄弟們,快去試試吧~