您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows the total amount for each rating, total/daily installs, and scripts posted on any user profile and search pages.
当前为
// ==UserScript== // @name Greasy Fork镜像 - Analyze from posted scripts // @namespace ScriptAnalyzer // @version 6 // @description Shows the total amount for each rating, total/daily installs, and scripts posted on any user profile and search pages. // @author hacker09 // @match https://gf.qytechs.cn/en/users/* // @match https://gf.qytechs.cn/*/scripts?q=* // @match https://gf.qytechs.cn/*/scripts/by-site/* // @icon https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://gf.qytechs.cn/&size=64 // @grant none // ==/UserScript== (async function() { 'use strict'; var select, dateresponse, dateDocument, date, ok = 0, bad = 0, Dailytotal = 0, total = 0, good = 0, DocList = [], Scriptposts = 0; //Create new variables function Calc(select) { //Create a selector function to calculate values select.querySelectorAll(".ok-rating-count").forEach(el => ok += parseInt(el.innerText)); //Add the ratings select.querySelectorAll(".bar-rating-count").forEach(el => bad += parseInt(el.innerText)); //Add the ratings select.querySelectorAll(".good-rating-count").forEach(el => good += parseInt(el.innerText)); //Add the ratings select.querySelectorAll("dd.script-list-total-installs").forEach(el => total += parseInt(el.innerText.replaceAll(',',''))); //Add the total installs select.querySelectorAll("dd.script-list-daily-installs").forEach(el => Dailytotal += parseInt(el.innerText.replaceAll(',',''))); //Add the daily installs } //Finishes the Calc function if (location.href.match('sort=created') === null) { //If the current page is not already being sorted by the created date dateresponse = await (await fetch(document.querySelector('a[href$="sort=created"]').href)).text(); //Fetch dateDocument = new DOMParser().parseFromString(dateresponse, "text/html"); //Parses the fetch response date = dateDocument.querySelector("span > relative-time").textContent; //Save the newest created date } //Finishes the if condition else //If the current page is already being sorted by the created date { //Starts the else condition date = document.querySelector("span > relative-time").title; //Save the newest created date } //Finishes the else condition if (location.href.match('users') !== null && location.href.match('page=') === null) //If the current page is a user profile and isn't a user profile page >= 2 { //Starts the if condition [...document.querySelectorAll(".pagination a:not(.next_page)"), { href: location.href }].forEach(async (el) => { //For each page link including the currently opened one await new Promise(r => setTimeout(r, 1000)); //Wait 1 sec before continuing const response = await (await fetch(el.href)).text(); //Fetch const newDocument = new DOMParser().parseFromString(response, 'text/html'); //Parses the fetch response DocList.push(newDocument); //Add the fetched page to an array }); //Finishes the forEach loop await new Promise(r => setTimeout(r, 2000)); //Wait 2 secs before continuing document.head.insertAdjacentHTML('beforeend', '<style>.list-option:not(.list-current) {display: flex; flex-direction: row; align-items: center;} .list-option:not(.list-current) > span {position: relative; left: -7px;} .list-option.list-current > span {position: relative; left: 5px;}</style>'); //Add a space before ( DocList.forEach(async (docs, i) => { //ForEach page we fetched await Calc(docs); //Call the Calc function Scriptposts += docs.querySelectorAll("#user-script-list > li").length; //Add the total Script posts if (i+1 === DocList.length) { //If it's the last loop document.querySelector("#user-script-sets-section,#user-script-list-section").insertAdjacentHTML("afterbegin", `<section><header><h3>Total</h3></header><section class="text-content"><ul><li><b>Script posts</b>: ${Scriptposts}</li><li><b>Daily installs</b>: ${Dailytotal.toLocaleString()}</li><li><b>Total installs</b>: ${total.toLocaleString()}</li><li><b>Total ok ratings</b>: ${ok.toLocaleString()}</li><li><b>Total bad ratings</b>: ${bad.toLocaleString()}</li><li><b>Total good ratings</b>: ${good.toLocaleString()}</li><li><b>Latest created</b>: ${date}</li></ul></section></section>`); //Add the user information on the page document.querySelector(".list-option").innerHTML += `<span>(${Dailytotal.toLocaleString()})</span>`; //Add the Dailytotal information on the sidebar document.querySelector(".list-option:nth-child(2)").innerHTML += `<span>(${total.toLocaleString()})</span>`; //Add the total information on the sidebar document.querySelector(".list-option:nth-child(3)").innerHTML += `<span>(${parseInt(ok+bad+good).toLocaleString()})</span>`; //Add the ratings information on the sidebar } //Finishes the if condition }); //Finishes the forEach loop } //Finishes the if condition if (location.href.match(/org\/.*\/scripts/)) //If the current page is a script search page { //Starts the else condition await Calc(document); //Call the Calc function document.querySelector(".width-constraint:nth-child(2)").insertAdjacentHTML("afterbegin", `<section><header><h3>Total</h3></header><section class="text-content"><ul><li><b>Script posts</b>: ${document.querySelectorAll("#browse-script-list > li").length}</li><li><b>Daily installs</b>: ${Dailytotal.toLocaleString()}</li><li><b>Total installs</b>: ${total.toLocaleString()}</li><li><b>Total ok ratings</b>: ${ok.toLocaleString()}</li><li><b>Total bad ratings</b>: ${bad.toLocaleString()}</li><li><b>Total good ratings</b>: ${good.toLocaleString()}</li><li><b>Latest created</b>: ${date}</li></ul></section></section>`); //Add the information on the page document.querySelector(".list-option").innerHTML += `<span>(${Dailytotal.toLocaleString()})</span>`; //Add the Dailytotal information on the sidebar document.querySelector(".list-option:nth-child(2)").innerHTML += `<span>(${total.toLocaleString()})</span>`; //Add the total information on the sidebar document.querySelector(".list-option:nth-child(3)").innerHTML += `<span>(${parseInt(ok+bad+good).toLocaleString()})</span>`; //Add the ratings information on the sidebar } //Finishes the else condition })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址