Fetch local weather from Dark Sky API. https://wthr.ml/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

75 lines
2.2 KiB

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()}`)
})