. Создаем информер погоды на своем сайте
Создаем информер погоды на своем сайте

Создаем информер погоды на своем сайте

В сегодняшней статье я расскажу Вам, как при разработке сайта я сделал информер погоды для него. Не секрет, что существует огромное количество сервисов, которые предоставляют всевозможные информеры погоды. И все это конечно хорошо, но есть один недостаток. Как правило такие сервисы не позволяют изменить внешний вид информормера. Поэтому приходится все делать самому. Для этого мы воспользуемся замечательным сервисом http://informer.gismeteo.ru , который позволяет получить данные в формате XML о погоде. Данные представляют из себя подробную сводку по всем метеопараметрам, которые есть на сайте http://informer.gismeteo.ru, с шагом 6 часов и заблаговременностью 1 сутки.

Итак, первым делом идем на сайт и узнаем url-адрес XML-документа, для нужного Вам города. Это можно сделать здесь.

В качестве примера я выбрал свой родной и любимый город Донецк! url-адрес XML-документа для города Донецк, находится по этой ссылке http://informer.gismeteo.ru/xml/34519_1.xml

Итак, когда мы знаем url-адрес XML-документа, который содержит подробную сводку о погоде, нам остается спарсить её и записать нужную нам информацию в базу данных! Ну что приступим?

Первым делом посмотрим сам XML-документ, который выдает нам сервис http://informer.gismeteo.ru:

Теперь посмотрим на описание формата:

информация о пункте прогнозирования:

уникальный пятизначный код города

закодированное название города

широта в целых градусах

долгота в целых градусах

FORECAST

информация о сроке прогнозирования:

дата, на которую составлен прогноз в данном блоке

местное время, на которое составлен прогноз

время суток, для которого составлен прогноз: 0 - ночь 1 - утро, 2 - день, 3 - вечер

день недели, 1 - воскресенье, 2 - понедельник, и т.д.

заблаговременность прогноза в часах

PHENOMENA

облачность по градациям: 0 - ясно, 1- малооблачно, 2 - облачно, 3 - пасмурно

тип осадков: 4 - дождь, 5 - ливень, 6,7 – снег, 8 - гроза, 9 - нет данных, 10 - без осадков

интенсивность осадков, если они есть. 0 - возможен дождь/снег, 1 - дождь/снег

вероятность грозы, если прогнозируется: 0 - возможна гроза, 1 - гроза

PRESSURE

атмосферное давление, в мм.рт.ст.

TEMPERATURE

температура воздуха, в градусах Цельсия

WIND

минимальное и максимальное значения средней скорости ветра, без порывов

направление ветра в румбах, 0 - северный, 1 - северо-восточный, и т.д.

RELWET

относительная влажность воздуха, в %

HEAT

комфорт - температура воздуха по ощущению одетого по сезону человека, выходящего на улицу

Итак, прогноз погоды выдается сразу для 4 времен суток. Это: 0 – ночь, 1 - утро, 2 - день, 3 – вечер

Но так как мы хотим показывать у себя на сайте актуальную информацию о погоде, нам необходимо будет в начале определить время суток, а лишь потом, заносить информацию в базу данных!

Итак, с целями и задачами определились. Теперь переходим к непосредственному парсингу XML-документа. Для этих целей мы воспользуемся специальным классом SimpleXML, который появился в РНР 5.0.

Если вы работаете с РНР версии 5.0 или выше, то поддержка SimpleXML у вас включена по умолчанию, если это не так, используйте опцию конфигурации --enable-simplexml (или --disable-simplexml для отключения).

Прежде чем продолжить создадим таблицу в базе данных, в которой будет храниться информация о погоде. Для этого необходимо выполнить следующий SQL-запрос:

Данная таблица содержит следующие поля:

city_id – уникальный идентификатор города на сервисе http://informer.gismeteo.ru. Для города Донецк это 34519 city_name – имя города temperature_min – минимальная температура воздуха temperature_max - максимальная температура воздуха pressure_min – минимальное давление атмосферного воздуха pressure_max – максимальное давление атмосферного воздуха wind_min - минимальное значение средней скорости ветра wind_max - максимальное значение средней скорости ветра wind_dir - направление ветра в румбах relwet_min – минимальная относительная влажность воздуха relwet_max – максимальная относительная влажность воздуха cloudiness - облачность по градациям precipitation - тип осадков

Я специально создал в этой таблице 2 дополнительных поля (уникальный идентификатор и имя города), т.к. в дальнейшем Вы можете добавить несколько городов, и парсить информация для них! Но в данном примере мы будем рассматривать парсинг для одного конкретного города! Итак, идем дальше.

Дальше вставим в эту таблицу данные. Это делается так:

Так как вся информация хранится в базе данных, то первым делом создадим файл, который будет отвечать за подключение к базе данных MySQL и назовем его db.php

Далее создадим файл parser.php, который будет отвечать за парсинг и первым делом подключим файл db.php, отвечающий за подключение к базе данных!

Далее необходимо загрузить XML-данные. Это может быть как файл, так и просто строковая переменная, содержащая XML-код. В нашем случае XML-документ представляет из себя файл, поэтому загружать мы его будем следующим образом:

Далее определим текущей день и время. Это можно сделать так:

Далее определяем время суток:

Дальше пробегаем по всем прогнозам для выбранного города и когда находим время суток и дату, соответствующие текущим, записываем температуру в базу:

Так, ну вот собственно парсер и готов! Теперь его надо поставить на cron (планировщик задач) и запускать этот скрипт 4 раза в сутки: 2, 8, 14, 20

Теперь дело за малым! Осталось вывести всю эту информацию на странице!

Я особо не буду "напрягаться" с красотой, а лишь покажу пример, как можно использовать, ту информацию, которую мы записали в базу данных. Для этого создадим новый файл и назовем его index.php. Подключим файл db.php, для подключения к базе данных!

Далее сделаем выборку из базы данных для нужного нам города.

Если запись с таким городом есть в базе, то будем использовать его, а если нет, то выведем сообщение!

Определим среднюю температуру воздуха

Дальше определим тип осадков и в зависимости от типа осадков присвоим определенный класс для отображение (солнечно, пасмурно, дождь и т.д.)

Когда стили определены, выведем информацию на странице. Для этого будем использовать следующую html- разметку:

Теперь осталось прописать стиль:

Здесь мы прописали фоновые изображения для разных типов осадков! И вот что у меня получилось:

Не обращайте внимание на температуру воздуха, так как это я делал в качестве примера.

Ну вот собственно и все! Скачать исходники и изображения можно здесь! Надеюсь Вам пригодится эта информация! Удачи!

📎📎📎📎📎📎📎📎📎📎