喜马拉雅付费音频下载方法

背景

前几天给孩子买了一套《狮子老爸讲三国》的付费音频,讲的不错孩子很喜欢。 但有个问题只能在线听,无法保存到本地播放让我有点不爽,盘之 

前提

当然是需要先购买了    ^_^ 。  如果你是超级VIP可以听所有音频也没有问题,总之,可以听的才能下载,不是破解哦  。。。。

工具

传说中的浏览器扩展神器——游猴

安装方法就不说了,不会的请度娘伺候

还需要个下载工具aria2  (猛戳下载

游猴脚本

先创建一个自己的脚本,代码如下

// ==UserScript==
// @name         喜马拉雅my
// @namespace    https://www.ximalaya.com/*/*/*
// @version      1.0
// @description  try to take over the world!
// @author       You
// @match        https://www.ximalaya.com/*/*/*
// @grant             unsafeWindow
// @grant             GM_getValue
// @grant             GM_setValue
// @grant             GM_xmlhttpRequest
// @grant             GM_openInTab
// @require      https://code.jquery.com/jquery-1.12.4.min.js
// ==/UserScript==

(function() {
    'use strict';
    var win = window;
     var aria2_url = "http://127.0.0.1:6800/jsonrpc"; //Aria2 下载地址
    var hasOpenAriac2Tab = false;

    $(document).ready(function(){
        var urls=[];
        console.log(urls);


       //绑定开始下载事件,有点随意,能下载就行了
        $(document).bind('click',function(){
//延迟4秒,让浏览器把音频URL计算完再开始
            setTimeout(function(){
              getPlayer(); //开始下载
              $(".xuicon-quanjubofangqi-xiayiqu")[0].click(); //点击下一个
            },4000);
        });

    });



    function getPlayer(){
        var win = unsafeWindow;

        var title= $(".fm-title").text();
        if(!!win.$webPlayer && !!win.$webPlayer.webAudio){
            var url = win.$webPlayer.webAudio._playSrc;

           sendDownloadTaskToAria2(url,title+'.m4a',"J:\Downloads\sanguo");  //传入地址,名称和本地保存路径
        }
    }

//自定义 log 函数
    function mylog(param1,param2){
        param1 = param1 ? param1 : "";
        param2 = param2 ? param2 : "";
        console.log("#--",param1,param2);
    }
        // 将下载链接发送到 Aria2 下载
    function sendDownloadTaskToAria2(download_url,file_name,save_path){
        var json_rpc = {
            id:'',
            jsonrpc:'2.0',
            method:'aria2.addUri',
            params:[
                [download_url],
                {
                    dir:save_path,
                    out:file_name
                }
            ]
        };
        GM_xmlhttpRequest({
            url:aria2_url,
            method:'POST',
            data:JSON.stringify(json_rpc),
            onerror:function(response){
                mylog(response);
            },
            onload:function(response){
                mylog(response);
                if (!hasOpenAriac2Tab){
                    GM_openInTab('http://aria2c.com/',{active:true});
                    hasOpenAriac2Tab = true;
                }
            }
        });
    }
})();

运行逻辑

由于喜马拉雅付费音频的下载地址是需要token验证的,每个都不一样,想要得到下载地址有两个办法,一是通过分析JS脚本把token加密算法提取出来自己实现一遍,但这个过程比较麻烦,二是让网页自己算出来,我们只需要把播放器的playSrc取出来就行了。这种方法有个问题需要一集一集的获取,不过正好网站提供了下一集功能,那就模拟点击,稍等几秒钟,获取,下载。  

这就是整个下载逻辑,当然,追求完美的你肯定感觉这种实现很丑陋,并且没有自动停止逻辑。 那就加个浮层,控制一下,不过我也懒得写了,聪明的你一定可以做的更好  。。。

 
原文地址:https://www.cnblogs.com/freeton/p/13548527.html