64 lines
1.9 KiB
JavaScript
64 lines
1.9 KiB
JavaScript
const fetch = require("node-fetch");
|
|
var mysql = require('mysql');
|
|
var connection = mysql.createConnection({
|
|
host: 'localhost',
|
|
user: 'simcompanies',
|
|
password: '',
|
|
database: 'simcompanies'
|
|
});
|
|
|
|
const marketAPI = "https://www.simcompanies.com/api/v1/market-ticker/";
|
|
|
|
var date = new Date();
|
|
//don't ask me why, but simcompanies uses yesterday to get the values for today...
|
|
date.setDate(date.getDate() - 1);
|
|
|
|
const url = marketAPI + date.toISOString() + "/";
|
|
|
|
//function to get marketprices from API:
|
|
const getData = async url => {
|
|
var marketData = await fetch(url);
|
|
if (marketData.status === 200) {
|
|
marketData = await marketData.text();
|
|
marketData = await JSON.parse(marketData);
|
|
return marketData;
|
|
} else {
|
|
throw ("fetch returned status code " + marketData.status);
|
|
}
|
|
}
|
|
|
|
const storeData = async marketData => {
|
|
marketData = await marketData;
|
|
|
|
connection.beginTransaction(function (err) {
|
|
if (err) { throw err; }
|
|
|
|
for (var data in marketData) {
|
|
const kind = mysql.escape(marketData[data]["kind"]);
|
|
const price = mysql.escape(marketData[data]["price"]);
|
|
const storedate = `FROM_UNIXTIME(${Math.round(date.valueOf() / 1000)})`;
|
|
const querystring = `INSERT INTO market (kind,price,time) VALUES (${kind},${price},${storedate})`
|
|
connection.query(querystring, function (error, results, fields) {
|
|
if (error) {
|
|
return connection.rollback(function () {
|
|
throw error;
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
connection.commit(function (err) {
|
|
if (err) {
|
|
return connection.rollback(function () {
|
|
connection.end();
|
|
throw err;
|
|
});
|
|
} else {
|
|
connection.end();
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
storeData(getData(url));
|