Service_Weather for Developers Part 1
As promised in my last post, here is a basic run down on using Horde_Service_Weather in your own projects.
First, make sure you have the package installed. As of this writing, the latest available packaged release is 1.0.0RC2:
If you have not yet installed any Horde 4 packages, you will need to setup PEAR for Horde 4 (this is not meant to be a HOWTO on installing Horde. See the Horde install docs for more information).
// If you have not yet discovered Horde's PEAR channel: pear channel-discover pear.horde.org // Install the package: pear install horde/Horde_Service_Weather
Next, we need to decide on the actual weather data provider. I recommend using Wunderground, as it is, by far, the most complete of the available choices. It requires registration for at least a free developer's account. Once you have your API key, you can create the weather object:
// Parameters for all driver types // Note that below we use the global $injector to get the HttpClient and Cache instances. // If not using the $injector, substitute your own instances in place of the $injector call. $params = array( 'http_client' => $injector->createInstance('Horde_Core_Factory_HttpClient')->create(), 'cache' => $injector->getInstance('Horde_Cache'), 'cache_lifetime' => 3600 ); $params['apikey'] = 'yourAPIKey'; $weather = new Horde_Service_Weather_WeatherUnderground($params);
Of course, if you choose to use, e.g., Google instead of Wunderground, just create the appropriate object:
// Google returns already localized strings, // just pass it your language code. $params['language'] = 'en'; $weather = new Horde_Service_Weather_Google($params);
Now we have our weather object, connected to the desired backend data provider. Let's fetch some weather information:
// Set the desired units // Defaults to Horde_Service_Weather::UNITS_STANDARD $weather->units = Horde_Service_Weather::UNITS_METRIC; // Get current conditions. // The location identifier can take a wide range of formats. $conditions = $weather->getCurrentConditions('boston,ma'); // Unit labels $units = $weather->getUnits(); // Basic condition description: // e.g., "Sunny" or "Partly Cloudy" etc. echo $conditions->condition; // Current temp echo $conditions->temp . $units['temp'];
Of course, lots of other properties are available. Check the documentation for details. Now, let's get a forecast:
// Get a 5 day forecast. $forecast = $weather->getForecast('boston,ma', Horde_Service_Weather::FORECAST_5DAY); // Each forecast result contains a collection of "Period" objects: foreach ($forecast as $period) { echo 'Date: ' . (string)$period->date; // Horde_Date object echo 'Hi: ' $period->high . $units['temp']; // Display other properties etc... } // If you want just a specific period: $periodOne = $forecast->getForecastDay(0) ; // Total snow accumulation for the day: echo $periodOne->snow_total . $units['snow'];
Again, check the documentation for details on available properties.
In the next installment, we'll look at validating locations, searching locations and using a location autocompleter.
Have fun!