因为某些原因,不再使用原标题
# 开始
- 铜钟
仅限交流与学习,勿作非法用途
版权所有,转载请注明出处,本页如有违规,请联系删除
# 正文
不懂的地方请在评论区留言
import requests | |
import json | |
res = None #模块级定义,因为下面用了全局变量 | |
class TongZhong: | |
def __init__(self): | |
self.api = 'https://tonzhon.com/api/playlists/63749694e6e9cbb9d6f1b10b' #这是歌单的 API 地址,注意,不是歌单的地址,而是歌单的 API 地址,两者有区分 | |
self.qq = 'https://music-api.tonzhon.com/song_source/qq/{song_id}' | |
self.kuwo = 'https://music-api.tonzhon.com/song_source/kuwo/{song_id}' | |
self.netease = 'https://music-api.tonzhon.com/song_source/netease/{song_id}' | |
self.headers={ | |
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.64' | |
} | |
def get_index(self): | |
all_response = requests.get(self.api,headers=self.headers).json() | |
songs = all_response.get('playlist').get('songs') | |
#三个列表递推,得到所有元素 | |
song_ids = [song.get('originalId') for song in songs] | |
song_names = [song.get('name') for song in songs] | |
platforms = [song.get('platform') for song in songs] | |
return song_ids,song_names,platforms | |
def get_response(self,song_id,song_name,platform): | |
global res #全局变量 | |
if platform == 'qq': | |
res = requests.get(self.qq.format(song_id=song_id),headers=self.headers).json() | |
elif platform == 'kuwo': | |
res = requests.get(self.kuwo.format(song_id=song_id),headers=self.headers).json() | |
elif platform == 'netease': | |
res = requests.get(self.netease.format(song_id=song_id),headers=self.headers).json() | |
if res is not None: | |
try: | |
links = res.get('data').get('songSource') #这个元素可能不存在,因此需用 try-except 语句 | |
res = requests.get(links) | |
with open(f'./music/{song_name}.mp3','wb') as f: | |
f.write(res.content) | |
except AttributeError as a: | |
print(f'错误:{a}') | |
else: | |
pass | |
if __name__ == '__main__': | |
song_ids,song_names,platforms = TongZhong().get_index() | |
for song_id,song_name,platform in zip(song_ids,song_names,platforms): #有三个元素,用 zip () 语法 | |
TongZhong().get_response(song_id,song_name,platform) |