<?php /** * weather_forecast * * Display the weather for a location. Look up using the Google weather API. * * @version 1.4 * @author Contributors at eXorithm * @link /algorithm/view/weather_forecast Listing at eXorithm * @link /algorithm/history/weather_forecast History at eXorithm * @license /home/show/license * * @param mixed $location The location to get the weather for. Can be a city, zip code, or postal code. * @param mixed $units The units to get the temperature in. * @param string $header_color (hex color code) Color of the header * @param string $day_header_color (hex color code) Color of the header for each of the days * @param string $day_color (hex color code) Color of the cells containing the forecasts * @return string HTML */ function weather_forecast($location='Sydney, Australia',$units='c',$header_color='f0f0f0',$day_header_color='d0ffd0',$day_color='f0f0f0') { $weather = file_get_contents('http://www.google.com/ig/api?weather='.urlencode($location)); $xml = simplexml_load_string($weather); if (!isset($xml->weather->forecast_conditions)) { throw new Exception('Data could not be retreived for location '.$location); } $location = $xml->weather->forecast_information->city['data']; // four day outlook for ($i = 0; $i < 4; $i++){ if ($xml->weather->forecast_conditions->$i) { $forecast_day[] = $xml->weather->forecast_conditions->$i->day_of_week['data']; $forecast_condition[] = $xml->weather->forecast_conditions->$i->condition['data']; $low = $xml->weather->forecast_conditions->$i->low['data']; if ($units=='k') $low = round((($low - 32)*5/9) + 273, 1); else if ($units=='c') $low = round(($low - 32)*5/9, 1); $forecast_low[] = $low; $high = $xml->weather->forecast_conditions->$i->high['data']; if ($units=='k') $high = round((($high - 32)*5/9) + 273, 1); else if ($units=='c') $high = round(($high - 32)*5/9, 1); $forecast_high[] = $high; $forecast_icon[] = $xml->weather->forecast_conditions->$i->icon['data']; } } // current $condition = $xml->weather->current_conditions->condition['data']; $temp = $xml->weather->current_conditions->temp_f['data']; if ($units=='k') $temp = round((($temp - 32)*5/9) + 273, 1); else if ($units=='c') $temp = round(($temp - 32)*5/9, 1); $icon = $xml->weather->current_conditions->icon['data']; // build the HTML $header = "<tr><td colspan=\"".count($forecast_day)."\" bgcolor=\"#$header_color\">"; if ($icon!='') $header .= "<img align=\"left\" src=\"http://www.google.com$icon\">"; $header .= "<b>$location</b><br>Currently <i>$condition</i> <b>$temp$units</b>"; $header .= "</td></tr>\n<tr>"; $data = "<tr>\n"; for ($i = 0; $i < count($forecast_day); $i++){ $header .= "<td width=\"130\" bgcolor=\"#$day_header_color\"><b>$forecast_day[$i]</b></td>"; $data .= "<td bgcolor=\"#$day_color\">"; $data .= "<img src=\"http://www.google.com$forecast_icon[$i]\">"; $data .= "<br><i>$forecast_condition[$i]</i>"; $data .= "<br>high <b>$forecast_high[$i]$units</b>"; $data .= "<br>low <b>$forecast_low[$i]$units</b>"; $data .= "</td>\n"; } $header .= "</tr>"; $data .= "</tr>"; return "<table cellpadding=\"5\" cellspacing=\"3\">\n$header\n$data\n</table>"; } ?>