您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Counts the total downloads of all published releases in a Search Result and in Repository view.
// ==UserScript== // @name [New] GitHub Downloads Counter // @namespace https://greasyfork.org/users/1162863 // @version 1.0 // @description Counts the total downloads of all published releases in a Search Result and in Repository view. // @author Andrewblood // @match *://*.github.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=github.com // @grant GM_xmlhttpRequest // @connect api.github.com // @license Andrewblood // ==/UserScript== (function() { 'use strict'; // Here your Access Token if you have one const accessToken = ''; // 'ghp_your_access_token_here' setTimeout(function() { getRepoDownloads(); processSearchResults(); }, 1000 * 3); // Funktion zum Abrufen der Downloads über die GitHub API function getDownloads(repoPath, callback) { const apiUrl = `https://api.github.com/repos/${repoPath}/releases`; let totalDownloads = 0; // API-Anfrage senden GM_xmlhttpRequest({ method: "GET", url: apiUrl, headers: accessToken ? { 'Authorization': `token ${accessToken}` } : {}, // Token hinzufügen, falls vorhanden onload: function(res) { if (res.status === 200) { const releases = JSON.parse(res.responseText); // Downloads zählen releases.forEach(release => { release.assets.forEach(asset => { totalDownloads += asset.download_count || 0; // Zähle die Downloads }); }); // Rückgabe der Gesamtzahl der Downloads callback(totalDownloads); } else { console.error(`Error fetching downloads: ${res.status}`); // Fehlermeldung callback(0); // Rückgabe 0 bei Fehler } } }); } // Funktion zum Anzeigen der Gesamtzahl der Downloads für jedes Repository function displayTotalDownloads(repoElement, total) { const totalElement = document.createElement('div'); totalElement.textContent = `Total Downloads: ${total}`; // Anzeige der Gesamtzahl totalElement.style.marginTop = '5px'; totalElement.style.fontWeight = 'bold'; repoElement.appendChild(totalElement); } // Funktion zum Verarbeiten der Suchergebnisse function processSearchResults() { const repoElements = document.querySelectorAll('.Box-sc-g0xbh4-0.iwUbcA'); repoElements.forEach(repo => { const repoLink = repo.querySelector('.prc-Link-Link-85e08'); // Link zum Repository if (repoLink) { const repoPath = repoLink.href.replace('https://github.com/', ''); // Repository-Pfad // Downloads abrufen und anzeigen getDownloads(repoPath, function(totalDownloads) { displayTotalDownloads(repo, totalDownloads); // Gesamtzahl anzeigen }); } }); } // Funktion zum Abrufen der Downloads über die GitHub API function getRepoDownloads() { const header = document.querySelector('#repo-title-component'); const repoPath = window.location.pathname.replace('/releases', ''); const apiUrl = `https://api.github.com/repos${repoPath}/releases`; let totalDownloads = 0; if (header) { // API-Anfrage senden GM_xmlhttpRequest({ method: "GET", url: apiUrl, onload: function(res) { if (res.status === 200) { const releases = JSON.parse(res.responseText); // Downloads zählen releases.forEach(release => { release.assets.forEach(asset => { totalDownloads += asset.download_count || 0; // Zähle die Downloads }); }); const totalElement = document.createElement('div'); totalElement.textContent = `Total Downloads: ${totalDownloads}`; // Anzeige der Gesamtzahl totalElement.style.marginLeft = '10px'; header.appendChild(totalElement); } else { console.error(`Error: ${res.status}`); } } }); } } })();