Пользователь
0,0
рейтинг
23 января 2012 в 14:47

Разработка → Яндекс.ТвояПогода

PHP*
Привет! Очень давно уже не писал никаких статей, да и вообще, долго уже раздумывал опубликовывать данную тему или нет, но всё же решился.

«Для чего»

Ради интереса, на своего «хомяка» (когда-то лет 5 назад эта фраза была немного популярной) появилось желание прикрутить погодный информер.
Причем, хотелось видеть в нем некий минимализм — текущая температура и миленькая пиктограммка (солнце, тучка или снег).

Решения, предлагаемые, многими сервисами погоды являются относительно громоздкими и, по моему мнению, не очень приятными глазу :) Хотелось бы сделать что-то своё)

Мне приятнее всего пользоваться сервисами Яндекса, поэтому поставил перед собой вопрос «как сделать свою Яндекс.Погоду?» :)

«В закромах...»

10 минут «копания» в глубинах интернета дали мне ответ о том, как заполучить XML'ку погоды со всеми нужными нам данными.

1. Получаем id города. Можно посмотреть в списке городов (простым Ctrl+F ищем город)
периодически до файла не достучаться (вылетает 404)

id можно узнать вторым способом: набрать в яндексе запрос - погода в ...... (и посмотреть адрес ссылки)


Например: Кемерово id = 29642

2. Собственно, теперь мы можем взять сам xml.
Формат ссылки export.yandex.ru/weather-ng/forecasts{id_city}.xml

Для нашего примера: http://export.yandex.ru/weather-ng/forecasts/29642.xml

3. Парсер. Вот тут уже как душе угодно, можно разгуляться) На гениальность кода не претендую, но для примера мой файл iknowweater.php


<?php
	$city_id=29642; // id города
	$data_file="http://export.yandex.ru/weather-ng/forecasts/$city_id.xml"; // адрес xml файла 

              $xml = simplexml_load_file($data_file); // раскладываем xml на массив

 
    // выбираем требуемые параметры (город, температура, пиктограмма и тип погоды текстом (облачно, ясно)

	$city=$xml->fact->station;
	$temp=$xml->fact->temperature;
	$pic=$xml->fact->image;
	$type=$xml->fact->weather_type;

	// Если значение температуры положительно, для наглядности добавляем "+"
	if ($temp>0) {$temp='+'.$temp;}

?>

 
<div id="weather">
<?php
echo ("<a href=\"http://pogoda.yandex.ru/$city_id/\">$city</a>");
echo ("<img src=\"http://img.yandex.net/i/wiz$pic.png\" alt=\"$type\" title=\"$type\">$temp<sup>o</sup>C");
?>
</div>


получаем что-то вроде

Для вывода списка погоды в разных городах можно использовать обычный цикл) как угодно)


Чтобы не нарушать авторские права, добавляем копирайт с соответсвующими ссылочками на первоисточник.
Данные погоды предоставляются сервисом Яндекс.Погода (или как у них на странице — Данные предоставлены FORECA).

4. Инклудим скрипт, пишем стиль и радуемся.



P.S. Для любителей побрызгать слюной: на оригинальность решения и гениальность исполнения не претендую, статья была написана как один из вариантов.
Конечно, можно сделать всё что угодно и кэширование и вообще полнофункциональный сайт на основе данных и атрибутов, но зачем? (для примера достаточно, главное — свою функцию он выполняет. Вдруг кому пригодится)

Ни о каком коммерческом использовании или получении выгоды речи не шло и идти не может. Всё было сделано «for fun».
Роман @MrBlack
карма
6,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (6)

  • 0
    > делать всё что угодно и кэширование
    > но зачем?

    Чтобы не заставлять браузер ждать, нет?
  • 0
    Если кому то интересно как работает погода на моем сайте — могу выложить код в комментарии.

    Только у меня она забирается с weather.co.ua, так уж исторически сложилось. Город меняется через клик по текущему городу — выпадет список.
  • 0
    Тоже для себя на хомячке подтягиваю прогноз с openweathermap.org куда моя метеостанция передает данные. Писано на javascript буквально за часик. Прогноз надо сказать частенько сбывается.

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