NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Show VIB Grading and Delta Alpha // @description You are a Very Important Bangumier! // @copyright gyakkun // @license MIT // @version 0.0.6 // @match *://bangumi.tv/* // @match *://bgm.tv/* // @match *://chii.in/* // @updateURL https://openuserjs.org/meta/gyakkun/Show_VIB_Grading_and_Delta_Alpha.meta.js // @downloadURL https://openuserjs.org/install/gyakkun/Show_VIB_Grading_and_Delta_Alpha.user.js // @grant none // ==/UserScript== (function () { if (document.location.pathname.match(/\/subject\/\d+$/) == null) return // Calculate global avg let globalRatingSum = 0, globalVoterCount = 0 const LOG_PREFIX = "[SVGaDA] " const GLOBAL_AVG_SELECTOR = ".global_score > span[property='v:average']" const FRIEND_SCORE_SELECTOR = "div.frdScore" const SCORE_PANEL_SELECTOR = "div[rel='v:rating']" $(".horizontalChart > li > a").each((idx, item) => { let text = item.attributes["data-original-title"].value let count = text.substring(text.indexOf("(") + 1, text.lastIndexOf(")") - 1); count = parseInt(count) let rating = 10 - idx console.debug(`${LOG_PREFIX}Global vote: rating - ${rating}, count - ${count}`) globalRatingSum += count * rating globalVoterCount += count }) let globalAvg = globalRatingSum / globalVoterCount console.log(`${LOG_PREFIX}Global AVG: ${globalAvg}`) // Fetch and calculate VIB avg fetch(document.URL + "/stats").then(d => { return d.text() }).then(html => { let lines = html.split(/\r?\n/); let chartSetsKeyword = "CHART_SETS" console.debug(`${LOG_PREFIX}Num of lines in html: ${lines.length}`) for (let line of lines) { let idxOfKeyword = line.indexOf(chartSetsKeyword) if (idxOfKeyword < 0) continue; let objLine = line.substring(line.indexOf("{"), line.lastIndexOf("}") + 1) console.debug(`${LOG_PREFIX}The CHART_SETS obj line ${objLine}`) let chartSetsObj = JSON.parse(objLine) console.debug(`${LOG_PREFIX}The CHART_SETS obj after parsing: ${objLine}`) if (!!!chartSetsObj['vib']) { console.log(`${LOG_PREFIX}No VIB rating found.`) break } let vibRatingSum = 0, vibVoterCount = 0; for (let group of chartSetsObj.vib.data) { let rating = group.title let count = !!group.vib ? group.vib : 0 vibRatingSum += rating * count vibVoterCount += count console.debug(`${LOG_PREFIX}VIB vote: rating - ${rating}, count - ${count}`) } let vibAvg = (vibRatingSum + 0.0) / (vibVoterCount + 0.0) console.log(`${LOG_PREFIX}VIB AVG: ${vibAvg}`) // $(GLOBAL_AVG_SELECTOR).after("<div>" + avg + "</div>") let delta = vibAvg - globalAvg console.log(`${LOG_PREFIX}Delta AVG: ${delta}`) // $(GLOBAL_AVG_SELECTOR).after("<div> Delta: " + (avgAvg - avg) + "" + "</div>") let scorePanelDiv = $(SCORE_PANEL_SELECTOR) let friendScorePanel = $(FRIEND_SCORE_SELECTOR) let thePanel = friendScorePanel.length > 0 ? friendScorePanel : scorePanelDiv thePanel.first().after(` <div class="frdScore"> 全站评价:<span class="num">${globalAvg.toFixed(2) + ""}</span> </div> <div class="frdScore"> VIB评价 :<span class="num">${vibAvg.toFixed(2) + ""}</span> <span class="desc">${delta > 0 ? "▲" + delta.toFixed(2) : "▼" + delta.toFixed(2)}</span> <a href="${document.URL + "/stats"}" class="l">透视</a> </div> `) break; } }) }());