diff --git a/collect-currency/save_fiat.js b/collect-currency/save_fiat.js index c34d64c..5b71930 100644 --- a/collect-currency/save_fiat.js +++ b/collect-currency/save_fiat.js @@ -13,40 +13,38 @@ async function save_fiat() { config['currency']['fiat'].forEach( (value) => config['currency']['fiat'].forEach(async (pair) => { if(value === pair) return; - const res = await axios.get( + await axios.get( `https://duckduckgo.com/js/spice/currency/1/${value}/${pair}`, { timeout: 3000, - }); + }).then(async (res) => { + const regExp = new RegExp('\\(\\s*(.*)\\s*\\);$', 'mg'); + const data = JSON.parse(Array.from(res.data.matchAll(regExp))[0][1]); - const regExp = new RegExp('\\(\\s*(.*)\\s*\\);$', 'mg'); - const data = JSON.parse(Array.from(res.data.matchAll(regExp))[0][1]); + delete data['terms']; + delete data['privacy']; - delete data['terms']; - delete data['privacy']; + logger.debug(JSON.stringify(data)); - logger.debug(JSON.stringify(data)); + const point = data['to'][0]['mid'].toString().indexOf('.') + 4; - if (res.status !== 200) { - logger.error(`DuckDuckGo ended with the status ${res.status}`); - return; - } + const db = await pool.query('SELECT * FROM currency WHERE ' + + 'from_currency = $1 AND conv_currency = $2 AND date = $3', + [ value, pair, new Date(data['timestamp']).toLocaleDateString() ]); - const point = data['to'][0]['mid'].toString().indexOf('.') + 4; - - pool.query('SELECT * FROM currency WHERE from_currency = $1 AND conv_currency = $2 AND date = $3', - [ value, pair, new Date(data['timestamp']).toLocaleDateString() ] - ).then(async (db) => { - if (db['rows'][0]) return; - - await pool.query(`INSERT INTO currency (from_currency, conv_currency, rate, date) VALUES ($1, $2, $3, $4)`, - [ - value, - pair, - data['to'][0]['mid'].toString().slice(0, point), - new Date(data['timestamp']).toLocaleDateString() - ]); + if (db['rows'][0]) return; + await pool.query(`INSERT INTO currency (from_currency, conv_currency, rate, date) VALUES ($1, $2, $3, $4)`, + [ + value, + pair, + data['to'][0]['mid'].toString().slice(0, point), + new Date(data['timestamp']).toLocaleDateString() + ]); + }).catch((err) => { + logger.error(err) + setTimeout(save_fiat, err.config.timeout); }); + }) ); }