NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name sc-wikihoops // @version 1.0.2 // @description Add wikihoops scores to sportscult.org // @author greenbeanyum // @updateURL https://openuserjs.org/meta/greenbeanyum/sc-wikihoops.meta.js // @downloadURL https://openuserjs.org/install/greenbeanyum/sc-wikihoops.user.js // @license GPL-3.0-or-later // @match https://sportscult.org/index.php?page=torrent-details&id=* // @icon https://www.google.com/s2/favicons?sz=64&domain=sportscult.org // @grant none // ==/UserScript== // ==OpenUserJS== // @author greenbeanyum // ==/OpenUserJS== const wikiHoopsHTML = document.createElement('tr') wikiHoopsHTML.innerHTML = ` <td align="right" class="header" valign="top">Wikihoops</td> <td class="red lista wikihoops" align="center" style="text-align:left;" valign="top">loading</td> ` function injectFrame() { const contentSelector = document.querySelector(".b-content>div>table>tbody") contentSelector.prepend(wikiHoopsHTML) } let torrentName = "" const regexDate = /\s(\d{2}\s\d{2})|\s(\d{2}\/\d{2})/g // This will match the 2 digits followed by a space or a slash. 23 03 or 23/03 const regexTeam = /(\d{4}\s)(\w.*)\svs/ // This will match the 4 digits followed by a space and the team name. 2024 Memphis Grizzlies vs -> Memphis Grizzlies const regexValidGame = /NBA.*202/ // This will match titles that start with NBA (anything, e.g. playin, playoffs) 202(0,1,2,3,4) let gameInfo = { "date": "", "team": "", "city": "", } const parseName = (name) => { const cities = ["los", "san", "new", "city"] // Extract date from name const date = name.match(regexDate)[0].trim() // Extract team name and city from name let team = name.match(regexTeam)[2].trim() let city = "" for (const c of cities) { if (team.toLowerCase().includes(c)) { const splitTeam = team.split(" ") city = splitTeam.slice(0, 2).join(" ") team = splitTeam[2] break; } } if (!city) { const splitTeam = team.split(" ") city = splitTeam[0] team = splitTeam[1] } // Update gameInfo object gameInfo.date = date gameInfo.team = team gameInfo.city = city // Fetch data fetchWikiHoops() } // parse fetched html const getGame = (doc, team, city, wikiUrl) => { const games = doc.querySelectorAll("section article") for (const game of games) { let homeTeam = game.querySelector(".home-team .team-name").innerText let awayTeam = game.querySelector(".away-team .team-name").innerText let homeCity = game.querySelector(".home-team .team-city").innerText let awayCity = game.querySelector(".away-team .team-city").innerText let teams = [homeTeam.toLowerCase(), awayTeam.toLowerCase(), homeCity.toLowerCase(), awayCity.toLowerCase()] let userScore = game.querySelector(".rating-value").innerText let userPct = game.querySelector(".upvotes-pct").innerText let userVotes = game.querySelector(".upvotes-total").innerText let downVotes = game.querySelector(".downvotes-total").innerText if (teams.includes(team.toLowerCase()) || teams.includes(city.toLowerCase())) { let wikihoops = document.querySelector(".lista.wikihoops") if (parseInt(userScore) >= 8 && parseInt(userScore) < 15) { wikihoops.classList.remove("red") wikihoops.classList.add("yellow") } else if (parseInt(userScore) >= 15) { wikihoops.classList.remove("red") wikihoops.classList.add("green") } wikihoops.innerText = `` wikihoops.innerHTML += ` <a href="${wikiUrl}" target="_blank">Score: ${userScore} Percentage: ${userPct} Total Upvotes: ${userVotes} Total Downvotes: ${downVotes}</a>` break; } } } // fetch date on wikihoops function fetchWikiHoops() { let day = gameInfo.date.split(" ")[0] let month = gameInfo.date.split(" ")[1] let team = gameInfo.team let city = gameInfo.city const wikiUrl = `https://wikihoops.com/games/2024-${month}-${day}/` const url = 'https://corsproxy.io/?' + encodeURIComponent(wikiUrl); fetch(url) .then(function (response) { return response.text() }) .then(function (html) { var parser = new DOMParser(); var doc = parser.parseFromString(html, "text/html"); let games = doc.querySelector("article.scoreboard") getGame(games, team, city, wikiUrl) }) .catch(function (err) { console.log('Failed to fetch page: ', err); }); } var c = document.querySelectorAll('.b-content tbody tr'); if (c) { for (const row of c) { let text = row.innerText if (text.includes("NBA G")) { break; } if (regexValidGame.test(text)) { injectFrame() torrentName = text parseName(torrentName) break; } } }