const log = console.log const fs = require('fs') const {table, getBorderCharacters} = require('table') const argv = require('yargs').argv const TABLE_CONFIG = { // columns: { // 0: { alignment: 'center' }, // 1: { alignment: 'center' }, // 2: { alignment: 'center' }, // }, border: getBorderCharacters(`ramac`) } const CREDIT_MSG = "Powered by Dark Sky: https://darksky.net/poweredby/" // https://medium.com/@osiolabs/read-write-json-files-with-node-js-92d03cc82824 const jsonReader = (filePath, cb) => { fs.readFile(filePath, (err, fileData) => { if (err) { return cb && cb(err) } try { const object = JSON.parse(fileData) return cb && cb(null, object) } catch(err) { return cb && cb(err) } }) } const logWeatherJson = (jsonFile, loc) => { return new Promise((resolve, reject) => { jsonReader(jsonFile, (err, weatherInfo) => { if (err) { reject(err) } log(loc) if (argv.v) { const infoList = [['H', '°C', '%P']] for (let i = 0; i < 12; i++) { const hourInfo = weatherInfo['hourly']['data'][i] const date = new Date(hourInfo['time'] * 1000) infoList.push([date.getHours(), Math.floor(hourInfo['apparentTemperature']), Math.floor(hourInfo['precipProbability'])]) } log(table(infoList, TABLE_CONFIG)); } else { // horizontal const hoursList = ['H'] const tempsList = ['°C'] const precipList = ['%P'] for (let i = 0; i < 9; i++) { const hourInfo = weatherInfo['hourly']['data'][i] const date = new Date(hourInfo['time'] * 1000) hoursList.push(date.getHours()) tempsList.push(Math.floor(hourInfo['apparentTemperature'])) precipList.push(Math.floor(hourInfo['precipProbability'])) } log(table([hoursList, tempsList, precipList], TABLE_CONFIG)); } resolve() }) }) } logTablePromises = [ logWeatherJson('./markham.json', 'Markham'), logWeatherJson('./toronto.json', 'Toronto')] Promise.all(logTablePromises).then(results => { const now = new Date() log(`${CREDIT_MSG}\n\nLast updated: ${now.getHours()}:${now.getMinutes()}`) })