При загрузке страницы скрипт ломится отдельным окном (т.к. запрещены прямые кроссдоменные запросы) на коинмаркеткап, забирает там прайсы искомых монет и передаёт через переменные тамперманки в основной поток скрипта на странице биржи.
Теперь данные будут актуальные и не придётся обновлять их вручную:
https://pastebin.com/5NQejBgv
Code:
// ==UserScript==
// @name OTUPS
// @namespace OpenTrade USD Price Shower
// @version 0.9
// @description Show USD price
// @author DEMENTOR
// @icon https://marycoin.net/images/logo.png
// @match https://trade.multicoins.org/
// @match https://api.coinmarketcap.com/v2/*
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_listValues
// @grant GM_deleteValue
// ==/UserScript==
(function() {
'use strict';
var ARR_Pairs = ["BTC", "LTC", "BCH", "DASH", "DOGE"];
var ARR_USD = [6455, 96, 852, 257, 0.002894];
var MC_ARR = ["", "", "", "", ""];
var MC_ARR_USD = [0, 0, 0, 0, 0];
var response;
var api_array = ["", "", "", "", ""];
/*
var myPrefs = GM_listValues(); // myPrefs is now ["a", "b", "c"]
for (var i=0; i < myPrefs.length; i++) {
console.log(myPrefs[i] + " is: " + GM_getValue(myPrefs[i]));
}
*/
if (window.location.href == "https://trade.multicoins.org/"){
window.open("https://api.coinmarketcap.com/v2/ticker/", "_blank", "");
setInterval(function(){
ARR_USD[0] = GM_getValue("BTC", "0");
ARR_USD[1] = GM_getValue("LTC", "0");
ARR_USD[2] = GM_getValue("BCH", "0");
ARR_USD[3] = GM_getValue("DASH", "0");
ARR_USD[4] = GM_getValue("DOGE", "0");
insertPrices();
},500);
function insertPrices(){
// test
for (var i = 0; i < ARR_USD.length; i++){
MC_ARR[i] = $('#table-market tr:contains("' + ARR_Pairs[i] + '") td:eq(1)').text();
MC_ARR_USD[i] = ARR_USD[i]/MC_ARR[i];
$('#table-market tr:contains("' + ARR_Pairs[i] + '") td:eq(0)').html(ARR_Pairs[i] + ' (' + MC_ARR_USD[i].toFixed(5) + ')');
}
}
}
if (window.location.href.split('=')[0] == "https://api.coinmarketcap.com/v2/ticker/1/?convert"){
var currency = window.location.href.split('=')[1];
response = document.getElementsByTagName('pre')[0].innerHTML;
api_array = JSON.parse(response);
var price = api_array.data.quotes.USD.price;
GM_setValue(currency, price);
console.log("List: " + GM_listValues());
console.log(currency + ": " + GM_getValue(currency, '0'));
}
if (window.location.href == "https://api.coinmarketcap.com/v2/ticker/"){
response = document.getElementsByTagName('pre')[0].innerHTML;
api_array = JSON.parse(response);
//BTC
GM_setValue("BTC", api_array.data[1].quotes.USD.price);
//LTC
GM_setValue("LTC", api_array.data[2].quotes.USD.price);
//BCH
GM_setValue("BCH", api_array.data[1831].quotes.USD.price);
//DASH
GM_setValue("DASH", api_array.data[131].quotes.USD.price);
//DOGE
GM_setValue("DOGE", api_array.data[74].quotes.USD.price);
//Logs
//console.log(api_array.data[1].quotes.USD.price);
//console.log(api_array);
//console.log("List: " + GM_listValues());
/*
var myPrefs = GM_listValues(); // myPrefs is now ["a", "b", "c"]
for (var i=0; i < myPrefs.length; i++) {
console.log(myPrefs[i] + " is: " + GM_getValue(myPrefs[i]));
}
*/
//Close
window.close();
}
})();
PS: к сожалению, у тех, кто пользуется адблоком, в консоли будет высвечиваться ошибка, которая никак не влияет на работоспособность скрипта. Погуглив, обнаружил, что разрабам адблока уже сделан реквест на исправление бага. Думаю, можно проигнорировать поэтому =)
Всё тестировалось в хроме