13听书网下载工具

自动下载13听书网音频

// ==UserScript==
// @name         13听书网下载工具
// @namespace    Max
// @version      v1.3-20240110
// @description  自动下载13听书网音频
// @author       Max
// @run-at       document-end
// @license      MIT
// @match        https://www.ting13.com/play/*
// @grant        GM_download
// ==/UserScript==

let cfg_download_interval = 5
let cfg_prefix_num_switch = false
let cfg_prefix_num_now = 1

let stop_download = false

function gdown(data){
    let filename = document.querySelector("div.p-h > h1").innerText.split('正在播放:')[1].split('.')[0]
    filename = filename + '.m4a'
    console.log(cfg_prefix_num_switch)
    if (cfg_prefix_num_switch) {
        filename = cfg_prefix_num_now + '-' + filename
    }
    let DOWNLOAD_INTERVAL = cfg_download_interval * 1000;
    console.log({url:data, name:filename});
    GM_download({
        url:data,
        name: filename, //gname[gname.length-1].split("?")[0],
        onerror:function(e){
            window.open(data);
        },
        onload:function(e){
            setTimeout(function() {
                if (stop_download) {
                    console.log('stop!');
                    return;
                }
                let new_url = document.querySelector("#nexturl").href
                cfg_prefix_num_now = parseInt(cfg_prefix_num_now) + 1
                new_url = new_url + '?dcfg=' + cfg_download_interval + '|' + cfg_prefix_num_switch + '|' + cfg_prefix_num_now;
                window.location = new_url
            }, DOWNLOAD_INTERVAL)
        },
    });
}

function start_download() {
    var dofind=true,gurl=null;
    setInterval(function(){
        if(dofind){
            var ga=document.getElementsByTagName("audio");
            if(ga.length>0){
                gurl=ga[0].getAttribute("src");
            }
            if(gurl!=null){
                dofind=false;
                gdown(gurl);
            }
        }
    },1000);
}

(function() {
    'use strict';
    const settingsPanel = document.createElement('div');
    settingsPanel.id = 'floating-settings-panel';
    settingsPanel.style.position = 'fixed';
    settingsPanel.style.top = '20px';
    settingsPanel.style.right = '20px';
    settingsPanel.style.width = '200px';
    settingsPanel.style.padding = '10px';
    settingsPanel.style.background = '#fff';
    settingsPanel.style.border = '1px solid #ccc';
    settingsPanel.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.1)';
    settingsPanel.style.zIndex = '9999';

    settingsPanel.innerHTML = `
    <div id="mydrag" style="background-color:#08F; cursor:move">
        <h3>设置</h3>
        </div>
        <label for="cfg_prefix_num_switch">文件名添加前缀数字</label>
        <input type="checkbox" id="cfg_prefix_num_switch">
        <br>
        <label for="cfg_prefix_num_now">目前前缀数字</label>
        <input type="number" id="cfg_prefix_num_now">
        <br>
        <label for="cfg_download_interval">下载间隔(秒)</label>
        <input type="number" id="cfg_download_interval">
        <hr>
        <button type="button" id="cfg_download_start">开始下载!</button>
        <button type="button" id="cfg_download_stop">停止下载!</button>
        <hr>
        <p>修改设置后请点“开始下载”</p>
        <p>下载间隔过小会封IP,推荐5秒</p>

    `;

    document.body.appendChild(settingsPanel);

    let isDragging = false;
    let offsetX, offsetY;

    const dragDiv = document.getElementById('mydrag');

    dragDiv.addEventListener('mousedown', function(e) {
        isDragging = true;
        offsetX = e.clientX - settingsPanel.getBoundingClientRect().left;
        offsetY = e.clientY - settingsPanel.getBoundingClientRect().top;
    });

    document.addEventListener('mousemove', function(e) {
        if (isDragging) {
            settingsPanel.style.top = (e.clientY - offsetY) + 'px';
            settingsPanel.style.left = (e.clientX - offsetX) + 'px';
        }
    });

    document.addEventListener('mouseup', function() {
        isDragging = false;
    });

    function loadSettings() {
        const url = new URL(window.location.href);
        const params = new URLSearchParams(url.search);
        const dcfg = params.get('dcfg');

        if (dcfg) {
            const split_dcfg = dcfg.split('|')

            cfg_download_interval = split_dcfg[0]
            cfg_prefix_num_switch = split_dcfg[1] == 'true' ? true : false;
            cfg_prefix_num_now = split_dcfg[2]

            start_download();
        }

        document.getElementById('cfg_prefix_num_switch').checked = cfg_prefix_num_switch;
        document.getElementById('cfg_prefix_num_now').value = cfg_prefix_num_now;
        document.getElementById('cfg_download_interval').value = cfg_download_interval;
    }

    function on_start_download() {
        let cfg_download_interval = document.getElementById('cfg_download_interval').value
        let cfg_prefix_num_switch = document.getElementById('cfg_prefix_num_switch').checked
        let cfg_prefix_num_now = document.getElementById('cfg_prefix_num_now').value
        let url = window.location.href;
        url = url.split('?dcfg')[0]
        url = url + '?dcfg=' + cfg_download_interval + '|' + cfg_prefix_num_switch + '|' + cfg_prefix_num_now;
        window.location.href = url;
    }

    document.getElementById('cfg_download_start').addEventListener('click', function(event) {
        on_start_download();
    });

    document.getElementById('cfg_download_stop').addEventListener('click', function(event) {
        stop_download = true;
    });

    loadSettings();
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址