Создаем информер погоды на своем сайте
В сегодняшней статье я расскажу Вам, как при разработке сайта я сделал информер погоды для него. Не секрет, что существует огромное количество сервисов, которые предоставляют всевозможные информеры погоды. И все это конечно хорошо, но есть один недостаток. Как правило такие сервисы не позволяют изменить внешний вид информормера. Поэтому приходится все делать самому. Для этого мы воспользуемся замечательным сервисом 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- разметку:
Теперь осталось прописать стиль:
Здесь мы прописали фоновые изображения для разных типов осадков! И вот что у меня получилось:
Не обращайте внимание на температуру воздуха, так как это я делал в качестве примера.
Ну вот собственно и все! Скачать исходники и изображения можно здесь! Надеюсь Вам пригодится эта информация! Удачи!