python萌新笔记----基于requests库请求API下载网易云(VIP)音乐
一.題記
偶然的情況下了解到了關(guān)于API的一些妙用,利用所學(xué)知識(shí)使用目前網(wǎng)上公開的API來獲取需要付費(fèi)才能下載的網(wǎng)易云音樂。
二.API的粗淺看法
目前感覺就是設(shè)置了網(wǎng)頁請(qǐng)求頭中params的響應(yīng)參數(shù)之后,訪問API接口,對(duì)方就會(huì)返回一系列json數(shù)據(jù),從這些json數(shù)據(jù)可以抽取出音樂文件的鏈接,由于現(xiàn)在網(wǎng)絡(luò)信息更新很快,讀者想要API可以自行百度,實(shí)時(shí)更新,避免接口失效
三.思路
1.設(shè)置請(qǐng)求頭信息,主要是params里的參數(shù),相應(yīng)的鍵值需要分析網(wǎng)頁
2.請(qǐng)求API獲得json數(shù)據(jù),分析json數(shù)據(jù),根據(jù)字典的相應(yīng)語法取出想要的數(shù)據(jù),每首歌曲都有自己的ID號(hào)碼,首先需要取出這個(gè)數(shù)據(jù)
3.通過ID號(hào)定位找到歌曲的鏈接,下載歌曲
4.優(yōu)化交互界面
四.代碼實(shí)現(xiàn)及運(yùn)行
import requests import jsonclass MyMusic(object):def __init__(self):# 設(shè)置請(qǐng)求頭self.url = "https://api.imjad.cn/cloudmusic/" # apiself.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",}self.params_search = {'type': 'search','search_type': str(1),'limit': str(20),#返回20個(gè)搜索結(jié)果's': '',#歌手'offset': str(0)}self.params_download = {'type': 'song','id': '',#歌曲ID'br': str(320000),#高品質(zhì)的音質(zhì)}def SearchData(self, name):#響應(yīng)的json數(shù)據(jù)self.params_search['s'] = nameresponse = requests.get(url=self.url, headers=self.headers, params=self.params_search)html = response.json()return htmldef SearchList(self, name):#打印搜索列表html = self.SearchData(name)song_id = []song_name = []song_author = []try:for i in range(20):#params里設(shè)置的搜索返回20條數(shù)據(jù)song_id.append(html["result"]["songs"][i]['id'])song_name.append(html["result"]["songs"][i]['name'])song_author.append(html["result"]["songs"][i]['ar'][0]['name'])print('(ID:' + str(song_id[i]) + ')歌名:' + song_name[i] + ' ------ 歌手:' + song_author[i])except Exception:passdef SearchSong(self, name, author):#匹配歌手,返回id號(hào)html = self.SearchData(name)for i in range(20):if html["result"]["songs"][i]['ar'][0]['name'] == author:return html["result"]["songs"][i]['id']def DownLoad(self, id):#下載self.params_download['id'] = idresponse = requests.get(url=self.url, headers=self.headers, params=self.params_download)url = response.json()['data'][0]['url']print("正在下載:" + self.params_search['s'])response = requests.get(url, headers=self.headers)filename = "music\\" + self.params_search['s'] + ".mp3"with open(filename, 'wb')as f:f.write(response.content)print("下載成功!")def run(self):print("@程序優(yōu)化中,歌名歌手輸入框出現(xiàn)繁體或片假名則不能正常運(yùn)行\(zhòng)n""@歌曲框輸入exit退出程序\n""@歌手框輸入exit則放棄操作\n")while(True):try:name = input("請(qǐng)輸入歌曲名稱: ")if name == 'exit':breakprint('======================搜索到的歌曲====================')self.SearchList(name)id = (input("請(qǐng)輸入歌手名稱或歌曲ID: "))if id == 'exit':continueelif str.isdigit(id):#輸入的是ID號(hào),則直接下載self.DownLoad(id)else:#輸入的是歌手名字,匹配ID號(hào)id = str(self.SearchSong(name, id))self.DownLoad(id)except Exception:print("哎呀!下載出錯(cuò)了!可能原因如下\n" "1.您下載的歌熱度不高哦\n" "2.請(qǐng)確保該歌曲在網(wǎng)易云搜索到\n" "3.程序崩潰了@_@")passt = MyMusic() t.run()運(yùn)行結(jié)果:
五.總結(jié)
如果復(fù)制代碼需要?jiǎng)?chuàng)建music文件夾。。。代碼不是很完善,歡迎大家和我一起交流或指教@_@
總結(jié)
以上是生活随笔為你收集整理的python萌新笔记----基于requests库请求API下载网易云(VIP)音乐的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webview代码实例化_WebView
- 下一篇: LaTex数学符号表(数学中最常用的所有