Slyweb
На разработку сайта! Скидки 50%!

Погодный информер с jquery, php и mysql

С развитием Вашего сайта рано или поздно Вам необходимо будет предоставлять дополнительную иноформацию, дополнительные сервисы пользователям, чтоб отбить их у своих конкурентов. Одним из них может стать погодный сервис. Использовать обычные погодные информеры для веб-программиста означало бы ухудшения качества своего сайта, так как обычные погодные информеры с трудом встраиваются в дизайн сайта, снабжены неуместными логотипами и тд. Поэтому иметь свой погодный информер, с собственными настройками, собственным дизайном представляется для меня лучшим вариантом.

Для достижения нашей цели нам понадобится:

База ip адресов состоит из нескольких блоков ip адресов. Первый блок - основной, содержится в файле cidr_ru_master_index.db. Второй блок ip адресов - дополнительный, он содержится в файле cidr_ru_slave_index.db в нём конкретезируется информация по ip адресам. Зачем два разных файла - поясню простым языком, первый содержит границы ip адресов для каждого региона, второй в рамках первого конкретизирует все ip адреса определённого региона. В первом содержаться ещё дополнительные данные, которые нам, для погодного информера не интересны.

Итак, во-первых, Вы скачали файл db_files.tar.gz, распакуйте его, в нем содержится ещё один файл - cidr_ru_block.txt, он дублирует оба файла, поэтому он нам не понадобится.

Зачем нам нужны файлы cidr_ru_master_index.db и cidr_ru_slave_index.db? С помощью этих фалов мы будем определять место расположения нашего пользователя, его адрес. Адрес будет определен центральным городом его субъекта. В Yandex и Rambler то же самое. Там пока не придумали как сделать погоду для точных городов пользователей?

Итак как мы будем использовать указанные файлы - очень просто, распарсим их в базу mysql, чтоб искалось быстрее. По крайней мере в моём случае искать по базе оказалось на много быстрее, чем по строчкам в файле.

Обе таблицы будут выглядеть следующим образом:

Скрипт на php, который разбирает файлы следующий:

По поводу скрипта предупреждаю, на хостинге вызовет ошибку Fatal error: Allowed memory size..... Поэтому советую создать базу данных на локальной машине, установив параметр php_value memory_limit в php.ini побольше его стандартного значения, после чего дамп mysql импортировать на хостинг. Таблицы занимают около 15 mb.

Теперь вроде бы с ip мы разобрались, перейдём к сервису xml 1.2 от замечательного сайта http://weather.co.ua/services/ .

Сервис предоставляется бесплатно. Предоставляет он следующее - несколько файлов на php и несколько файлов xml. Нас интересуют следующие файлы - import_current.php, import_forecast.php, config.inc.php, common.inc.ph. Первые два - импортируют данные из xml в базу данных mysql, config.inc.php - настройки для подключения к базе данных, последний содержит функции для разбора xml.

Для импорта погодных данных Вам понадобится следующие таблицы sql:

Самые для нас нужные - weather_current и weather_forecast. Эти таблицы я использую для создания погодного информера, две первые таблицы с сайта http://weather.co.ua вовсе не понадобились.

Для них важны два скрипта import_current.php и import_forecast.php.

Скрипт import_current.php нужен для отображения текущей погоды:

Скрипт import_forecast.php, нужен для отображения погоды на будущие 5 дней.

В обеих таблицах непонятным, скорее всего, будет запрос INSERT … ON DUPLICATE KEY UPDATE Он означает, что если не будет найдено ни одной записи, то будет добавлена новая, иначе будет обнавлена предыдущая запись.

Остальные функции можете посмотреть в файле common.inc.php.

Итак мы пришли к следующему - у Вас есть две таблицы с ip адресами - geo, master, две таблицы с данными о погоде - weather_forecast, weather_current. Осталось написать скрипт определяющий ip посетителя и выводящий соответсвующий прогноз для определенного города.

Приступим к нему, он будет называться base.php:

В скрипте достаточно комментариев, скрипт выводит данные из таблиц с использованием другого скрипта pogoda.php. Его содержание следующее:

Так же как и прежний скрипт он не предоставляет сложности, для его понимания нужен лишь скрипт city.php. Весь скрипт я приводить не буду, укажу лишь образец первых строк, весь скрипт вы можете скачать внизу страницы со всем архивом.

Таким образом с помощью ip мы определим центр краевой,областной для пользователя вашего сайта. И передадим его скрипту base.php, который в свою очередь выведет соответсвующую информацию (SELECT * FROM weather_current WHERE city_id='.$url).

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

Надеюся Вам будет полезен этот пример, весь архив, включая таблицы для ip, таблицы для погоды, скрипты можно скачать здесь (обновлено 22.01.2011 г.).

Дополнительные парсеры погоды:

1. Модифицированный парсер погоды для определенного города, без jQuery..


Александр Ермаков