NAME¶
Weather::Com::Cached - Perl extension for getting weather information from
weather.com
SYNOPSIS¶
use Data::Dumper;
use Weather::Com::Cached;
# define parameters for weather search
my %params = (
'cache' => '/tmp/weathercache',
'current' => 1,
'forecast' => 3,
'links' => 1,
'units' => 's',
'proxy' => 'http://proxy.sonstwo.de',
'timeout' => 250,
'debug' => 1,
'partner_id' => 'somepartnerid',
'license' => '12345678',
);
# instantiate a new weather.com object
my $cached_weather = Weather::Com::Cached->new(%params);
# search for locations called 'Heidelberg'
my $locations = $cached_weather->search('Heidelberg')
or die "No location found!\n";
# and then get the weather for each location found
foreach (keys %{$locations}) {
my $weather = $cached_weather->get_weather($_);
print Dumper($weather);
}
DESCRIPTION¶
Weather::Com::Cached is a Perl module that provides low level OO
interface to gather all weather information that is provided by
weather.com.
Please refer to Weather::Com for the high level interfaces.
This module implements the caching business rules that apply to all applications
programmed against the
xoap API of
weather.com. Except from the
cache parameter to be used while instantiating a new object instance,
this module has the same API than
Weather::Com::Base. It's only a
simple caching wrapper around it.
The caching mechanism for location searches is very simple. We assume that
location codes on
weather.com will never change. Therefore, a search
string that has been successfully used once to search for locations will never
cause another search on the web. Each location search results will be stored
in the file "locations.dat". If you want to refresh your locations
cache, simply delete this file.
Although it's really simple, the module uses
Storable methods
lock_store and
lock_retrieve to implement shared locking for
reading cache files and exclusive locking for writing to chache files. By this
way the same cache files should be able to be used by several application
instances using
Weather::Com::Cached.
You'll need to register at
weather.com to to get a free partner id and a
license key to be used within all applications that you want to write against
weather.com's
xoap interface.
<
http://www.weather.com/services/xmloap.html>
CHANGES¶
The location caching mechanism has been extended with version 0.4. Up to V0.4
searches were stored this way:
$locations_cache = {
'New York' => {
'USNY1000' => 'New York/La Guardia Arpt, NY',
'USNY0998' => 'New York/Central Park, NY',
'USNY0999' => 'New York/JFK Intl Arpt, NY',
'USNY0996' => 'New York, NY'
},
}
This has changed the way it does not only store a
search_string => locations
hash. The cache now also stores a hash for
each location name found:
$locations_cache => {
'new york' => {
'USNY1000' => 'New York/La Guardia Arpt, NY',
'USNY0998' => 'New York/Central Park, NY',
'USNY0999' => 'New York/JFK Intl Arpt, NY',
'USNY0996' => 'New York, NY'
},
'new york/central park, ny' => {
'USNY0998' => 'New York/Central Park, NY'
},
'new york/la guardia arpt, ny' => {
'USNY1000' => 'New York/La Guardia Arpt, NY'
},
'new york, ny' => {
'USNY0996' => 'New York, NY'
},
'new york/jfk intl arpt, ny' => {
'USNY0999' => 'New York/JFK Intl Arpt, NY'
},
}
The new mechanism has the following advantages:
- 1.
- The new chaching mechanism is case insensitive
- 2.
- This caching mechanism is a workaround one problem with
weather.com's XOAP API.
Their server does not understand any search string with a '/' in it - no
matter wether the '/' is URL encoded or not!
This way, if you have searched for New York once, you'll then also
get a result for direct calls to New York/Jfk Intl Arpt, NY.
- 3.
- The new mechanism also allows searches for slashed substrings. A
search for York/Central will return the New York/Central Park,
NY location and if you simply search York, you'll get anything
containing York. No matter if it's in the cache or not.
Only if you specify exactly the name of a location in the cache, only
this location is shown.
CONSTRUCTOR¶
new(hash or hashref)
This constructor takes the same hash or hashref as
Weather::Com::Base
does. Please refer to that documentation for further details.
Except from the
Weather::Com::Base's parameters this constructor takes a
parameter
cache which defines the path to a directory into which all
cache files will be put.
The cache directory defaults to '.'.
METHODS¶
search(search string)
The "search()" method has the same interface as the one of
Weather::Com::Base. The difference is made by the caching.
The search is performed in the following order:
- 1.
- If there's a direct match in the locations cache, return the locations
from the cache.
- 2.
- If not, if there's a direct match on the web, return the locations found
on the web and write the search result to the cache.
- 3.
- If not, try a regexp search over all cached search strings and location
names. This will return each location that matches the search string.
The rest is all the same as for
Weather::Com::Base.
SEE ALSO¶
See also documentation of Weather::Com and Weather::Com::Base.
AUTHOR¶
Thomas Schnuecker, <thomas@schnuecker.de>
COPYRIGHT AND LICENSE¶
Copyright (C) 2004-2007 by Thomas Schnuecker
This library is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.
The data provided by
weather.com and made accessible by this OO interface
can be used for free under special terms. Please have a look at the
application programming guide of
weather.com!
<
http://www.weather.com/services/xmloap.html>