Практически все заработало, но появляется только после 1-го обновления через минуту и weather.icon; weather.description; почему то выводят undefined.
.
/* global w_out */
var city2, w_ico, w_des, temp, f_l, pressure, w_d, wind, humidity, visibility, sunrise, sunset, set_rise, t_z;
var data;
function getFile (fileName) {
var request = new XMLHttpRequest();
request.open('GET', fileName);
request.onloadend = function() {
parse(request.responseText);
};
request.timeout = 5000;
request.send();
}
function parse(obj) {
data = JSON.parse(obj);
city2 = data.name;
w_ico = data.weather.icon;
w_des = data.weather.description;
temp = data.main.temp;
f_l = data.main.feels_like;
pressure = data.main.pressure * 0.750063755419211;
w_d = data.wind.deg;
wind = data.wind.speed;
humidity = data.main.humidity;
visibility = data.visibility;
sunrise = data.sys.sunrise;
sunset = data.sys.sunset;
set_rise = sunset - sunrise;
t_z = data.timezone;
}
function weather(){
const sec = 1000;
const min = 60 * sec;
const hour = 60 * min;
const delay = (0 * hour) + (1 * min) + (0 * sec);
var w_url = "weather/images/";
if (pg === 1) w_url = "images/";
var d = new Date();
var month_num = d.getMonth();
var week_num = d.getDay();
var day = d.getDate();
var hours = d.getHours();
var minutes = d.getMinutes();
var seconds = d.getSeconds();
month = new Array("января", "февраля", "марта", "апреля", "мая", "июня",
"июля", "августа", "сентября", "октября", "ноября", "декабря");
week = new Array("воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота");
if (day <= 9) day = "0" + day;
if (hours <= 9) hours = "0" + hours;
if (minutes <= 9) minutes = "0" + minutes;
if (seconds <= 9) seconds = "0" + seconds;
let apiKey = "45aef403d21cba00f8464647a9595250";
let city = "Perm";
let url = `http://api.openweathermap.org/data/2.5/weather?q=${city}&lang=ru&units=metric&appid=${apiKey}`;
getFile(url);
temp = Math.round(temp);
f_l = Math.round(f_l);
pressure = Math.round(pressure);
h1 = Math.floor(set_rise / 3600);
set_rise = set_rise - h1 * 3600;
m1 = Math.floor(set_rise / 60);
if (h1 < 10) h1 = "0" + h1;
if (m1 < 10) m1 = "0" + m1;
set_rise = h1 + ":" + m1;
y1 = Math.floor(sunrise / (3600 * 24 * 365));
sunrise = sunrise - y1 * (3600 * 24 * 365);
d1 = Math.floor(sunrise /(3600 * 24));
sunrise = sunrise - d1 *(3600 * 24) + t_z;
h1 = Math.floor(sunrise / 3600);
sunrise = sunrise - h1 * 3600;
m1 = Math.floor(sunrise / 60);
if (h1 < 10) h1 = "0" + h1;
if (m1 < 10) m1 = "0" + m1;
sunrise = h1 + ":" + m1;
y1 = Math.floor(sunset / (3600 * 24 * 365));
sunset = sunset - y1 * (3600 * 24 * 365);
d1 = Math.floor(sunset /(3600 * 24));
sunset = sunset - d1 *(3600 * 24) + t_z;
h1 = Math.floor(sunset / 3600);
sunset = sunset - h1 * 3600;
m1 = Math.floor(sunset / 60);
if (h1 < 10) h1 = "0" + h1;
if (m1 < 10) m1 = "0" + m1;
sunset = h1 + ":" + m1;
if (((w_d >= 351) && (w_d <= 360)) || ((w_d >= 0) && (w_d <= 11))) w_d = "северный";
if (((w_d >= 12) && (w_d <= 34))) w_d = "северо-северо-восточный";
if (((w_d >= 35) && (w_d <= 56))) w_d = "северо-восточный";
if (((w_d >= 57) && (w_d <= 80))) w_d = "восточно-северо-восточный";
if (((w_d >= 81) && (w_d <= 102))) w_d = "восточный";
if (((w_d >= 103) && (w_d <= 125))) w_d = "восточно-юго-восточный";
if (((w_d >= 126) && (w_d <= 148))) w_d = "юго-восточный";
if (((w_d >= 149) && (w_d <= 170))) w_d = "юго-юго-восточный";
if (((w_d >= 171) && (w_d <= 193))) w_d = "южный";
if (((w_d >= 194) && (w_d <= 215))) w_d = "юго-юго-западный";
if (((w_d >= 216) && (w_d <= 238))) w_d = "юго-западный";
if (((w_d >= 239) && (w_d <= 260))) w_d = "западно-юго-западный";
if (((w_d >= 261) && (w_d <= 283))) w_d = "западный";
if (((w_d >= 284) && (w_d <= 305))) w_d = "западно-северо-западный";
if (((w_d >= 306) && (w_d <= 328))) w_d= "северо-западный";
if (((w_d >= 329) && (w_d <= 350))) w_d = "северо-северо-западный";
date_time = '<div class="weather" style="text-align: center;height: 290px;width: 350px;border-style: outset; border-width: 5px; background-color:#000000;">' +
'<table width="100%" height="100%" cellspasing="0" cellpadding="0">' +
'<tr><td nowrap style="width: 100%;height: 100%background-size: cover;background-image: url(' + w_url +'fon0.gif)">' +
'<font style="font-size: 18pt;text-align: center;font-weight: bold" color="#00FFFF">' +
'<p style="margin-bottom: 10px;margin-top: 2px">'+city2+'</p>' +
'</font>' +
'<p style="margin-bottom: 2px;margin-top: 2px;text-align: center"><font style="font-size: 14pt; color: #FFFFFF">' + week[week_num] +
'<br>' + day + ' ' + month[month_num] + ' ' + d.getFullYear() + '</font>' +
'<font face="LcdD" style="font-size: 14pt;font-style: normal; color: #00FF66"> ' + hours + ':' + minutes + '</font></p>' +
'<font style="font-size: 13pt" color="#FFFFFF">' +
'<p style="margin-bottom: 2px;margin-top: 2px;margin-left: 10px;text-align: left">Погода: ' +
'<img width="32" height="32" src="'+w_url+w_ico+'.png" alt=""><font color="#FFFF00"> '+w_des+'</font><br>' +
'Температура: <font color="#FFFF00">'+temp+'°C <font color="#FFFFFF"> По ощущению </font>'+f_l+'°C</font></p>' +
'<p style="margin-bottom: 2px;margin-top: 2px;margin-left: 10px;text-align: left">Давление: <font color="#FFFF00">'+pressure+' мм рт. ст.</font></p>' +
'<p style="margin-bottom: 2px;margin-top: 2px;margin-left: 10px;text-align: left">Ветер: <font color="#FFFF00">'+w_d+' '+wind+' м/с</font></p>' +
'<p style="margin-bottom: 2px;margin-top: 2px;margin-left: 10px;text-align: left">Влажность: <font color="#FFFF00">'+humidity+'%</font></p>' +
'<p style="margin-bottom: 2px;margin-top: 2px;margin-left: 10px;text-align: left">Видимость: <font color="#FFFF00">'+visibility+' м</font></p>' +
'<img src="' + w_url + '01d.png" width="48" height="48" alt="" align="left">' +
'<p style="margin-bottom: 2px;margin-top: 2px;margin-left: 10px;text-align: left">Рассвет: <font color="#FFFF00">'+sunrise+'<font color="#FFFFFF"> Долгота дня </font>'+set_rise+'</font></p>' +
'<p style="margin-bottom: 2px;margin-top: 2px;margin-left: 10px;text-align: left">Закат: <font color="#FFFF00">'+sunset+'</font></p>' +
'</font></td></tr></table></div>';
w_out.innerHTML = date_time;
setTimeout(() => weather(), delay);
}