mirror of
https://github.com/aljazceru/satshkd-vercel.git
synced 2025-12-16 20:54:23 +01:00
- Reduced historical data from 4,442 daily entries to 636 weekly entries - This improves chart rendering performance and ensures all data up to current date is displayed - Updated btcpoll.js to handle weekly data updates (updates same week or adds new week) - Added aggregate-weekly.js script for future data aggregation needs - Data now properly displays from 2013-09-15 to 2025-11-09
104 lines
3.2 KiB
JavaScript
104 lines
3.2 KiB
JavaScript
const fs = require('fs')
|
|
const axios = require('axios');
|
|
const moment = require('moment');
|
|
|
|
const path = require('path');
|
|
const dirPath = path.join(__dirname, ".");
|
|
const fileToWrite = dirPath + "/public/historical"
|
|
const fileToRead = dirPath + "/public/historical"
|
|
|
|
|
|
// get btc/usd and btc/eur daily rate
|
|
async function BTCDaily() {
|
|
let url = "https://api.coingecko.com/api/v3/coins/bitcoin/history?localization=false&date="
|
|
|
|
const yesterday = moment().subtract(1, 'days') // YYYY-MM-DD
|
|
const reverse = yesterday.format('DD-MM-YYYY')
|
|
|
|
// format is YYYY-MM-DD
|
|
const dbdate = yesterday.format('YYYY-MM-DD')
|
|
let full_url = url + reverse
|
|
let row = {}
|
|
//console.log("db date: ", dbdate)
|
|
//console.log("new date format: ", reverse, "\n")
|
|
|
|
await axios.get(full_url).then(
|
|
async function(response) {
|
|
// console.log("full url: ", full_url)
|
|
const data = await response.data;
|
|
const btcusd = data['market_data']['current_price']['usd']
|
|
const btceur = data['market_data']['current_price']['eur']
|
|
const satsrate = 100000000
|
|
const sateur = parseInt(satsrate / btceur)
|
|
const usdsat = parseInt(satsrate / btcusd)
|
|
|
|
row = {
|
|
btcusd_rate: parseInt(btcusd),
|
|
date: dbdate,
|
|
usdsat_rate: usdsat,
|
|
sateur_rate: sateur,
|
|
btceur_rate: parseFloat(btceur).toFixed(2),
|
|
}
|
|
console.log("row data: ", row)
|
|
})
|
|
return row
|
|
}
|
|
|
|
// Get the Monday of the week for a given date
|
|
function getWeekStart(date) {
|
|
const d = new Date(date);
|
|
const day = d.getDay();
|
|
const diff = d.getDate() - day + (day === 0 ? -6 : 1); // Adjust to Monday
|
|
d.setDate(diff);
|
|
d.setHours(0, 0, 0, 0);
|
|
return d.toISOString().split('T')[0];
|
|
}
|
|
|
|
// update file in the target github repo with weekly data
|
|
async function updateFile() {
|
|
const row = await BTCDaily()
|
|
//const row = []
|
|
|
|
if (Object.keys(row).length > 0) {
|
|
//console.log("dirpath", dirPath)
|
|
//console.log("dirname", __dirname)
|
|
const original = await fs.readFileSync(fileToRead)
|
|
let orig = JSON.parse(original)
|
|
|
|
const newWeekStart = getWeekStart(row.date);
|
|
const lastEntry = orig[orig.length - 1];
|
|
const lastWeekStart = lastEntry ? getWeekStart(lastEntry.date) : null;
|
|
|
|
// If the new data is from the same week as the last entry, update it
|
|
// Otherwise, add a new entry for the new week
|
|
if (lastWeekStart === newWeekStart) {
|
|
console.log("Updating same week entry");
|
|
orig[orig.length - 1] = row;
|
|
} else {
|
|
console.log("Adding new week entry");
|
|
orig.push(row);
|
|
}
|
|
|
|
//console.log(orig[orig.length - 1])
|
|
const new_content = JSON.stringify(orig)
|
|
await fs.writeFileSync(fileToWrite, new_content);
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
|
|
// start here
|
|
main: async function () {
|
|
console.log("starting btcpoll script for sateur....")
|
|
let result = updateFile();
|
|
console.log(result)
|
|
return true
|
|
}
|
|
}
|
|
|
|
|
|
//const res = main()
|
|
//console.log('Result from main() : ', res)
|
|
|
|
|