机核有声书时长统计

计算机核网有声书的总时长

// ==UserScript==
// @name         机核有声书时长统计
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  计算机核网有声书的总时长
// @author       ChrisTitan
// @license      GNU GPLv3
// @match        https://www.gcores.com/albums/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=gcores.com
// @require      https://libs.baidu.com/jquery/1.7.2/jquery.min.js
// @require      https://greasyfork.org/scripts/383527-wait-for-key-elements/code/Wait_for_key_elements.js?version=701631
// @grant        none
// ==/UserScript==

waitForKeyElements (".mutedInfo", sumDuration);

function sumDuration (jNode) {
    'use strict';

    // 开始获取页面单集时长
    const radios = document.querySelectorAll('span.u_color-gray-info:nth-of-type(1)');
    const times = Array.from(radios, (radio) => radio.textContent);

    // 计算总秒数
    let totalSeconds = 0;

    times.forEach(time => {
        // 分割分钟和秒
        const [minutes, seconds] = time.split(':').map(Number);
        // 转换为秒并累加
        totalSeconds += minutes * 60 + seconds;
    });

    // 计算小时、分钟和秒
    const hours = Math.floor(totalSeconds / 3600);
    const remainingMinutes = Math.floor((totalSeconds % 3600) / 60);
    const remainingSeconds = totalSeconds % 60;

    // 格式化为时间字符串
    const formattedTime = `${hours.toString().padStart(2, '0')}:${remainingMinutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;

    const author = document.querySelector('p.u_color-gray-info');
    author.textContent = `总时长: ${formattedTime} · ` + author.textContent;

}