Python实例题:Python自动获取酷狗音乐工具

目录

Python实例题

题目

实现思路

代码实现

代码解释

search_music 函数:

get_music_play_url 函数:

download_music 函数:

主程序:

运行思路

注意事项

Python实例题

题目

Python自动获取酷狗音乐工具

实现思路

  • 搜索音乐:使用酷狗的搜索接口,输入关键词获取音乐列表。
  • 解析音乐信息:从搜索结果中提取音乐的 ID、标题、歌手等信息。
  • 获取音乐播放地址:根据音乐 ID 获取音乐的真实播放地址。
  • 下载音乐:使用 requests 库下载音乐文件。

代码实现

import requests
import json
import os

# 搜索音乐的 API
search_api = 'https://songsearch.kugou.com/song_search_v2'
# 获取音乐播放地址的 API
play_url_api = 'https://wwwapi.kugou.com/yy/index.php'


def search_music(keyword):
    """
    根据关键词搜索音乐
    :param keyword: 搜索关键词
    :return: 音乐列表,每个元素为包含音乐信息的字典
    """
    params = {
        'keyword': keyword,
        'page': 1,
        'pagesize': 10,
        'userid': -1,
        'clientver': '',
        'platform': 'WebFilter',
        'tag': 'em',
        'filter': 2,
        'iscorrection': 1,
        'privilege_filter': 0
    }
    response = requests.get(search_api, params=params)
    if response.status_code == 200:
        data = response.json()
        song_list = data.get('data', {}).get('lists', [])
        return song_list
    return []


def get_music_play_url(hash_val, album_id):
    """
    根据音乐的 hash 值和专辑 ID 获取音乐播放地址
    :param hash_val: 音乐的 hash 值
    :param album_id: 音乐的专辑 ID
    :return: 音乐的播放地址
    """
    params = {
        'r': 'play/getdata',
        'hash': hash_val,
        'dfid': '-',
        'appid': 1014,
        'mid': '1621266971179807',
        'platid': 4,
        'album_id': album_id
    }
    response = requests.get(play_url_api, params=params)
    if response.status_code == 200:
        data = response.json()
        play_url = data.get('data', {}).get('play_url')
        return play_url
    return ''


def download_music(play_url, title, singer):
    """
    下载音乐文件
    :param play_url: 音乐的播放地址
    :param title: 音乐标题
    :param singer: 歌手
    """
    if not play_url:
        print(f"无法获取 {title} - {singer} 的播放地址,下载失败。")
        return
    if not os.path.exists('music'):
        os.makedirs('music')
    file_name = os.path.join('music', f'{singer} - {title}.mp3')
    try:
        response = requests.get(play_url, stream=True)
        with open(file_name, 'wb') as f:
            for chunk in response.iter_content(chunk_size=1024):
                if chunk:
                    f.write(chunk)
        print(f"{title} - {singer} 下载完成。")
    except Exception as e:
        print(f"{title} - {singer} 下载失败:{e}")


if __name__ == "__main__":
    keyword = input("请输入要搜索的音乐关键词:")
    song_list = search_music(keyword)
    if song_list:
        for song in song_list:
            title = song.get('SongName')
            singer = song.get('SingerName')
            hash_val = song.get('FileHash')
            album_id = song.get('AlbumID')
            play_url = get_music_play_url(hash_val, album_id)
            download_music(play_url, title, singer)
    else:
        print("未找到相关音乐。")
    

代码解释

  • search_music 函数

    • 向酷狗的搜索 API 发送请求,传递搜索关键词和其他必要参数。
    • 解析响应的 JSON 数据,提取音乐列表。
    • 返回音乐列表,每个元素为包含音乐信息的字典。
  • get_music_play_url 函数

    • 根据音乐的 hash 值和专辑 ID 向获取播放地址的 API 发送请求。
    • 解析响应的 JSON 数据,提取音乐的播放地址。
    • 返回音乐的播放地址。
  • download_music 函数

    • 创建 music 文件夹用于存储下载的音乐文件。
    • 根据播放地址下载音乐文件,使用 stream=True 以流式方式下载,避免占用过多内存。
    • 打印下载结果信息。
  • 主程序

    • 获取用户输入的搜索关键词。
    • 调用 search_music 函数搜索音乐。
    • 遍历搜索结果,调用 get_music_play_url 函数获取音乐播放地址,再调用 download_music 函数下载音乐。

运行思路

  • 安装依赖库:确保已经安装了 requests 库,可以使用 pip install requests 进行安装。
  • 运行脚本:在终端中运行 python kugou_music_downloader.py,按照提示输入要搜索的音乐关键词。
  • 下载音乐:脚本会自动搜索音乐、获取播放地址并下载音乐文件到 music 文件夹中。

注意事项

  • 反爬机制:酷狗有反爬机制,频繁请求可能会导致 IP 被封禁。可以考虑使用代理 IP 或控制请求频率。
  • 版权问题:下载受版权保护的音乐可能会侵犯版权,仅用于学习和测试,不要用于商业用途。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值