lizhiFM 荔枝FM 下载音乐

下载荔枝FM分享到音乐

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         lizhiFM 荔枝FM 下载音乐
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  下载荔枝FM分享到音乐
// @require https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js
// @author       Zszen
// @match        https://www.lizhi.fm/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    //console.log('123');
    loopDetect();

    function loopDetect(){
       setTimeout(function(){
           if(!player){
               loopDetect();
               return;
           }
           dealMajor();
       },500);
    }
    function dealMajor(){
        var data = null;
        try{
            data = player.getList().models;
        }catch(e){
        }
        //data.cover
        //data.url
        let bro = $('div.playlist').find('span.playlist-item-index').parent().find('span.playlist-item-user-name');
        bro.css({width:'60px'});
        let container = $("<span class='lizhi-download' style='width:160px'></span>")
        let btDownMp3 = $('<span style="width:70px;"><a class="downmp3" href="#">下载音频</a></span>');
        let btDownImg = $('<span style="width:70px;"><a class="downimg" href="#"">下载封面</a></span>');
        container.append(btDownMp3);
        container.append(btDownImg);
        bro.after(container);
        let all = $("span.lizhi-download");
        for(let i=0;i<all.length;i++){
            //console.log(all[i]);
            let a = all.eq(i).find('a.downmp3');
            a.attr('index', i);
            let b = all.eq(i).find('a.downimg');
            b.attr('index', i);
            console.log(a);
            a.on('click',function(e){
                var data = player.getList().models[e.target.getAttribute('index')].attributes;
                if(!data){
                    alert('数据出错,可能页面算法更改')
                    return;
                }
                if(!data.url){
                    reqAudioUrl(data.id,{
                        success: function(url) {
                            data.url = url;
                            window.open(url,"_blank");
                        }
                    })
                }else{
                    window.open(data.url,"_blank");
                }

                //console.log(player.getList().models[e.target.getAttribute('index')].attributes)
                //var data = player.getList().models[e.target.getAttribute('index')].attributes;
                //window.open(data.url,"_blank");
            })
            b.on('click',function(e){
                var data = player.getList().models[e.target.getAttribute('index')].attributes;
                if(!data){
                    alert('数据出错,可能页面算法更改')
                    return;
                }
                window.open(data.cover,"_blank");
            })
        }
    }

    function reqAudioUrl(audioId, opt) {
        if (opt == null) {
            opt = {}
        }
        function defaultFailHandle(res, statusCode, errorThrown) {
            available = true;
            var errMsg = "";
            if (res.rcode != null) {
                errMsg = "rcode:" + res.rcode + ", 信息:" + res.msg
            } else {
                errMsg = "状态码:" + statusCode + ", 报错:" + JSON.stringify(errorThrown)
            }
            $.sdialog({
                content: $('<div><div class="title fontYaHei bold">发生了错误</div><div><p class="text" style="margin-top: 20px;">' + errMsg + "</p></div></div>"),
                autoSize: "false",
                customClass: "wxDialog",
                width: 200,
                height: 244
            })
        }
        var failHandle = opt.fail || defaultFailHandle;
        return $.ajax({
            method: "get",
            url: "/media/url/" + audioId
        }).done(function(res) {
            if (res.rcode === 0) {
                opt.success && opt.success(res.data.url)
            } else {
                failHandle(res)
            }
        }).fail(failHandle)
    }
})();