Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save CleverFox137/a898ab36166c670e892931fc6461d87b to your computer and use it in GitHub Desktop.
Save CleverFox137/a898ab36166c670e892931fc6461d87b to your computer and use it in GitHub Desktop.
const express = require('express');
const https = require('https');
const ejs = require('ejs');
const { resourceLimits } = require('worker_threads');
const port = 3000;
const days = [];
const dayTemps = [];
let city;
let forecastOption;
let currentTemp;
let longitude;
let latitude;
const app = express();
app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/public'));
app.use(express.urlencoded({extended: true}));
app.use(express.json());
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
app.get('/forecast', (req, res) => {
console.log(city);
console.log(currentTemp);
res.render('forecast.ejs', {city: city, currentTemp: currentTemp, days: days, dayTemps: dayTemps});
});
app.post('/', (req, res) => {
city = req.body.cityName;
const apiKey = 'e595dbde89bdb2a4713be967467df95a';
const url = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}`;
let promise = new Promise((resolve, reject) => {
const request = https.get(url, (response) => {
response.on('data', (data) => {
let weatherData = JSON.parse(data);
currentTemp = weatherData.main.temp;
longitude = weatherData.coord.lon;
latitude = weatherData.coord.lat;
resolve('success');
});
});
request.end();
});
promise.then(
(result) => {
const part = 'hourly,current,minutely,alerts';
const url2 = `https://api.openweathermap.org/data/2.5/onecall?lat=${latitude}&exclude=${part}&lon=${longitude}&appid=${apiKey}`;
const request2 = https.get(url2, (response2) => {
const chunks = [];
response2.on('data', (data) => {
chunks.push(data);
});
response2.on('end', () => {
const someData = Buffer.concat(chunks);
let weatherData = JSON.parse(someData);
for(let index = 0; index < 7; index++)
{
let unixTimestamp = weatherData.daily[index].dt;
let milliseconds = unixTimestamp * 1000;
let dateObject = new Date(milliseconds);
let options = {weekday: 'long'};
let currentDay = dateObject.toLocaleDateString('en-US', options);
days.push(currentDay);
let temp = weatherData.daily[index].temp.day;
dayTemps.push(temp);
}
res.redirect('/forecast');
});
});
request2.end();
},
(error) => {
console.log(error);
}
);
});
app.listen(port, (err) => {
if(err) console.log(err);
else console.log('listening on port ' + port);
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment