Greasy Fork

Greasy Fork is available in English.

Steam Price Exchanger

Exchange price on steam

当前为 2020-09-03 提交的版本,查看 最新版本

// ==UserScript==
// @name         Steam Price Exchanger
// @version      0.3
// @description  Exchange price on steam
// @author       lzt
// @match        https://store.steampowered.com/*
// @grant        GM_xmlhttpRequest
// @grant 		 GM_setValue
// @grant 		 GM_getValue
// @grant		 unsafeWindow
// @grant		 window
// @connect      esapi.isthereanydeal.com
// @namespace http://tampermonkey.net/
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...

    var style = document.createElement("style");
	style.type = "text/css";
	var text = document.createTextNode(".tab_item_discount {width: 180px;}");
	style.appendChild(text);
	var head = document.getElementsByTagName("head")[0];
	head.appendChild(style);

	console.log(GM_getValue("timestamp"))
	if (GM_getValue("timestamp") == undefined) {GM_setValue("timestamp", 0);console.log('set timestamp to 0')};
    unsafeWindow.rub = {'rate': GM_getValue("rub"), 'lock': 0};
    unsafeWindow.ars = {'rate': GM_getValue("ars"), 'lock': 0};

    function initobserver (rate, unit) {
	    var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
	    var target = document.body;
	    var observer = new MutationObserver(function(mutations) {  
			mutations.forEach(function(mutation) {
				window.fillprice(rate, unit, 500)
				}); 
			}); 
	    var config = { attributes: true, childList: true, characterData: true, subtree: true}
	    observer.observe(target, config);
	}

    window.fillprice = function (rate, unit, delay){
    	if (rate['lock'] == 1) {return -1};
    	rate['lock'] = 1;
        var lists = document.evaluate("//*[contains(text(), '" + unit + "')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
        var re = new RegExp(unit == "ARS"?"ARS\\$?\\s*[0-9.,]+":"[0-9.,]+\\s*pуб.?", "ig");
        for(var i = 0; i < lists.snapshotLength; i++) {
        	var item = lists.snapshotItem(i)
            if (item.firstChild.nodeValue == null) {continue};
            if (item.firstChild.nodeValue.search("¥") != -1) {continue};
            if (item.classList.contains("es-regprice") & item.classList.contains("es-flag")) {continue};
            if (item.parentNode.classList.contains("es-flag--cn")) {continue};
            var s = item.firstChild.nodeValue.match(re)
            if (s != null) {
                for(var j = 0; j < s.length; j++) {
                    var price = s[j].replace(".", "");
                    price = price.replace(",", ".");
                    price = "¥" + parseInt(parseFloat(price.match(/[0-9.]+/))*rate['rate']).toString();
                    if ((item.classList.contains("col") & item.classList.contains("search_price")) | 
                    	item.nodeName == "STRIKE") {
                    	item.firstChild.nodeValue = item.firstChild.nodeValue.replace(s[j], s[j].replace(" ", "") + "(" + price + ")").trim();
                    }else {
                    	item.firstChild.nodeValue = item.firstChild.nodeValue.replace(s[j], s[j] + "(" + price + ")").trim()
                    }
                }
            }
        }
        lists = document.getElementsByClassName("col search_price discounted");
        for (var i = 0; i < lists.length; i++) {
        	if (lists[i].childNodes[3].nodeValue == null) {continue};
            if (lists[i].childNodes[3].nodeValue.search("¥") != -1) {continue};
            if (lists[i].childNodes[3].nodeValue.search(unit) == -1) {continue};
        	var price = lists[i].childNodes[3].nodeValue.replace(".", "");
        	price = price.replace(",", ".");
        	price = "¥" + parseInt(parseFloat(price.match(/[0-9.]+/))*rate['rate']).toString();
        	lists[i].childNodes[3].nodeValue = lists[i].childNodes[3].nodeValue.replace(" ", "").trim() + "(" + price + ")";
        }
        if (unit == "ARS") {setTimeout("window.ars['lock'] = 0", delay)}
        	else{setTimeout("window.rub['lock'] = 0", delay)} 
    }


    if ((new Date().getTime() - GM_getValue("timestamp")) >= 3600000 | 
    	typeof(unsafeWindow.rub) == undefined | 
    	typeof(unsafeWindow.ars) == undefined) {
    	console.log("update rates")
    	GM_xmlhttpRequest({
	        method: "get",
	        url: 'https://esapi.isthereanydeal.com/v01/rates/?to=CNY',
	        responseType: 'json',
	        onload: function(r) {
	            unsafeWindow.ars['rate'] = r.response['data']['ARS']['CNY'];
	            unsafeWindow.rub['rate'] =r.response['data']['RUB']['CNY'];
	            console.log(unsafeWindow.ars['rate'] + " ARS/CNY");
	            console.log(unsafeWindow.rub['rate'] + " RUB/CNY");
	            GM_setValue("rub", unsafeWindow.rub['rate']);
	            GM_setValue("ars", unsafeWindow.ars['rate']);
	            GM_setValue("timestamp", new Date().getTime());
            	window.fillprice(unsafeWindow.rub, 'pуб', 0);
			    window.fillprice(unsafeWindow.ars, 'ARS', 0);
			    initobserver(unsafeWindow.rub, 'pуб');
			    initobserver(unsafeWindow.ars, 'ARS');
	        }
    	});
    }else{
    	window.fillprice(unsafeWindow.rub, 'pуб', 50);
	    window.fillprice(unsafeWindow.ars, 'ARS', 50);
	    initobserver(unsafeWindow.rub, 'pуб');
	    initobserver(unsafeWindow.ars, 'ARS');
    }
    

})();