asxe
asxe

因为某些原因,不再使用原标题

# 开始

  1. 铜钟
    仅限交流与学习,勿作非法用途
    版权所有,转载请注明出处,本页如有违规,请联系删除

# 正文

不懂的地方请在评论区留言

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)

# 效果

1.png

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

ASXE 微信支付

微信支付

ASXE 支付宝

支付宝

ASXE 贝宝

贝宝