Results 1 to 2 of 2

Thread: Цена на MC в USD с автоподгрузкой данных коинмаркеткапа [userscript]

  1. #1
    Новичок
    Join Date
    Jun 2018
    Posts
    19

    Лампочка Цена на MC в USD с автоподгрузкой данных коинмаркеткапа [userscript]

    При загрузке страницы скрипт ломится отдельным окном (т.к. запрещены прямые кроссдоменные запросы) на коинмаркеткап, забирает там прайсы искомых монет и передаёт через переменные тамперманки в основной поток скрипта на странице биржи.

    Теперь данные будут актуальные и не придётся обновлять их вручную:
    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: к сожалению, у тех, кто пользуется адблоком, в консоли будет высвечиваться ошибка, которая никак не влияет на работоспособность скрипта. Погуглив, обнаружил, что разрабам адблока уже сделан реквест на исправление бага. Думаю, можно проигнорировать поэтому =)

    Всё тестировалось в хроме

  2. #2
    Новичок
    Join Date
    Jun 2018
    Posts
    19

    update

    upd:
    Code:
    // ==UserScript==
    // @name         OTUPS
    // @namespace    OpenTrade USD Price Shower
    // @version      0.91
    // @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 = ["", "", "", "", ""];
    
        if (window.location.href == "https://trade.multicoins.org/"){
            $('.card-header:contains("Market")').html('Market <a href="" onclick="window.open(\'https://api.coinmarketcap.com/v2/ticker/\', \'_blank\', \'\')">↻</a>');
    
            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);
    
            //Close
            window.close();
        }
    
    })();
    Убрал автозаход на коинмаркеткап при загрузке страницы и добавил аккуратную ссылочку (↻) в блоке Market, которая обновляет данные по требованию.
    Last edited by DEMENTOR; 06-22-2018 at 12:23 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •