import fs from 'fs'; import client from 'https'; function getTimeString(count) { let date = new Date(Date.now() - count * 60000 * 5); return ( date.getFullYear().toString() + (date.getMonth() + 1).toString().padStart(2, "0") + date.getDate().toString().padStart(2, "0") + date.getHours().toString().padStart(2, "0") + (date.getMinutes() - date.getMinutes() % 5).toString().padStart(2, "0") ); } function downloadImage(time_string, filepath) { return new Promise((resolve, reject) => { let options = { hostname: 'www.nea.gov.sg', port: 443, path: `/docs/default-source/rain-area/dpsri_70km_${time_string}0000dBR.dpsri.png`, headers: { 'Host': 'www.nea.gov.sg', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0', 'Accept': 'image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5', 'Accept-Language': 'en-US,en;q=0.5', } } client.get(options, (res) => { console.log(`Downloading ${time_string}`); if (res.statusCode === 200) { res.pipe(fs.createWriteStream(filepath)) .on('error', reject) .once('close', () => resolve(filepath)); } else { // Consume response data to free up memory res.resume(); reject(new Error(`Request Failed With a Status Code: ${res.statusCode}`)); } }); }); } export async function initImages(count) { for (let i = count; i >= 0; i--) { let time_string = getTimeString(i); let filename = `images/${time_string}.png`; try { await downloadImage(time_string, filename) } catch (error) { //Response 302, we've reached the latest available image return; } } }