# NAME Weather::OpenWeatherMap - Interface to the OpenWeatherMap API # SYNOPSIS use Weather::OpenWeatherMap; my $api_key = 'foo'; my $wx = Weather::OpenWeatherMap->new( api_key => $api_key, ); # Current conditions: # (see Weather::OpenWeatherMap::Result::Current) my $current = $wx->get_weather( location => 'Manchester, NH', ); my $tempf = $current->temp_f; my $wind = $current->wind_speed_mph; # Daily forecast conditions: # (see Weather::OpenWeatherMap::Result::Forecast) my $forecast = $wx->get_weather( location => 'Manchester, NH', forecast => 1, days => 3, ); for my $day ($forecast->list) { my $date = $day->dt->mdy; my $temp_lo = $day->temp_min_f, my $temp_hi = $day->temp_max_f, # (see Weather::OpenWeatherMap::Result::Forecast::Day) } # Hourly (3-hr blocks) forecast conditions: my $forecast = $wx->get_weather( location => 'Manchester, NH', forecast => 1, hourly => 1, days => 3, ); for my $block ($forecast->list) { my $time = $block->dt_txt; my $temp = $block->temp; # (see Weather::OpenWeatherMap::Result::Forecast::Hour) } # Find a city: # (see Weather::OpenWeatherMap::Result::Find) my $search = $wx->get_weather( location => 'Manchester', find => 1, max => 5, ); for my $place ($search->list) { my $region = $place->country; # ... } # DESCRIPTION An object-oriented interface to retrieving weather conditions & forecasts from **OpenWeatherMap** ([http://www.openweathermap.org/](http://www.openweathermap.org/)) for a given city, latitude/longitude, or OpenWeatherMap city code. This module provides a simple blocking ([LWP::UserAgent](https://metacpan.org/pod/LWP::UserAgent)) interface to weather retrieval; if you have an event loop handy, the included [Weather::OpenWeatherMap::Request](https://metacpan.org/pod/Weather::OpenWeatherMap::Request) & [Weather::OpenWeatherMap::Result](https://metacpan.org/pod/Weather::OpenWeatherMap::Result) classes can be used to create appropriate [HTTP::Request](https://metacpan.org/pod/HTTP::Request) instances and parse responses from non-blocking HTTP clients. See [POEx::Weather::OpenWeatherMap](https://metacpan.org/pod/POEx::Weather::OpenWeatherMap) for a non-blocking implementation using the [POE](https://metacpan.org/pod/POE) ecosystem. ## ATTRIBUTES ### api\_key Your [OpenWeatherMap](http://www.openweathermap.org/) API key. (See [http://www.openweathermap.org/api](http://www.openweathermap.org/api) to register for free.) ### cache A boolean value indicating whether successful results should be cached to disk via [Weather::OpenWeatherMap::Cache](https://metacpan.org/pod/Weather::OpenWeatherMap::Cache). Defaults to false. This may change in a future release. ### cache\_dir The directory in which cache files are saved. The default may be fine; see [Weather::OpenWeatherMap::Cache](https://metacpan.org/pod/Weather::OpenWeatherMap::Cache). ### cache\_expiry The duration (in seconds) for which cache files are considered valid; see [Weather::OpenWeatherMap::Cache](https://metacpan.org/pod/Weather::OpenWeatherMap::Cache). ### ua The [LWP::UserAgent](https://metacpan.org/pod/LWP::UserAgent) instance used to issue HTTP requests; can be used to control LWP options: my $wx = Weather::OpenWeatherMap->new( api_key => $my_api_key, ua => LWP::UserAgent->new(%lwp_opts), ); ## METHODS ### get\_weather $wx->get_weather( # 'location =>' is mandatory. # These are all valid location strings: # By name: # 'Manchester, NH' # 'London, UK' # By OpenWeatherMap city code: # 5089178 # By latitude/longitude: # 'lat 42, long -71' location => 'Manchester, NH', # Set 'forecast => 1' to get the forecast, # omit or set to false for current weather: forecast => 1, # If 'forecast' is true, you can ask for an hourly (rather than daily) # forecast report: hourly => 1, # If 'forecast' is true, you can specify the number of days to fetch # (up to 16 for daily reports, 5 for hourly reports): days => 3, # Optional tag for identifying the response to this request: tag => 'foo', ); Request a weather report (in the form of a [Weather::OpenWeatherMap::Result](https://metacpan.org/pod/Weather::OpenWeatherMap::Result) object) for the given `location =>`. The location can be a 'City, State' or 'City, Country' string, an [OpenWeatherMap](http://www.openweathermap.org/) city code, or a 'lat X, long Y' string. Requests the current weather by default (see [Weather::OpenWeatherMap::Request::Current](https://metacpan.org/pod/Weather::OpenWeatherMap::Request::Current) and [Weather::OpenWeatherMap::Result::Current](https://metacpan.org/pod/Weather::OpenWeatherMap::Result::Current)). If passed `forecast => 1`, requests a weather forecast (see [Weather::OpenWeatherMap::Request::Forecast](https://metacpan.org/pod/Weather::OpenWeatherMap::Request::Forecast) and [Weather::OpenWeatherMap::Result::Forecast](https://metacpan.org/pod/Weather::OpenWeatherMap::Result::Forecast)), in which case `days => $count` and/or `hourly => $bool` can be specified. If passed `find => 1`, requests search results for a given location name or latitude & longitude; see [Weather::OpenWeatherMap::Request::Find](https://metacpan.org/pod/Weather::OpenWeatherMap::Request::Find) and [Weather::OpenWeatherMap::Result::Find](https://metacpan.org/pod/Weather::OpenWeatherMap::Result::Find). Any extra arguments are passed to the constructor for the appropriate Request subclass; see [Weather::OpenWeatherMap::Request](https://metacpan.org/pod/Weather::OpenWeatherMap::Request). # SEE ALSO [Weather::OpenWeatherMap::Result](https://metacpan.org/pod/Weather::OpenWeatherMap::Result) [POEx::Weather::OpenWeatherMap](https://metacpan.org/pod/POEx::Weather::OpenWeatherMap) # AUTHOR Jon Portnoy