Yii и Google Weather API (Делаем информер погоды на сайте)

Yii и Google Weather API (Делаем информер погоды на сайте) Показываем погоду от Google на сайте, работающем на Yii, используя расширение curl.

Нам на помощь приходят Google Weather API (как источник данных о погоде в разных точках мира) и расширение Yii Curl.

В браузере поглядим - http://www.google.com/ig/api?weather=москва&oe=utf8&hl=ru

Вот он сам xml:

<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="москва"/>
<postal_code data="москва"/>
<latitude_e6 data=""/>
<longitude_e6 data=""/>
<forecast_date data="2012-02-28"/>
<current_date_time data="1970-01-01 00:00:00 +0000"/>
<unit_system data="SI"/>
</forecast_information>
<current_conditions>
<condition data="Преимущественно облачно"/>
<temp_f data="27"/>
<temp_c data="-3"/>
<humidity data="Влажность: 74 %"/>
<icon data="/ig/images/weather/mostly_cloudy.gif"/>
<wind_condition data="Ветер: С, 1 м/с"/>
</current_conditions>
<forecast_conditions>
<day_of_week data="вт"/>
<low data="-11"/>
<high data="-4"/>
<icon data="/ig/images/weather/mostly_sunny.gif"/>
<condition data="Местами солнечно"/>
</forecast_conditions>
<forecast_conditions>
<day_of_week data="ср"/>
<low data="-10"/>
<high data="-2"/>
<icon data="/ig/images/weather/fog.gif"/>
<condition data="Туман"/>
</forecast_conditions>
<forecast_conditions>
<day_of_week data="чт"/>
<low data="-10"/>
<high data="-4"/>
<icon data="/ig/images/weather/cloudy.gif"/>
<condition data="Облачно с прояснениями"/>
</forecast_conditions>
<forecast_conditions>
<day_of_week data="пт"/>
<low data="-6"/>
<high data="1"/>
<icon data="/ig/images/weather/chance_of_snow.gif"/>
<condition data="Возможен снег"/>
</forecast_conditions>
</weather>
</xml_api_reply>

Тут всё просто и нет рекламы. Если ваш сайт не использует Yii, то можно на php код писать такой:

  1. <?php
  2. function getWeather() {
  3. $requestAddress = "http://www.google.com/ig/api?weather=москва&hl=ru";
  4. // скачиваем данные о погоде
  5. $xml_str = file_get_contents($requestAddress,0);
  6. // парсим XML
  7. $xml = new SimplexmlElement($xml_str);
  8. // обрабатываем XML
  9. $count = 0;
  10. echo '<div id="weather">';
  11. foreach($xml->weather as $item) {
  12. foreach($item->forecast_conditions as $new) {
  13. echo '<div class="weatherIcon">';
  14. echo '<img src="http://www.google.com/' .$new->icon['data'] . '"/><br/>';
  15. echo $new->day_of_week['data'];
  16. echo '</div>';
  17. }
  18. }
  19. echo '</div>';
  20. }
  21. getWeather();
  22. ?>
Для Yii же скачиваем в extensions расширение curl и подключаем его в массиве компонентов в config/main.php:

'CURL' =>array(
'class' => 'application.extensions.curl.Curl',
     //you can setup timeout,http_login,proxy,proxylogin,cookie, and setOPTIONS
 ),

В виде где хотим показывать погоду:

<?php

$data = Yii::app()->CURL->run('http://www.google.com/ig/api?weather='.$model->name.'&oe=utf8&hl=ru');
 
$xml = new SimplexmlElement($data);
if(!$xml->weather->problem_cause) :   
                        //For temperature in fahrenheit replace temp_c by temp_f
                        $current_temperature=$xml->weather->current_conditions->temp_c['data'];
                        $current_humidity=$xml->weather->current_conditions->humidity['data'];
                        $current_icon=$xml->weather->current_conditions->icon['data'];
                        $current_condition=$xml->weather->current_conditions->condition['data'];
                        $current_wind_condition=$xml->weather->current_conditions->wind_condition['data'];
?>

<!-- ПОГОДА -->
<div class="pogoda">
<h3>
Погода : <?=$model->name?>
<img style="margin-top: -10px; margin-right: -10px; margin-bottom: -10px; margin-left: -10px; " align="right" src="<?php echo Yii::app()->request->getBaseUrl(true)?>/css/pogoda.gif" height="32"/>
</h3>
<p/>
<div class="top">
<img width="80" height="80" src="http://www.google.com/<?=$current_icon?>"/>
</div>
<div class="top">
<p>
<b><?php echo $current_temperature?>°C</b>
</p>
<p><?php echo $current_condition?></p>
<p><?php echo $current_wind_condition?></p>
<p><?php echo $current_humidity?></p>
</div>
<div align="center">
	
  <?php foreach($xml->weather->forecast_conditions as $forecast) { ?>
  	<div class="netop">
		<p><?php echo $forecast->day_of_week['data'];?></p>
		<br/>
		<img alt="<?php echo $forecast->condition['data']?>" title="<?php echo $forecast->condition['data']?>" src="http://www.google.com/<?=$forecast->icon['data']?>"/>
		<br/>
		<span><?php echo $forecast->high['data'];?>°C</span>
		<?php echo $forecast->low['data'];?>°C
		</div>
  <?php } ?>

</div>
<p/>
</div>

<?php endif; ?>

Тут в цикле проходятся 4 ближайших дня (в xml от Google Weather только 4 дня).



Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (6)     Подпишитесь на RSS комментариев к этой статье.

6 комментариев

#312
cpentyc говорит:
March 2, 2012 at 08:32 am

Что то у меня не получилось.

Internal Server Error

Property "CWebApplication.CURL" is not defined.

An internal error occurred while the Web server was processing your request. Please contact the webmaster to report this problem.

Thank you.

2012-03-02 04:29:34
Сначала выдавало ошибку что в мэйне запитой не хватает после подключения.
#313
Саша Loco говорит:
March 2, 2012 at 09:06 am
Скорее всего путь к расширению curl неверный или он не в extensions у вас. Подключить в main.php его нужно внутри components. Вы так сделали?
#315
cpentyc говорит:
March 2, 2012 at 09:25 am

Не там подключал. Но теперь новая ошибка

Error 500

You must have CURL enabled in order to use this extension.

C:\wamp\www\site\protected\extensions\curl\Curl.php

#316
Саша Loco говорит:
March 2, 2012 at 11:21 am
Вы на WAMP? У вас включен CURL там? Скорее всего в этом дело... попробуйте на сервере хостинга или денвер поставить. У меня MAMP на mac'е, в нём всё заработало сразу.
#653
red-ogurez говорит:
September 28, 2012 at 10:49 am
google weather умер (
#765
Сергей говорит:
January 25, 2013 at 02:18 pm
Он же умер говорят?