Yii is Easy and Extensible ![]()
Hope it helps some one. Attached are the GIFs.
I have removed the form to keep the code clean
Widget Code: /protected/components/weather/GoogleWeatherAPI.php
<?php
class GoogleWeatherAPI extends CWidget
{
// URL of Google's weather API
public $API_url = "http://www.google.com/ig/api?";
// Location of weather inquired, i/p format {zip-code, [City,State]}
public $location = 63069; // can also be: Denver,CO
// Deafult o/p set to empty array
public $weather = array();
public function init() {
$api = $this->API_url.'weather='.$this->location;
$xml = simplexml_load_file($api);
$this->weather = $this->xml2assoc($xml);
}
private function xml2assoc($xml) {
$i = 0;
foreach ($xml as $e) {
foreach ($e as $name => $data) {
if (($name == 'forecast_information') || ($name == 'current_conditions')) {
foreach ($data as $col => $val) {
$weather[$name][$col] = (string)$val['data'];
}
}
else {
foreach ($data as $col => $val) {
$weather['forecast'][$i][$col] = (string)$val['data'];
}
$i++;
}
}
}
return $weather;
}
public function run() {
$this->render('google_weather', array('weather'=>$this->weather));
}
}
?>
Widget's View: /protected/components/weather/views/google_weather.php
<?php
if (!isset($weather[forecast])):
$weather[forecast]=array();
echo "check the location - error";
endif;
?>
<?php
// Form to change location can be imbeded here
?>
<table summary='t1'>
<tr>
<td class="l">
<h6>Forcast Information</h6> <hr class="cg" />
City :<?php echo $weather[forecast_information][city]?> <br />
Postal code :<?php echo $weather[forecast_information][postal_code]?> <br />
latitude :<?php echo $weather[forecast_information][latitude_e6]?> <br />
longitude :<?php echo $weather[forecast_information][longitude_e6]?> <br />
forecast date :<?php echo $weather[forecast_information][forecast_date]?> <br />
current time :<?php echo $weather[forecast_information][current_date_time];
// Do not know who to adjust to correct time zone
?><br />
unit system :<?php echo $weather[forecast_information][unit_system]?> <br />
</td>
<td class="l">
<h6>Current Condition</h6> <hr class="cg" />
<?php echo $weather[current_conditions][temp_c]?> ºC / <?php $weather[current_conditions][temp_f]?> ºF<br />
<?php echo $weather[current_conditions][humidity]?> <br />
<?php echo $weather[current_conditions][wind_condition]?> <br /><br />
<?php echo gfImgHC ($weather[current_conditions][icon])?> <br />
<?php echo $weather[current_conditions][condition]?> <br />
</td>
</tr>
</table><br /><br />
<table summary='t2'>
<tr>
<?php foreach ( $weather[forecast] as $i => $forecast) { ?>
<td class="l">
<h6><?php echo $forecast[day_of_week]?></h6> <hr class="cg" />
low :<?php echo $forecast[low]?> ºF <br />
high :<?php echo $forecast[high]?> ºF <br /><br />
<?php echo gfImgHC ($forecast[icon])?> <br />
<?php echo $forecast[condition]?> <br />
</td>
<? } ?>
</tr>
</table>
Using it in the View: /protected/views/site/weather.php
<table summary='dd'>
<tr>
<td><?php $this->widget('application.components.weather.GoogleWeatherAPI'
, array('location'=>$location));
?></td>
</tr>
</table>
The Global Function in /protected/gfunctions.php
<?php
function gfImgHC ($image, $title=''){
return CHtml::image( 'http://localhost/images/'.$image, $alt='', array('title'=>$title));
}
?>