Files
purple-explorer/lib/markets/ccex.js
T
2019-05-27 10:33:22 -07:00

137 lines
5.1 KiB
JavaScript

var request = require('request');
var base_url = 'https://c-cex.com/t/';
var d1 = new Date();
var d2 = new Date();
d1.setDate(d1.getDate() - 2);
function pad(x) {
if (x < 10) return "0" + x;
return x;
}
function toTimestamp(strDate) {
var datum = Date.parse(strDate);
return datum / 1000;
}
function formatdate(date1) {
var formatted = (date1.getUTCFullYear()) + '-' + pad((date1.getUTCMonth() + 1)) + '-' + pad(date1.getUTCDate());
return formatted;
}
function sleep9s() {
var start = new Date().getTime();
for (var i = 0; i < 1e9; i++) {
if ((new Date().getTime() - start) > 59000) {
break;
}
}
}
function get_summary(coin, exchange, cb) {
var summary = {};
sleep9s;
request({ uri: base_url + 's.html?a=volume&h=24&pair=' + coin + '-' + exchange, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) {
if (error) {
return cb(error, null);
} else if (body.return != undefined) {
var i = body.return.length - 1
summary['volume'] = body.return[i]['volume_' + coin].toFixed(8);
summary['volume_btc'] = body.return[i]['volume_' + exchange].toFixed(8);
sleep9s;
request({ uri: base_url + '/' + coin + '-' + exchange + '.json', json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) {
if (error) {
return cb(error, null);
} else if (body != undefined) {
summary['bid'] = body.ticker['buy'].toFixed(8);
summary['ask'] = body.ticker['sell'].toFixed(8);
summary['high'] = body.ticker['high'].toFixed(8);
summary['low'] = body.ticker['low'].toFixed(8);
summary['last'] = body.ticker['lastprice'].toFixed(8);
return cb(null, summary);
} else {
return cb(error, null);
}
});
} else {
return cb(error, null);
}
});
}
function get_trades(coin, exchange, cb) {
var req_url = base_url + 's.html?a=tradehistory&d1=' + formatdate(d1) + '&d2=' + formatdate(d2) + '&pair=' + coin + '-' + exchange;
sleep9s;
request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) {
if (body.return != undefined) {
var tTrades = body.return;
var trades = [];
if (tTrades == "No trade history for this period") {
return cb(tTrades, null);
} else {
for (var i = 0; i < tTrades.length; i++) {
var Trade = {
ordertype: tTrades[i].type,
amount: parseFloat(tTrades[i].amount).toFixed(8),
price: parseFloat(tTrades[i].rate).toFixed(8),
total: (parseFloat(tTrades[i].amount).toFixed(8) * parseFloat(tTrades[i].rate)).toFixed(8),
datetime: tTrades[i].datetime,
timestamp: toTimestamp(tTrades[i].datetime + 'Z'),
backrate: tTrades[i].backrate
}
trades.push(Trade);
}
}
return cb(null, trades);
} else {
return cb(body.message, null);
}
});
}
function get_orders(coin, exchange, ccex_key, cb) {
var req_url = base_url + 'r.html?key=' + ccex_key + '&a=orderlist&self=0&pair=' + coin + '-' + exchange;
sleep9s;
request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) {
if (body != undefined) {
var orders = body;
orders.Data = body['return'];
var buys = [];
var sells = [];
for (Data in orders.Data) {
var order = {
otype: orders.Data[Data].type,
amount: parseFloat(orders.Data[Data].amount.toFixed(8)),
price: parseFloat(orders.Data[Data].price).toFixed(8),
total: (parseFloat(orders.Data[Data].amount) * parseFloat(orders.Data[Data].price)).toFixed(8)
}
if (order.otype == 'buy') {
buys.push(order);
} else {
sells.push(order);
}
}
return cb(null, buys, sells);
} else {
return cb(body.message, [], [])
}
});
}
module.exports = {
get_data: function (coin, exchange, ccex_key, cb) {
var error = null;
get_orders(coin, exchange, ccex_key, function (err, buys, sells) {
if (err) { error = err; }
get_trades(coin, exchange, function (err, trades) {
if (err) { error = err; }
get_summary(coin, exchange, function (err, stats) {
if (err) { error = err; }
return cb(error, { buys: buys, sells: sells, chartdata: [], trades: trades, stats: stats });
});
});
});
}
};