Skip to content

Instantly share code, notes, and snippets.

@MihanEntalpo
Last active March 24, 2018 11:47
Show Gist options
  • Save MihanEntalpo/037ed67a5dcba7a4f89bed2a33196d02 to your computer and use it in GitHub Desktop.
Save MihanEntalpo/037ed67a5dcba7a4f89bed2a33196d02 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name CryptoTable
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://bitinfocharts.com/ru/markets/
// @grant none
// @run-at document-idle
// ==/UserScript==
(function() {
'use strict';
var currencies = {
"BTC": "Bitcoin",
"ETH": "Ethereum",
"ETC": "Ethereum Classic",
"ZEC": "Zcash",
"BCH": "Bitcoin Cash",
"BCC": "Bitcoin Cash",
"BTG": "Bitcoin Gold",
"DASH": "Dash",
"NEO": "NEO",
"LTC": "Litecoin",
"XMR": "Monero",
"OMG": "Omise-go"
};
var currencies_set = {
"BTC": false,
"ETH": false,
"ETC": false,
"ZEC": false,
"BCH": false,
"BCC": false,
"BTG": false,
"DASH": false,
"NEO": false,
"LTC": false,
"XMR": false,
"OMG": false
};
var markets = {
"bittrex": "Bittrex",
"hitbtc": "HitBTC",
"yobit": "YoBit"
};
var data = {};
var minmax = {};
function prepare() {
$('table#t1 tr').each(function(i, el) {
var cur = $($(el).find("td:eq(1)")).data("val");
if (!(cur in currencies))
{
$(el).remove();
}
});
$('body').append("<div id='sub-tables'></div>");
$('table#t1 tr').each(function(index,el){
$("#sub-tables").append($(el).data("content")); $(el).popover("destroy");
$('#sub-tables table tr').each(function(i, el){
var market = $(el).find("td:eq(1)").text();
if (!(market in markets))
{
$(el).remove();
}
else
{
var pair = $(el).find("td:eq(0)").text();
var second=pair.split("/")[1];
if (!(second in {"USD":"$", "EUR":"Euro", "USDT":"T$"}))
{
$(el).remove();
}
}
});
});
}
function read_data()
{
data = {};
minmax = {};
for (var cur in currencies) {
data[cur] = {};
currencies_set[cur] = false;
for (var market in markets) {
data[cur][market] = {
"buy": {"USD":0, "EUR":0},
"sell": {"USD":0, "EUR":0}
};
}
}
$('#sub-tables table tr').each(
function(i, el)
{
var pair = $(el).find("td:eq(0)").text();
var currency =pair.split("/")[0];
var money=pair.split("/")[1];
if (money == "USDT") money = "USD";
if (currency == "BCC") currency = "BCH";
var market = $(el).find("td:eq(1)").text();
var buy=parseFloat($(el).find("td:eq(3)").text().replace(",", "").replace(/USD|RUR|EUR/, ""));
var sell=parseFloat($(el).find("td:eq(4)").text().replace(",", "").replace(/USD|RUR|EUR/, ""));
if (currency in currencies && market in markets)
{
data[currency][market].buy[money] = buy;
data[currency][market].sell[money] = sell;
if (buy || sell)
{
currencies_set[currency] = true;
}
}
}
);
$('#sub-tables').remove();
console.log(data);
}
function show_data(){
console.log(data);
if ($("#data-window").length == 0)
{
$('body').append("<div id='data-window' style='z-index:9000;position:absolute; left:0px; top:0px; width:100%; height:100%; background-color:rgba(255,255,255,192);text-align:center;'></div>");
}
var c = "<style>table#cdata td { border:1px solid black; padding:5px; } table#cdata {position:relative; left:50%; margin-left:-250px;}</style>";
c += "<div id='reloader' style='visibility:hidden;color:#dd0000;'>Перезагрузка данных...</div><table id='cdata'><tr><td rowspan=2>КриптоВалюта</td><td colspan='" + Object.keys(markets).length + "'>Биржи</td></tr>";
c += "<tr>";
for (var market in markets)
{
c += "<td>" + markets[market] + "</td>";
}
c += "</tr>";
for (var currency in currencies)
{
if (!currencies_set[currency]) continue;
c += "<tr><td rowspan=2>" + currencies[currency] + "</td>";
var max_buy = 0;
var min_buy = 999999;
var max_buy_market = "";
var min_buy_market = "";
var max_sell = 0;
var min_sell = 999999;
var max_sell_market = "";
var min_sell_market = "";
for (market in markets)
{
if (data[currency][market].buy.USD > max_buy)
{
max_buy = data[currency][market].buy.USD;
max_buy_market = market;
}
if (data[currency][market].buy.USD < min_buy && data[currency][market].buy.USD)
{
min_buy = data[currency][market].buy.USD;
min_buy_market = market;
}
if (data[currency][market].sell.USD > max_sell)
{
max_sell = data[currency][market].sell.USD;
max_sell_market = market;
}
if (data[currency][market].sell.USD < min_sell && data[currency][market].sell.USD)
{
min_sell = data[currency][market].sell.USD;
min_sell_market = market;
}
}
for (market in markets)
{
c += "<td>BUY:";
for (var cur in data[currency][market].buy)
{
if (data[currency][market].buy[cur])
{
var color=(market == max_buy_market) ? "green" : (market == min_buy_market ? "red":"black");
c += "<span style='color:" + color + "'>" + data[currency][market].buy[cur] + " " + cur + ", </span>";
}
}
}
c += "</tr><tr>";
for (market in markets)
{
c += "<td>SELL:";
for (cur in data[currency][market].sell)
{
if (data[currency][market].sell[cur])
{
var color=(market == max_sell_market) ? "green" : (market == min_sell_market ? "red":"black");
c += "<span style='color:" + color + "'>" + data[currency][market].sell[cur] + " " + cur + ", </span>";
}
}
c += "</td>";
}
c += "</tr>";
}
c += "</table>";
$("#data-window").html(c);
}
function appendHtml(el, str) {
var div = document.createElement('div');
div.innerHTML = str;
while (div.children.length > 0) {
el.appendChild(div.children[0]);
}
}
var html = "<div id='first-loader' style='z-index:9000;position:fixed; left:0px; top:0px; width:100%; height:100%; padding-top:150px; background-color:#FFFFFFFF;text-align:center;'>Первичная загрузка...</div>";
appendHtml(document.body, html);
function load_courses(filename, callback){
$.getJSON(filename, function(data) {
$.each(data, function(key, val) {
if (document.getElementById("tr_" + key)) {
$("#tr_" + key).data("content", data['table_header'] + val);
}
});
callback();
});
}
function reloadPage(){
$('#reloader').css("visibility", "visible");
$.get(document.location.href, function(result) {
var begin = result.search(/<div[^>]*?id='markets_container'>/);
var end = result.search(/<div[^>]*?><small>[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/);
var content = result.substr(begin, end-begin);
$('#markets_container').replaceWith(content);
$('#sub-tables').remove();
var match = /\$\.getJSON\ *\(\ *"([^"]+)",/.exec(result);
var filename = match[1];
load_courses(filename, function(){
setTimeout(function(){
prepare();
read_data();
show_data();
$('#reloader').css("visibility", "hidden");
setTimeout(function() {
reloadPage();
}, 30000);
},2000);
});
});
}
$(function(){
setTimeout(function() {
prepare();
$("#first-loader").remove();
read_data();
console.log(data);
show_data();
}, 2000);
setTimeout(function() {
reloadPage();
}, 10000);
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment