您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
查询不同区域的Fanatical游戏/慈善包的价格
当前为
// ==UserScript== // @name Fanatical Price Checker // @name:zh-CN Fanatical 跨区价格查询 // @name:zh-TW Fanatical 跨區價格查詢 // @namespace https://www.fanatical.com/ // @version 0.2 // @description Check the price of different regions for Fanatical. // @description:zh-CN 查询不同区域的Fanatical游戏/慈善包的价格 // @description:zh-TW 查詢不同區域的Fanatical遊戲/慈善包的價格 // @icon https://cdn.fanatical.com/production/icons/android-chrome-192x192.png // @author Thesharing // @include /^https?://www\.fanatical\.com/en/bundle/.+$ // @include /^https?://www\.fanatical\.com/en/game/.+$ // @grant GM_xmlhttpRequest // @run-at document-idle // ==/UserScript== var totalNum = 0; var priceList = []; var regionList = ["USD", "CAD", "EUR", "GBP"]; var curList = {}; var urlType = document.URL.split('/')[4]; (function () { 'use strict'; var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; var target = document.querySelector('#root'); var config = { attributes: true, childList: true, characterData: true }; var subObserver = new MutationObserver(function (mutations, me) { var a = document.getElementsByClassName('product-commerce-container'); if (a.length > 0) { addButton(a[0]); me.disconnect(); } }); var observer = new MutationObserver(function (mutations, me) { var content = document.querySelector('.content'); if (content) { subObserver.observe(content, config); me.disconnect(); } }); observer.observe(target, config); })(); function addButton(a) { var b = document.createElement('div'); b.className = 'col-12 col-md-6 col-lg-12'; a.appendChild(b); var c = document.createElement('div'); c.className = 'p-3 pl-md-1 pl-lg-3 card-block'; c.id = 'checkPrice'; b.appendChild(c); var d = document.createElement('button'); d.className = 'mt-3 cart-btn btn btn-primary btn-lg btn-block'; d.id = 'checkPriceButton'; d.onclick = checkPrice; e = document.createElement('b'); e.id = 'checkPriceButtonText'; e.appendChild(document.createTextNode('Check Price')); d.appendChild(e); c.appendChild(d); f = document.createElement('div'); f.id = 'checkPriceList'; f.className = 'mt-3'; c.appendChild(f); } function checkPrice() { var buttonText = document.getElementById('checkPriceButtonText'); buttonText.innerText = 'Checking Price...'; if (urlType == 'bundle') { var bundleName = document.URL.split('/')[5]; GM_xmlhttpRequest({ method: "GET", url: "https://api.fanatical.com/api/products/" + bundleName, onload: function (response) { var bundleData = JSON.parse(response.responseText); priceList.length = 0; for (var i = 0; i < bundleData.bundles.length; i++) { var bundlePrice = {}; for (var j = 0; j < regionList.length; j++) { var priceItem = { 'price': bundleData.bundles[i].price[regionList[j]] / 100, 'CNY': 0 }; bundlePrice[regionList[j]] = priceItem; } priceList.push(bundlePrice); } fetchCurrency(buttonText); } }); } else if (urlType == 'game') { var gameName = document.URL.split('/')[5]; GM_xmlhttpRequest({ method: "GET", url: "https://api.fanatical.com/api/products/" + gameName, onload: function (response) { var gameData = JSON.parse(response.responseText); priceList.length = 0; gamePrice = {}; for (var i = 0; i < regionList.length; i++) { var priceItem = { 'price': gameData.price[regionList[i]] / 100, 'CNY': 0 }; gamePrice[regionList[i]] = priceItem; } priceList.push(gamePrice); fetchCurrency(buttonText); } }); } } function fetchCurrency(buttonText) { for (var k = 0; k < regionList.length; k++) { GM_xmlhttpRequest({ method: "GET", url: "https://finance.google.cn/finance/converter?a=1&from=" + regionList[k] + "&to=CNY", context: { 'region': regionList[k], }, onload: function (response) { var responseDocument = new DOMParser().parseFromString(response.responseText, "text/html"); var result = responseDocument.getElementById('currency_converter_result').innerText; curList[response.context.region] = extractCurrency(result); if (Object.keys(curList).length >= regionList.length) { buttonText.innerText = 'Finished!'; if (urlType == 'bundle') { displayBundleResult(); } else if (urlType == 'game') { displayGameResult(); } } } }); } } function extractCurrency(str) { return parseFloat(str.trim().split(' ')[3]); } function displayBundleResult() { var cheapList = []; for (var i = 0; i < priceList.length; i++) { var cheapPrice = 10000.0; var cheapRegion = 'USD'; for (var j = 0; j < regionList.length; j++) { var priceItem = priceList[i][regionList[j]]; priceItem.CNY = (curList[regionList[j]] * priceItem.price); if (priceItem.CNY < cheapPrice) { cheapPrice = priceItem.CNY; cheapRegion = regionList[j]; } } cheapList.push(cheapRegion); } // RENDER var c = document.getElementById('checkPriceList'); while (c.firstChild) { c.removeChild(c.firstChild); } for (var k = 0; k < priceList.length; k++) { var container = document.createElement('div'); c.appendChild(container); var titleText = document.createElement('b'); titleText.appendChild(document.createTextNode('Tier ' + (k + 1).toString())); var title = document.createElement('h4'); title.appendChild(titleText); container.appendChild(title); for (var l = 0; l < regionList.length; l++) { var priceText; if (regionList[l] == cheapList[k]) { priceText = document.createElement('b'); } else { priceText = document.createElement('span'); } var priceValue = priceList[k][regionList[l]]; priceText.appendChild(document.createTextNode(priceValue.price.toFixed(2) + ' ' + regionList[l] + ' = ' + priceValue.CNY.toFixed(2) + ' CNY')); container.appendChild(priceText); container.appendChild(document.createElement('br')); } } } function displayGameResult() { var cheapPrice = 10000.0; var cheapRegion = 'USD'; for (var j = 0; j < regionList.length; j++) { var priceItem = priceList[0][regionList[j]]; priceItem.CNY = (curList[regionList[j]] * priceItem.price); if (priceItem.CNY < cheapPrice) { cheapPrice = priceItem.CNY; cheapRegion = regionList[j]; } } // RENDER var c = document.getElementById('checkPriceList'); while (c.firstChild) { c.removeChild(c.firstChild); } var container = document.createElement('div'); c.appendChild(container); for (var l = 0; l < regionList.length; l++) { var priceText; if (regionList[l] == cheapRegion) { priceText = document.createElement('b'); } else { priceText = document.createElement('span'); } var priceValue = priceList[0][regionList[l]]; priceText.appendChild(document.createTextNode(priceValue.price.toFixed(2) + ' ' + regionList[l] + ' = ' + priceValue.CNY.toFixed(2) + ' CNY')); container.appendChild(priceText); container.appendChild(document.createElement('br')); } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址