Получение погоды используя Google Weather API

Ответить
Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
Внимание! На данный момент Google Weather API больше не доступны. Подробнее во втором сообщении темы.
Если вы занимаетесь разработкой сайтов (ну или администрируете один из разработанных кем-то движков), то наверняка возникало желание вставить вывод погодного информера. В таких случаях вы скорее всего пойдете либо на сайт гисметео, либо на яндекс, либо на еще какой-то из сайтов предоставляющих информеры для вставки на свои ресурсы..

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

Но есть и другое решение наболевшего вопроса - Google Weather API, на котором и остановимся подробнее.
(Сразу оговорюсь, что Google Weather API не поддерживается Google и соответственно на него нет официальной документации, но есть несколько пользовательских статей на которые и будем опираться ;-). Эта служба была создана для гаджета погоды в iGoogle, но интерфейс легко обнаружить.)

Google Weather API отдают погоду в виде XML-файла. Город, погоду в котором нужно узнать указывается в адресе.

Например, погода в Воронеже - google.com/ig/api?weather=Voronezh (Можно указывать и русские названия, только надо не забывать о необходимости перекодировки - google.com/ig/api?weather=Воронеж)

В ответ мы получим что-то вроде

Код: Выделить всё

<xml_api_reply version="1">
   <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">
      <forecast_information>
         <city data="Voronezh, Province of Voronezh"/>
         <postal_code data="Voronezh"/>
         <latitude_e6 data=""/>
         <longitude_e6 data=""/>
         <forecast_date data="2010-09-13"/>
         <current_date_time data="2010-09-13 15:00:00 +0000"/>
         <unit_system data="SI"/>
      </forecast_information>
      <current_conditions>
         <condition data="Ясно"/>
         <temp_f data="68"/>
         <temp_c data="20"/>
         <humidity data="Влажность: 47 %"/>
         <icon data="/ig/images/weather/sunny.gif"/>
         <wind_condition data="Ветер: С, 1 м/с"/>
      </current_conditions>
      <forecast_conditions>
         <day_of_week data="Пн"/>
         <low data="10"/>
         <high data="23"/>
         <icon data="/ig/images/weather/mostly_sunny.gif"/>
         <condition data="Местами солнечно"/>
      </forecast_conditions>
      <forecast_conditions>
         <day_of_week data="Вт"/>
         <low data="11"/>
         <high data="22"/>
         <icon data="/ig/images/weather/mostly_sunny.gif"/>
         <condition data="Местами солнечно"/>
      </forecast_conditions>
      <forecast_conditions>
         <day_of_week data="Ср"/>
         <low data="11"/>
         <high data="24"/>
         <icon data="/ig/images/weather/cloudy.gif"/>
         <condition data="Облачно с прояснениями"/>
      </forecast_conditions>
      <forecast_conditions>
         <day_of_week data="Чт"/>
         <low data="9"/>
         <high data="19"/>
         <icon data="/ig/images/weather/cloudy.gif"/>
         <condition data="Облачно с прояснениями"/>
      </forecast_conditions>
   </weather>
</xml_api_reply>
Надеюсь пояснения по поводу формата XML-ответа на наш запрос не требуются и всем понятно, что выводятся данные на 4 дня.

Данные получены, но что с ними делать? :-) Есть несколько путей: можно например разбирать полученный ответ используя JavaScript и с помощью него же делать вывод на страницу, а можно и обрабатывать все из php, например как

Код: Выделить всё

<?php

  $requestAddress = "http://www.google.com/ig/api?weather=Voronezh&hl=ru";
  // скачиваем данные о погоде
  $xml_str = file_get_contents($requestAddress,0);
  // парсим XML
  $xml = new SimplexmlElement($xml_str);
  // обрабатываем XML
  $count = 0;
  echo '<div id="weather">';
  foreach($xml->weather as $item) {
    foreach($item->forecast_conditions as $new) {
      echo '<div class="weatherIcon">';
      echo '<img src="http://www.google.com/' .$new->icon['data'] . '"/><br/>';
      echo $new->day_of_week['data'];
      echo '</div>';
    }
  }
  echo '</div>';

?>
(в коде используется расширение php - SimpleXML, при его отсутствии разбирать полученный $xml_str надо будет вручную, например с помощью регулярных выражений)

© Creaternal, 2010

При написании использовалась статья http://blog.kron0s.com/google-weather-api

Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
С прискорбием можно сказать, что этот замечательный, пусть и недокументированный, сервис Google приказал долго жить.

Данный API входит в число сервисов закрываемой iGoogle, но первоначально корпорация пообещала поддержку работоспособности iGoogle до ноября 2013 года. Но, с начала августа многие пользователи Google Weather API начали получать регулярные ошибки. И вот, 27 августа, сервис окончательно прекратил отдавать данные.
Однако тем, кто пользовался Google weather API, можно с лёгкостью переходить на worldweatheronline.com. Google сам ими пользуется, а XML на выходе совпадает почти полностью.
данные с http://habrahabr.ru/post/150572/

Ответить