利用Console来解析QQ音乐达到下载付费歌曲的目的

原创内容 1,445
原创内容 1,445

为何写这个

  • 为何写这个?当然是自己没有QQ音乐会员,想要下载歌曲确实付费。
  • 如果用那些网站的解析,还要一个接一个的输入,太麻烦了

所有自己就写个代码,利用console控制台来解决这个麻烦。

使用方法

  1. 打开浏览器,进入QQ音乐的歌曲列表页面。比如 https://y.qq.com/portal/profile.html
  2. 然后右键:审查元素,选择Console
  3. 复制下面的代码到Console中,然后在enter。

对于 https://y.qq.com/portal/profile.html 和歌单 比如 https://y.qq.com/n/yqq/playlist/4055192225.html ,都可以用这个方法。

这个方法没有其他那样一个一个的复制在解析那样麻烦,一键enter后,想下载哪首就点哪首。

查看方法

按照上述的步骤后,关闭(也可不关闭)
这时不要刷新页面,然后你用鼠标对准QQ音乐本有的下载按钮,他会提醒你不能下载,你再点下旁边的(就是追加在后面)下载按钮,点击就可以下载了。

js 代码

    
    $(window).ready(function() {

        var setSongDownAArray = new Array();

        function replaceString(string) {
            var url = new URL( string );
            var result = url.pathname.replace(/.html$/gi,"");
            return result.replace("/n/yqq/song/", "");

        }

        function setSongDownA(m) {
            var h = $(m);
            for (i = 0, len = h.length; i < len; i++) {
                $(m)[i].classList.add("setSongDownA");
            }
        }
        setSongDownA(".songlist__songname_txt>a");

        function setSongDown(m) {
            var h = $(m);
            for (i = 0, len = h.length; i < len; i++) {
                $(m)[i].classList.add("SongDown");

            }
        }
        setSongDown(".mod_list_menu");

        var tables = $(".setSongDownA");
        var table = $(".SongDown");
        for (i = 0, len = tables.length; i < len; i++) {
            tables[i].id = "setSongDownA-"+i;
            var mid = document.getElementById("setSongDownA-"+i).href;
            setSongDownAArray[replaceString(mid)] = document.getElementById("setSongDownA-"+i).innerText;
            table[i].id = "SongDown-"+replaceString(mid);
            $.ajax({
                type: "get",
                url: "https://api.krait.cn/api/song/yqq",
                data: {
                    mid: mid
                },
                async: false,
                dataType: "json",
                success: function(msg) {
                    var data = '';
                    if (msg != '') {
                        data = eval("(" + msg + ")");
                    }
                    $(document).ready(function() {
                        $("#SongDown-"+data.mid).append("<a href=\""+data.mp3_h+"\" class=\"list_menu__item\" title=\""+setSongDownAArray[data.mid]+"\" download=\""+setSongDownAArray[data.mid]+"\"><i class=\"list_menu__icon_down\"></i><span class=\"icon_txt\">下载</span></a>");
                    });
                },
                error: function(msg) {
                    console.log(msg);
                }
            });

        }


    });


计算原理

这是利用了QQ音乐的api借口。上述代码虽然用的接口是 https://api.krait.cn/api/song/yqq 但是这个借口也是用了函数 file_get_contents($url); 获取别人的接口。因为它的接口没有启用 Access-Control-Allow-Origin: *

这步是循环对需要解析的歌曲进行循环锚点

function setSongDownA(m) {
    var h = $(m);
    for (i = 0, len = h.length; i < len; i++) {
        $(m)[i].classList.add("setSongDownA");
      }
    } 
    setSongDownA(".songlist__songname_txt>a");

这步就是循环利用歌曲的链接进行解析。这个就用到了腾讯qq音乐的api

        $.ajax({
                type: "get",
                url: "https://api.krait.cn/api/song/yqq",
                data: {
                    mid: mid
                },
                async: false,
                dataType: "json",
                success: function(msg) {
                    var data = '';
                    if (msg != '') {
                        data = eval("(" + msg + ")");
                    }
                    $(document).ready(function() {
                        $("#SongDown-"+data.mid).append("<a href=\""+data.mp3_h+"\" class=\"list_menu__item\" title=\""+setSongDownAArray[data.mid]+"\" download=\""+setSongDownAArray[data.mid]+"\"><i class=\"list_menu__icon_down\"></i><span class=\"icon_txt\">下载</span></a>");
                    });
                },
                error: function(msg) {
                    console.log(msg);
                }
            });

其中这步,就是对api返回的歌曲下载链接追加在每首歌的下载按钮旁边,这就有了两个下载按钮,当然两个下载按钮的实质不一样。

$(document).ready(function() {
    $("#SongDown-"+data.mid).append("<a href=\""+data.mp3_h+"\" class=\"list_menu__item\" title=\"下载\" download=\"filename\"><i class=\"list_menu__icon_down\"></i><span class=\"icon_txt\">下载</span></a>");
     });

下载不同的音质

首先我们打开https://api.krait.cn/api/song/yqq

然后得到

"{\"mid\":\"0032qfIn1Tzdbq\",\"m4a\":\"http:\\\/\\\/dl.stream.qqmusic.qq.com\\\/C4000032qfIn1Tzdbq.m4a?guid=2095717240&vkey=462AABF847D9B3626195F8EAB8747D77A17625AFAF06B6871B2B59101D83E56633734E8E29C2735498759A40B87CBE1F86EC6FA33F04C5AF&uin=0&fromtag=38\",\"mp3_l\":\"http:\\\/\\\/dl.stream.qqmusic.qq.com\\\/M5000032qfIn1Tzdbq.mp3?guid=2095717240&vkey=462AABF847D9B3626195F8EAB8747D77A17625AFAF06B6871B2B59101D83E56633734E8E29C2735498759A40B87CBE1F86EC6FA33F04C5AF&uin=0&fromtag=53\",\"mp3_h\":\"http:\\\/\\\/dl.stream.qqmusic.qq.com\\\/M8000032qfIn1Tzdbq.mp3?guid=2095717240&vkey=462AABF847D9B3626195F8EAB8747D77A17625AFAF06B6871B2B59101D83E56633734E8E29C2735498759A40B87CBE1F86EC6FA33F04C5AF&uin=0&fromtag=53\",\"ape\":\"http:\\\/\\\/dl.stream.qqmusic.qq.com\\\/A0000032qfIn1Tzdbq.ape?guid=2095717240&vkey=462AABF847D9B3626195F8EAB8747D77A17625AFAF06B6871B2B59101D83E56633734E8E29C2735498759A40B87CBE1F86EC6FA33F04C5AF&uin=0&fromtag=53\",\"flac\":\"http:\\\/\\\/dl.stream.qqmusic.qq.com\\\/F0000032qfIn1Tzdbq.flac?guid=2095717240&vkey=462AABF847D9B3626195F8EAB8747D77A17625AFAF06B6871B2B59101D83E56633734E8E29C2735498759A40B87CBE1F86EC6FA33F04C5AF&uin=0&fromtag=53\",\"songname\":\"\\u6765\\u751f\\u7f18\",\"albumname\":\"\\u6765\\u751f\\u7f18\",\"singername\":\"\\u5218\\u5fb7\\u534e\",\"pic\":\"https:\\\/\\\/y.gtimg.cn\\\/music\\\/photo_new\\\/T002R300x300M000004A6KAD4ZoIub.jpg?max_age=2592000\"}"

这里可以看出,音质有 m4a mp3_l mp3_h ape flac

然后对比

m4a -> m4a 格式
mp3_l -> mp3 普通高品
mp3_h -> mp3 高品质
ape -> ape 格式
flac -> flac 格式

其次修改

$("#SongDown-"+data.mid).append("<a href=\""+data.mp3_h+"\" class=\"list_menu__item\" title=\""+setSongDownAArray[data.mid]+"\" download=\""+setSongDownAArray[data.mid]+"\"><i class=\"list_menu__icon_down\"></i><span class=\"icon_txt\">下载</span></a>");

中的 data.mp3_h mp3_h 改成上述中你想要的格式即可,再enter。

最后

如果这个对你有用的话,不放留个评论吧。
不过对上面讲述的过程,我可能没有讲清楚,但是应该你能理解。

  • copyright
    著作权归作者所有
  • person
  • play_arrow
    1,445 Views
  • create
  • autorenew
    最后修改:2018 年 08 月 27 日
  • local_offer
    原创内容无标签
copyright info_outline
  1. 试了下 教主AlanWalker的最新专辑没法下载,还是自己掏钱买吧

选择表情

*