Greasy Fork - Analyze from posted scripts

Shows the total amount for each rating, total/daily installs, and scripts posted on any user profile and search pages.

当前为 2024-07-07 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Greasy Fork - Analyze from posted scripts
  3. // @namespace ScriptAnalyzer
  4. // @version 12
  5. // @description Shows the total amount for each rating, total/daily installs, and scripts posted on any user profile and search pages.
  6. // @author hacker09
  7. // @match https://greasyfork.org/*/users/*
  8. // @match https://greasyfork.org/*/scripts?q=*
  9. // @match https://greasyfork.org/*/scripts/by-site/*
  10. // @icon https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://greasyfork.org/&size=64
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. (async function() {
  15. 'use strict';
  16. var LatestCreated, LatestUpdated, ok, bad, good, DailyTotal, TotalInstalls, ScriptsArray, element, SignedIN = ''; //Create new variables
  17.  
  18. const data = await (await fetch(document.querySelector('link[href$=".json"]').href)).json(); //Fetch and parse the response
  19.  
  20. 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 (
  21.  
  22. location.href.match(/org\/.*\/scripts/) ? (element = ".width-constraint:nth-child(2)", ScriptsArray = data) : (element = "#user-script-sets-section, #user-script-list-section", ScriptsArray = document.querySelector('link[href$=".json"]').href.match(document.querySelector(".user-profile-link > a") !== null ? document.querySelector(".user-profile-link > a").innerText.toLowerCase() : false) ? (SignedIN = ' + Deleted + Unlisted + Libraries', data.scripts) : data.all_listable_scripts); //Get the current page element based on whether the current page is a script search page or not, and if the user is logged in or not
  23.  
  24. LatestCreated = new Date(Math.max(...ScriptsArray.map(obj => new Date(obj.created_at)))); //Get the latest created script
  25. LatestUpdated = new Date(Math.max(...ScriptsArray.map(obj => new Date(obj.code_updated_at)))); //Get the latest updated script
  26. ok = ScriptsArray.map(obj => parseInt(obj.ok_ratings, 10)).reduce((acc, curr) => acc + curr, 0); //Sum the total amount of ok ratings
  27. bad = ScriptsArray.map(obj => parseInt(obj.bad_ratings, 10)).reduce((acc, curr) => acc + curr, 0); //Sum the total amount of bad ratings
  28. good = ScriptsArray.map(obj => parseInt(obj.good_ratings, 10)).reduce((acc, curr) => acc + curr, 0); //Sum the total amount of good ratings
  29. DailyTotal = ScriptsArray.map(obj => parseInt(obj.daily_installs, 10)).reduce((acc, curr) => acc + curr, 0); //Sum the total amount of daily total installs
  30. TotalInstalls = ScriptsArray.map(obj => parseInt(obj.total_installs, 10)).reduce((acc, curr) => acc + curr, 0); //Sum the total amount of total installs
  31.  
  32. document.querySelector(element).insertAdjacentHTML("afterbegin", `<section><header><h3>Total</h3></header><section class="text-content"><ul><li><b>Script posts${SignedIN}</b>: ${ScriptsArray.length}</li><li><b>Daily installs</b>: ${DailyTotal.toLocaleString()}</li><li><b>Total installs</b>: ${TotalInstalls.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>: ${LatestCreated}</li><li><b>Latest updated</b>: ${LatestUpdated}</li></ul></section></section>`); //Add the information on the page
  33. document.querySelector(".list-option").innerHTML += `<span>(${DailyTotal.toLocaleString()})</span>`; //Add the Dailytotal number on the sidebar
  34. document.querySelector(".list-option:nth-child(2)").innerHTML += `<span>(${TotalInstalls.toLocaleString()})</span>`; //Add the total number on the sidebar
  35. document.querySelector(".list-option:nth-child(3)").innerHTML += `<span>(${parseInt(ok+bad+good).toLocaleString()})</span>`; //Add the ratings number on the sidebar
  36. })();