Jon Portnoy


Weather::OpenWeatherMap - Interface to the OpenWeatherMap API


  use Weather::OpenWeatherMap;

  my $api_key = 'foo';

  my $wx = Weather::OpenWeatherMap->new(
    api_key => $api_key,

  # Current conditions:
  my $current = $wx->get_weather(
    location => 'Manchester, NH',
  my $tempf = $current->temp_f;
  my $wind  = $current->wind_speed_mph;
  # (see Weather::OpenWeatherMap::Result::Current)

  # Forecast conditions:
  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)
  # (see Weather::OpenWeatherMap::Result::Forecast)

  # Find a city:
  my $search = $wx->get_weather(
    location => 'Manchester',
    find     => 1,
    max      => 5,
  for my $place ($search->list) {
    my $region = $place->country;
    # ...
  # (see Weather::OpenWeatherMap::Result::Find)


An object-oriented interface to retrieving weather conditions & forecasts from OpenWeatherMap ( for a given city, latitude/longitude, or OpenWeatherMap city code.

This module provides a simple blocking (LWP::UserAgent) interface to weather retrieval; if you have an event loop handy, the included Weather::OpenWeatherMap::Request & Weather::OpenWeatherMap::Result classes can be used to create appropriate HTTP::Request instances and parse responses from non-blocking HTTP clients.

See POEx::Weather::OpenWeatherMap for a non-blocking implementation using the POE ecosystem.



Your OpenWeatherMap API key.

(See to register for free.)


A boolean value indicating whether successful results should be cached to disk via Weather::OpenWeatherMap::Cache.

Defaults to false. This may change in a future release.


The directory in which cache files are saved. The default may be fine; see Weather::OpenWeatherMap::Cache.


The duration (in seconds) for which cache files are considered valid; see Weather::OpenWeatherMap::Cache.


The 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),  



    # '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 specify the number of days to fetch
    # (up to 14):
    days => 3,

    # Optional tag for identifying the response to this request:
    tag  => 'foo',

Request a weather report for the given location =>.

The location can be a 'City, State' or 'City, Country' string, an OpenWeatherMap city code, or a 'lat X, long Y' string.

Requests the current weather by default (see Weather::OpenWeatherMap::Request::Current).

If passed forecast => 1, requests a weather forecast (see Weather::OpenWeatherMap::Request::Forecast), in which case days => $count can be specified (up to 14).

If passed find => 1, requests search results for a given location name or latitude & longitude; see Weather::OpenWeatherMap::Request::Find.

Any extra arguments are passed to the constructor for the appropriate Request subclass; see Weather::OpenWeatherMap::Request.




Jon Portnoy <>