首页 编程教程正文

QQ音乐开源API下载收费歌曲

piaodoo 编程教程 2020-02-22 22:14:01 1230 0 python教程

本文来源吾爱破解论坛

原文借鉴:原文贴

嗨学网

首先这个帖子的代码大不部分是参考@珍珠奶茶丶板牙的,我当时下载的他的源码。
然后用着不是特别方便,就自己改良了一下下,然后又打包成无需环境的exe程序,让我朋友们使用。
然后我再使用的过程中发现一个bug,下载“逍遥叹”歌曲的时候会有bug。
emmm,刚才我又重新试了一遍,BUG又没了,真的是玄学。看的我一脸懵...
大概就是  media_mid = []   这个列表返回的数据,有的格式不是正确,我也没修。[Python] 纯文本查看 复制代码

#-*- coding:utf-8 -*-# author:**ZLH**
# datetime:2019/8/2 16:47
# software: PyCharm

import requests
import json
headers = {
    'Host': 'c.y.qq.com',
    'Referer': 'http://c.y.qq.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 '
    'Safari/537.36 '
}
def douqq_post(mid):
        """
    返回歌曲下载url
    :param mid:歌曲mid
    :return: 字典
    """
        post_url = 'http://www.douqq.com/qqmusic/qqapi.php'
        data = {'mid': mid}
        res = requests.post(post_url, data=data)
        get_json = json.loads(res.text)
        return eval(get_json)


def download_file(src, file_path):
        """
    歌曲下载
    :param src: 下载链接
    :param file_path: 存储路径
    :return: 文件路径
    """
        r = requests.get(src, stream=True)
        f = open(file_path, "wb")
        for chunk in r.iter_content(chunk_size=512):
            if chunk:
                f.write(chunk)
        return file_path

def choice_download(dic):
        print('1. m4a视频')
        print('2. mp3普通品质')
        print('3. mp3高品质')
        print('4. ape高品无损')
        print('5. flac无损音频')
        select = int(input("请输入您的选择:"))
        src = ''
        postfix = ''
        if select == 1:
            src = dic['m4a']
            postfix = '.m4a'
        if select == 2:
            src = dic['mp3_l']
            postfix = '.mp3'
        if select == 3:
            src = dic['mp3_h']
            postfix = '.mp3'
        if select == 4:
            src = dic['ape']
            postfix = '.ape'
        if select == 5:
            src = dic['flac']
            postfix = '.flac'
        return postfix, src.replace('\/\/', '//').replace('\/', '/')

def find_song(word):
        """
    查找歌曲
    :param word: 歌曲名
    :return: 返回歌曲mid
    """
        get_url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n' \
        '=20&w=' + word
        try:
            res1 = requests.get(get_url, headers=headers)
            get_json = json.loads(res1.text.strip('callback()[]'))
            jsons = get_json['data']['song']['list']
            songmid = []
            media_mid = []
            song_singer = []
            i = 1
            for song in jsons:
                # print(i, ':' + song['songname'], '---', song['singer'][0]['name'], song['songmid'], song['media_mid'])
                print(i, ':' + song['songname'], '---', song['singer'][0]['name'])
                songmid.append(song['songmid'])
                media_mid.append(song['media_mid'])
                song_singer.append(song['singer'][0]['name'])
                i = i + 1
            select = int(input("请输入您的选择:")) - 1
            return songmid[select], song_singer[select]
        except Exception as e:
            print(f'歌曲查找有误:{e}')
            return None


if __name__ == '__main__':
# songname = '叹云兮'
    while True:
        songname = input("Please input the music name:")
        song_mid, singer = find_song(songname)
        dic = douqq_post(song_mid)
        # {
        # "mid":"004FjJo32TISsY",
        # "m4a":"http:\/\/dl.stream.qqmusic.qq.com\/C400004FjJo32TISsY.m4a?guid=2095717240&vkey=0B599CA74745F8A27A33A1FED2C7F6925FFFE8ED040569FB3540EB011FE9C5A3D7F36EAE4BDBD450F25076A23EBAF95A5ECB54B22C5E8F10&uin=0&fromtag=38",
        # "mp3_l":"http:\/\/dl.stream.qqmusic.qq.com\/M500004FjJo32TISsY.mp3?guid=2095717240&vkey=0B599CA74745F8A27A33A1FED2C7F6925FFFE8ED040569FB3540EB011FE9C5A3D7F36EAE4BDBD450F25076A23EBAF95A5ECB54B22C5E8F10&uin=0&fromtag=53",
        # "mp3_h":media_mid"http:\/\/dl.stream.qqmusic.qq.com\/M800004FjJo32TISsY.mp3?guid=2095717240&vkey=0B599CA74745F8A27A33A1FED2C7F6925FFFE8ED040569FB3540EB011FE9C5A3D7F36EAE4BDBD450F25076A23EBAF95A5ECB54B22C5E8F10&uin=0&fromtag=53",
        # "ape":"http:\/\/dl.stream.qqmusic.qq.com\/A000004FjJo32TISsY.ape?guid=2095717240&vkey=0B599CA74745F8A27A33A1FED2C7F6925FFFE8ED040569FB3540EB011FE9C5A3D7F36EAE4BDBD450F25076A23EBAF95A5ECB54B22C5E8F10&uin=0&fromtag=53",
        # "flac":"http:\/\/dl.stream.qqmusic.qq.com\/F000004FjJo32TISsY.flac?guid=2095717240&vkey=0B599CA74745F8A27A33A1FED2C7F6925FFFE8ED040569FB3540EB011FE9C5A3D7F36EAE4BDBD450F25076A23EBAF95A5ECB54B22C5E8F10&uin=0&fromtag=53",
        # "pic":"https:\/\/y.gtimg.cn\/music\/photo_new\/T002R300x300M000003NZyTh4eMMsp.jpg?max_age=2592000"
        # }
        # print('mid:'+dic['mid'])
        postfix, url = choice_download(dic)
        save_path = "D:\\Music\\"
        download_file(url, save_path + songname + ' - ' + singer + postfix)
        con = input('Download success or not continue: y/n')
        if con == 'n':
            break

微信图片_20190814222216.png (53.12 KB, 下载次数: 6)

下载附件  保存到相册

2019-8-14 22:22 上传

微信图片_20190814222216.png

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7863.html

搜索