Yii и Google Weather API (Делаем информер погоды на сайте)
Нам на помощь приходят 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 код писать такой:
- <?php
- function getWeather() {
- $requestAddress = "http://www.google.com/ig/api?weather=москва&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>';
- }
- getWeather();
- ?>
'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 дня).
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 14 Разработка приложения на Yii. Урок 14: Выводим список категорий как новый виджет на сайте (29.04.2015)
- 13 Разработка приложения на Yii. Урок 13: Внедряем категории для статей. (29.04.2015)
- 12 Разработка приложения на Yii. Урок 12: Профилирование приложения, включаем кеширование. (20.01.2015)
- 11 Yiico. Видеокурс по разработке сайта на Yii. Урок 11: Отладка приложения, включаем журналирование. (20.01.2015)
- 10 Yiico. Видеокурс по разработке сайта на Yii. Урок 10: Если ваше приложение находится не в корневой папке, а во вложенной. (19.10.2014)
- 9 Разработка сайта на Yii с нуля. Урок 9. Выборка статей определённого автора. (13.08.2014)
- 8 Разработка сайта на Yii с нуля. Урок 8. Вызов в моделях функции, общей для них. Как избегать дублирования кода? (25.07.2014)
- 7 Разработка сайта на Yii с нуля. Урок 7. Изменение количества выводимых записей на странице в CGridView. Включаем сессии Yii. (04.09.2013)
- 6 Разработка сайта на Yii с нуля. Урок 6. Автоматич. отправка оповещений об одобренных комментариях на email автора комментария (11.08.2013)
- 5 Разработка сайта на Yii с нуля. Урок 5. Переименовываем blog в yiico. Изменяем "Home" в breadcrumbs. Включаем Gzip-сжатие. (09.08.2013)
- 4 Курс по Yii с нуля. Урок 4. Дорабатываем простую работу с пользователями: хранение пароля при редактировании пользователя. (13.04.2013)
- 3 Курс по Yii с нуля. Урок 3. Создаём новых пользователей. Организуем простую систему авторизации. Аутентификация, пароли, соли. (20.07.2014)
- 2 Yii + Git (github) на Mac. (24.03.2013)
- 2 Курс по Yii с нуля. Урок 2. Переносим и настраиваем Yii и проект нашего сайта на рабочем сервере. Избавляемся от index.php в url (09.07.2014)
- 1 Курс по Yii с нуля. Урок 1. Устанавливаем Yii на локальном компьютере. Заводим проект будущего сайта. (10.03.2013)
- 0 Composer – пакетный менеджер PHP. Что и как? (22.07.2014)
- 0 MySQL: проверить содержится ли значение в поле столбца (в столбце хранится строка значений через запятую) (22.05.2014)
- 0 Yii: Статичные страницы (создание, редактирование, удаление) (28.04.2014)
- 0 Yii: Расширение ECKEditor = Связка ckeditor + kcfinder (визуальный редактор с бесплатным файловым менеджером) (28.04.2014)
- 0 Yii: Bootstrap tabs, делаем активной вкладку на которую выполняется переход по ссылке (20.03.2014)
- 0 Yii: Доступ к атрибуту модели из файла шаблона (Вызов в шаблоне какого-либо атрибута модели). (17.02.2014)
- 0 Yii: Множественный автокомплит с помощью CJuiAutoComplete (автокомплит нескольких значений в одно поле) (07.02.2014)
- 0 Yii: Фотогалерея через поведение (доработка расширения imagesgallerymanager) (08.03.2016)
- 0 Yii: Установка и настройка Yii-app заготовки приложения от Crisu83 (09.03.2014)
- 0 Twitter Bootstrap Carousel Crossfade (09.09.2013)
6 комментариев
Что то у меня не получилось.
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.
Не там подключал. Но теперь новая ошибка
Error 500
C:\wamp\www\site\protected\extensions\curl\Curl.php