您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
bilibili-live-effective-rate 有效观看时长÷直播时长=直播有效率
当前为
// ==UserScript== // @name bilibili-live-effective-rate // @name:zh-HK bilibili-live-effective-rate // @name:zh-TW bilibili-live-effective-rate // @name:en bilibili-live-effective-rate // @name:ja bilibili-live-effective-rate // @namespace https://github.com/catscarlet/bilibili-live-effective-rate // @description bilibili-live-effective-rate 有效观看时长÷直播时长=直播有效率 // @description:zh-HK bilibili-live-effective-rate 有效觀看時長÷直播時長=直播有效率 // @description:zh-TW bilibili-live-effective-rate 有效觀看時長÷直播時長=直播有效率 // @description:en bilibili-live-effective-rate Effective-watching-time / live-duration = live-effective-rate // @description:ja bilibili-live-effective-rate 有効観看時長÷直播時長=直播有効率 // @version 0.4.0 // @author catscarlet // @match *://link.bilibili.com/p/center/index* // @require https://code.jquery.com/jquery-latest.js // @run-at document-end // @grant none // @license GNU AGPLv3 // ==/UserScript== /* This project is licensed under **GNU AFFERO GENERAL PUBLIC LICENSE Version 3** */ (function() { 'use strict'; $(function() { console.log('bilibili-live-effective-rate loaded'); checkUrl(document.location); window.onpopstate = function(event) { checkUrl(document.location); }; function checkUrl(url) { let urlRe = new RegExp('https://link\.bilibili\.com/p/center/index\\??\\S*#/live-data/session-data'); let result = urlRe.test(url); if (result) { findCenterGrid(); //findLinkPopupCtnr(); } } function findCenterGrid() { const targetNode = document.getElementsByClassName('main-ctnr p-relative f-right')[0]; const config = {attributes: false, childList: true, subtree: true}; const callback = function(mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type === 'childList') { addAction(); } else if (mutation.type === 'attributes') { } } }; const observer = new MutationObserver(callback); observer.observe(targetNode, config); }; /* function findLinkPopupCtnr() { const targetNode = document.getElementsByClassName('link-popup-ctnr')[0]; const config = {attributes: false, childList: true, subtree: true}; const callback = function(mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type === 'childList') { addActionToPopup(); } else if (mutation.type === 'attributes') { } } }; const observer = new MutationObserver(callback); observer.observe(targetNode, config); }; */ function colorRate(effectiveRate) { let color; if (effectiveRate < 50) { color = 'darkgreen'; } else if (effectiveRate < 100) { color = 'green'; } else if (effectiveRate < 150) { color = 'darkgoldenrod'; } else if (effectiveRate < 200) { color = 'orange'; } else { color = 'red'; } return color; }; function unitConverter(raw) { let duration = raw.slice(-2); let durationInMinute = 0; if (duration == '小时') { durationInMinute = parseFloat(raw.substr(0, raw.length - 2)) * 60; } else if (duration == ' 秒') { durationInMinute = parseFloat(raw.substr(0, raw.length - 2)) / 60; } else { durationInMinute = parseFloat(raw.substr(0, raw.length - 2)); } return durationInMinute; }; function addAction() { let sessionDataTable = $('.session-data-table'); if (sessionDataTable.length == 0) { return; } if (sessionDataTable.attr('effectiveRateFlag')) { return; } let effectiveHead = '<td class="effective-rate-head" style="width: 10em">有效率</td>'; let sessionDataTableThead = sessionDataTable.find('thead'); let sessionDataTableTheadTrList = sessionDataTableThead.find('tr'); sessionDataTableTheadTrList.each(function(i) { let tr = $(this); let tdList = tr.find('td'); let sessionDataTableTheadAverageTimeDom = $(tdList[6]); sessionDataTableTheadAverageTimeDom.after(effectiveHead); }); let sessionDataTableTbody = sessionDataTable.find('tbody'); let sessionDataTableTbodyTrList = sessionDataTableTbody.find('tr'); sessionDataTableTbodyTrList.each(function(i) { let tr = $(this); let tdList = tr.find('td'); let durationDom = $(tdList[2]); let averageTimeDom = $(tdList[6]); let durationRaw = durationDom.text(); let averageTimeRaw = averageTimeDom.text(); let duration = unitConverter(durationRaw); let averageTime = unitConverter(averageTimeRaw); let effectiveRate = (averageTime / duration * 100).toFixed(2); let effectiveRatePercent = effectiveRate + ' %'; let color = colorRate(effectiveRate); let effectiveRateTd = '<td data-v-045de783="" class="effective-rate" style="width: 10em; color: ' + color + '">' + effectiveRatePercent + '</td>'; averageTimeDom.after(effectiveRateTd); }); sessionDataTable.attr('effectiveRateFlag', 1); } /* function addActionToPopup() { let linkPopupPanel = $('.link-popup-panel'); linkPopupPanel.css('width', 'max-content'); if (linkPopupPanel.length == 0) { console.log('no linkPopupPanel. Return'); return; } if (linkPopupPanel.attr('effectiveRateFlag')) { console.log('linkPopupPanel effectiveRateFlag. Return'); return; } let linkPopupPanelEffectiveHead = '<span class="effective-rate-head" style="display: inline-block; line-height: 38px; font-size: 12px; text-align: center;">有效率</td>'; let linkPopupPanelTitle = linkPopupPanel.find('.title'); linkPopupPanelTitle.find('.average-time').after(linkPopupPanelEffectiveHead); let linkPopupPanelContent = linkPopupPanel.find('.content'); let linkPopupPanelContentList = linkPopupPanelContent.find('.item'); linkPopupPanelContentList.each(function(i) { let linkPopupPanelContentItem = $(this); let durationRaw = linkPopupPanelContentItem.find('.duration').text(); let averageTimeRaw = linkPopupPanelContentItem.find('.average-time').text(); let duration = unitConverter(durationRaw); let averageTime = unitConverter(averageTimeRaw); let effectiveRate = (averageTime / duration * 100).toFixed(2); let effectiveRatePercent = effectiveRate + ' %'; let color = colorRate(effectiveRate); let effectiveRateSpan = '<span class="effective-rate-item" style="color: ' + color + '; display: inline-block; line-height: 38px; font-size: 12px; text-align: center;">' + effectiveRatePercent + '</td>'; linkPopupPanelContentItem.find('.average-time').after(effectiveRateSpan); }); linkPopupPanel.attr('effectiveRateFlag', 1); } */ }); })(); /* This project is licensed under **GNU AFFERO GENERAL PUBLIC LICENSE Version 3** */