您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds game date for highscores
- // ==UserScript==
- // @name GeoGuessr Highscore Date mockup
- // @description Adds game date for highscores
- // @version 0.1
- // @author Tyow#3742
- // @match *://*.geoguessr.com/*
- // @license MIT
- // @namespace https://greasyfork.org/users/1011193
- // @grant GM_addStyle
- // @grant GM_setValue
- // @grant GM_getValue
- // ==/UserScript==
- // Function to fetch game data from the API and extract the start date
- async function fetchGameDate(gameId) {
- const url = `https://www.geoguessr.com/api/v3/games/${gameId}`;
- try {
- const response = await fetch(url);
- // If the response is successful
- if (response.ok) {
- const gameData = await response.json();
- // Extract the startTime of the first round
- const startTime = gameData.rounds[0].startTime;
- // Convert the startTime to a Date object and format it as yyyy-mm-dd
- const date = new Date(startTime).toISOString().split('T')[0];
- return date;
- } else {
- console.error(`Error fetching game data: ${response.status}`);
- }
- } catch (error) {
- console.error(`Error: ${error}`);
- }
- return null; // Return null if there is an error
- }
- const fetchIds = async () => {
- // Select all the rows
- const rows = document.querySelectorAll('[class^="table_tr__"]');
- // Loop through each row and extract the gameid
- rows.forEach(async row => {
- // Find the link element within the row
- if (!row.classList.contains('highscoredate')) {
- const resultLink = row.querySelector('a[title="View results"]');
- // Extract the href attribute
- if (resultLink) {
- const href = resultLink.getAttribute('href');
- // Use a regular expression to match and extract the gameid
- const gameIdMatch = href.match(/\/results\/([a-zA-Z0-9]+)/);
- if (gameIdMatch && gameIdMatch[1]) {
- row.classList.add('highscoredate')
- const gameId = gameIdMatch[1];
- const gameDate = await fetchGameDate(gameId);
- if (gameDate) {
- // Create a new td element
- const newTd = document.createElement('td');
- // Add the same classes as the other td elements in the row
- newTd.classList.add(
- 'table_td__Z9pLI',
- 'table_textAlignLeft__8vcyr',
- 'table_noWrap__L4__t',
- 'map-highscore_colBody__Jp0zE'
- );
- // Set the text content to the extracted date
- newTd.textContent = gameDate;
- // Append the new td to the current row
- row.appendChild(newTd);
- }
- }
- }}});
- }
- new MutationObserver(async (mutations) => {
- fetchIds()
- }).observe(document.body, { subtree: true, childList: true });