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


    背景

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

    前提

    当然是需要先购买了    ^_^ 。  如果你是超级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取出来就行了。这种方法有个问题需要一集一集的获取,不过正好网站提供了下一集功能,那就模拟点击,稍等几秒钟,获取,下载。  

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

     
  • 相关阅读:
    网页性能优化,缓存优化、加载时优化、动画优化--摘抄
    display的32种写法--摘抄
    transform与position:fixed的那些恩怨--摘抄
    float 常见用法与问题--摘抄
    10个JavaScript难点--摘抄
    CSS3 动画卡顿性能优化解决方案--摘抄
    CSS 盒模型、解决方案、BFC 原理讲解--摘抄
    web实时长图实践--摘抄
    移动端H5多平台分享实践--摘抄
    canvas绘制视频封面--摘抄
  • 原文地址:https://www.cnblogs.com/freeton/p/13548527.html
Copyright © 2020-2023  润新知