Раздел прогноза погоды для сайта

Я уже писал про создание погодного информера для сайта. Сегодня покажу, как я сделал раздел на сайте с погодой на 3 дня.


Откуда брать данные в виде xml повторять не стану, смотрите в предыдущей статье.

Вывод погоды оформил в виде трех таблиц, верстка на Bootstrap.
Как это выглядит на сайте смотрим тут.

Создаем сниппет weather:
$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 = "юго-вост.";
    }

    $dateofday = explode("-", $timesofday[0]);
    $date = $dateofday[2].".".$dateofday[1].".".$dateofday[0];
    
    $dates[] = $date;
    $timedays[] = $timeday;
    $tempers[] = $dtemper;
    $windspeeds[] =  round($windspeed);
    $windgusts[] = round($windgust);
    $vectorwinds[] = $vectorwind;
    $pressures[] = round($davlenie);
    $humiditys[] = round($vlazh);
    $cloudcovers[] = $oblach;
    $precipitations[] = $osadki;
    
    $i++;
    if ($i == 12) break;
    
};  
    $k = 0;
    while ($k < 12) {
    $table = "
        <table class='table table-striped table-hover weather' style='border: 1px solid #2c3e50'>
            <thead> 
                <tr> 
                    <th colspan='5' style='color:#ffffff; background:#2c3e50'>Прогноз погоды на ".$dates[$k]."</th> 
                </tr>
                <tr> 
                    <th>Время прогноза</th> 
                    <th>".$timedays[0]."</th> 
                    <th>".$timedays[1]."</th> 
                    <th>".$timedays[2]."</th> 
                    <th>".$timedays[3]."</th>
                </tr> 
            </thead> 
            <tbody> 
                <tr> 
                    <td>Температура</td> 
                    <td>".$tempers[$k+0]." °C</td> 
                    <td>".$tempers[$k+1]." °C</td> 
                    <td>".$tempers[$k+2]." °C</td> 
                    <td>".$tempers[$k+3]." °C</td> 
                </tr> 
                <tr> 
                    <td>Скорость ветра</td> 
                    <td>".$windspeeds[$k+0]." м/с</td> 
                    <td>".$windspeeds[$k+1]." м/с</td> 
                    <td>".$windspeeds[$k+2]." м/с</td> 
                    <td>".$windspeeds[$k+3]." м/с</td> 
                </tr>
                <tr> 
                    <td>Порывы ветра</td> 
                    <td>".$windgusts[$k+0]." м/с</td> 
                    <td>".$windgusts[$k+1]." м/с</td> 
                    <td>".$windgusts[$k+2]." м/с</td> 
                    <td>".$windgusts[$k+3]." м/с</td> 
                </tr>
                <tr> 
                    <td>Направление ветра</td> 
                    <td>".$vectorwinds[$k+0]."</td> 
                    <td>".$vectorwinds[$k+1]."</td> 
                    <td>".$vectorwinds[$k+2]."</td> 
                    <td>".$vectorwinds[$k+3]."</td> 
                </tr>
                <tr> 
                    <td>Атмосферное давление</td> 
                    <td>".$pressures[$k+0]." мм.рт.ст.</td> 
                    <td>".$pressures[$k+1]." мм.рт.ст.</td> 
                    <td>".$pressures[$k+2]." мм.рт.ст.</td> 
                    <td>".$pressures[$k+3]." мм.рт.ст.</td> 
                </tr>
                <tr> 
                    <td>Относительная влажность</td> 
                    <td>".$humiditys[$k+0]." %</td> 
                    <td>".$humiditys[$k+1]." %</td> 
                    <td>".$humiditys[$k+2]." %</td> 
                    <td>".$humiditys[$k+3]." %</td> 
                </tr>
                <tr> 
                    <td>Облачность</td> 
                    <td>".$cloudcovers[$k+0]." %</td> 
                    <td>".$cloudcovers[$k+1]." %</td> 
                    <td>".$cloudcovers[$k+2]." %</td> 
                    <td>".$cloudcovers[$k+3]." %</td> 
                </tr>
                <tr> 
                    <td>Осадки за 3 часа</td> 
                    <td>".$precipitations[$k+0]." мм</td> 
                    <td>".$precipitations[$k+1]." мм</td> 
                    <td>".$precipitations[$k+2]." мм</td> 
                    <td>".$precipitations[$k+3]." мм</td> 
                </tr>
            </tbody>
        </table>";
        
    echo $table;
    $k = $k+4;
}
По-хорошему, нужно все шаблонизировать, чтобы из сниппета убрать лишний мусор.
Василий Stepanov
01 июля 2017, 08:20
modx.pro
1
905
0
Поблагодарить автора Отправить деньги

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0