Пишем свой информер погоды для сайта
Данный тикет не относится к разработке под MODX, но так как информер я разместил на MODX-сайте, то делюсь наработками здесь.
Вкратце: скрипт парсит XML с погодой и по нескольким условиям выводит результат на сайте.
Итак, XML для своего города берем тут и вставляем ссылку с дописанным /data/ в $rss = simplexml_load_file(...).
Значки «погоды» прилагаются.
Пример работы посмотреть можно тут.
$rss = simplexml_load_file('http://www.eurometeo.ru/russia/amurskaya-oblast/zato-uglegorsk/export/xml/data/'); //Путь к XML с погодой нужного города
$city = $rss->city->cityname; //Город
//echo "Город: ".$city. "<br />";
$i = 0;
foreach ($rss->city->step as $step){
$datetime = $step->datetime; //Дата и время прогноза: гггг-мм-дд чч:мм:сс (2017-04-29 04:00:00)
$davlenie = $step->pressure; //Давление в мм.рт.мт
$temper = $step->temperature; //Температура воздуха в градусах Цельсия
$vlazh = $step->humidity; //Относительная влажность в %
$oblach = $step->cloudcover; //Облачность в %
$windspeed = $step->windspeed; //Скорость ветра в м/с
$windgust = $step->windgust; //Порывы ветра в м/с
$winddir = $step->winddir; //Направление ветра в градусах от 0 до 359. 0 - южный ветер, ветер дует по направлению с юга, 90 - ветер с запада, 180 - ветер с севера, 270 - ветер с востока
$osadki = $step->precipitation; //Осадки за 3 часа в мм
//Определяем время сутокю Тут время московское, поэтому для нас прибавляем 6 часов
$timesofday = explode(" ", $datetime); //Делим строку и выводим только время $timesofday[1] ($timesofday[0] - дата)
if ($timesofday[1] == '04:00:00') {
$timeday = 'Утро';
}
if ($timesofday[1] == '10:00:00') {
$timeday = 'День';
}
if ($timesofday[1] == '16:00:00') {
$timeday = 'Вечер';
}
if ($timesofday[1] == '22:00:00') {
$timeday = 'Ночь';
}
//Облачность и осадки
//1. ясно день
if ($oblach < 33 and $osadki < 1) {
$pogoda = 'yasno';
}
//1.1. ясно ночь
if ($oblach < 33 and $osadki < 1 and $timeday == 'Ночь') {
$pogoda = 'yasno_n';
}
//2. переменная облачность без осадков день
if ($oblach >= 33 and $oblach < 66 and $osadki < 1) {
$pogoda = 'perbezos';
}
//2.1. переменная облачность без осадков ночь
if ($oblach >= 33 and $oblach < 66 and $osadki < 1 and $timeday == 'Ночь') {
$pogoda = 'perbezos_n';
}
//3. переменная облачность с осадками - дождь день
if ($oblach >= 33 and $oblach < 66 and $osadki > 1 and $temper >= 0) {
$pogoda = 'persos_d';
}
//3.1. переменная облачность с осадками - дождь ночь
if ($oblach >= 33 and $oblach < 66 and $osadki > 1 and $temper >= 0 and $timeday == 'Ночь') {
$pogoda = 'persos_d_n';
}
//4. переменная облачность с осадками - снег день
if ($oblach >= 33 and $oblach < 66 and $osadki > 1 and $temper < 0) {
$pogoda = 'persos_s';
}
//4.4. переменная облачность с осадками - снег ночь
if ($oblach >= 33 and $oblach < 66 and $osadki > 1 and $temper < 0 and $timeday == 'Ночь') {
$pogoda = 'persos_s_n';
}
//5. облачно без осадков
if ($oblach >= 66 and $osadki < 1) {
$pogoda = 'oblbezos';
}
//6. облачно с осадками - дождь
if ($oblach >= 66 and $osadki > 1 and $temper >= 0) {
$pogoda = 'oblsos_d';
}
//7. облачно с осадками - снег
if ($oblach >= 66 and $osadki > 1 and $temper < 0) {
$pogoda = 'oblsos_s';
}
//Диапазон температур
$temper_min = round($temper) - 1;
$temper_max = round($temper) + 1;
if ($temper_min > 0) {
$temper_min = "+".$temper_min;
}
if ($temper_max > 0) {
$temper_max = "+".$temper_max;
}
$dtemper = $temper_min."..".$temper_max;
//Направление ветра
//1. Южный ветер
if ($winddir >= 0 and $winddir < 22.5) {
$vectorwind = "южный";
}
if ($winddir >= 337.5 and $winddir <= 359) {
$vectorwind = "южный";
}
//2. Юго-западный ветер
if ($winddir >= 22.5 and $winddir < 67.5) {
$vectorwind = "юго-зап.";
}
//3. Западный ветер
if ($winddir >= 67.5 and $winddir < 112.5) {
$vectorwind = "западный";
}
//4. Северо-западный ветер
if ($winddir >= 112.5 and $winddir < 157.5) {
$vectorwind = "сев.-зап.";
}
//5. Северный ветер
if ($winddir >= 157.5 and $winddir < 202.5) {
$vectorwind = "северный";
}
//6. Северо-восточный ветер
if ($winddir >= 202.5 and $winddir < 247.5) {
$vectorwind = "сев.-вост.";
}
//7. Восточный ветер
if ($winddir >= 247.5 and $winddir < 292.5) {
$vectorwind = "восточный";
}
//7. Юго-восточный ветер
if ($winddir >= 292.5 and $winddir < 337.5) {
$vectorwind = "юго-вост.";
}
echo "<div class='col-md-6 col-xs-6 tofday'>";
echo "<b>".$timeday."</b><br />";
//echo $datetime."<br />";
echo "<img title='Облачность: ".$oblach." %. Осадки: ".round($osadki)." мм за 3 часа' class='pogoda_img' src='/assets/temp/img/pogoda/".$pogoda.".png'><br />";
echo $dtemper." °C<br />";
echo $windspeed." м/с<br />".$vectorwind."<br />";
echo "</div>";
$i++;
if ($i == 4) break;
};
Всем спасибо!)P.S.: Не хватает рейтинга писать в другой раздел. Уважаемый админ, если возможно, перенесите, пожалуйста, по назначению, вдруг кому-то такое решение пригодится.
Поблагодарить автора
Отправить деньги
Комментарии: 4
Где взять значки?
Пожалуйста, иконки погоды
Воу, спасибо!
готовое решения https://forecastnow.info/ru/widgets-gallery/
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.