Accuweather

Get weather information for cities around the world using the accuweather API. Includes temperature, pressure, humidity, weather text and GPS coordinates.

Installation

Add this line to your application's Gemfile:

gem 'accuweather'

And then execute:

$ bundle

Or install it yourself as:

$ gem install accuweather

Usage

Search for an accuweather location:

location_array = Accuweather.city_search(name: 'vancouver')
vancouver = location_array.first

vancouver.id        # => 'cityId:53286'
vancouver.city      # => 'Vancouver'
vancouver.state     # => 'Canada (British Columbia)'
vancouver.latitude  # => '49.2448'
vancouver.longitude # => '123.1154'

Search for weather conditions for a given location id:

current_weather = Accuweather.get_conditions(location_id: 'cityId:53286').current
current_weather.temperature    # => '41'
current_weather.weather_text   # => 'Partly Sunny'
current_weather.pressure       # => '30.35'
current_weather.humidity       # => '43%'
current_weather.cloud_cover    # => '40%'

Get forecast details:

weather_forecast = Accuweather.get_conditions(location_id: 'cityId:53286').forecast
last_forecast_day = weather_forecast.last
last_forecast_day.date        # => "12/3/2015"
last_forecast_day.day_of_week # => "Thursday"
last_forecast_day.sunrise     # => "7:49 AM"
last_forecast_day.sunset      # => "4:16 PM"

# Get the dates, daytime high and nighttime low temperatures
weather_forecast.map(&:date)                             #  => ["11/27/2015", "11/28/2015", "11/29/2015", "11/30/2015", "12/1/2015", "12/2/2015", "12/3/2015"]
weather_forecast.map(&:daytime).map(&:high_temperature)  # => ["45", "45", "47", "44", "44", "48", "48"]
weather_forecast.map(&:nighttime).map(&:low_temperature) # => ["27", "28", "31", "32", "40", "42", "36"]

Here is a full list of attributes for daytime and nighttime forecasts:

weather_text,weather_text_long,weather_icon,high_temperature,low_temperature,real_feel_high,real_feel_low,wind_speed,wind_direction,wind_gust,max_uv,rain_amount,snow_amount,ice_amount,precipitation_amount,thunderstorm_probability,rain_probability,snow_probability,ice_probability and precipitation_probability

Get the units for the conditions:

units = Accuweather.get_conditions(location_id: 'cityId:53286').units
units.temperature  # => 'F'
units.distance     # => 'MI'
units.speed        # => 'MPH'

Get more information on the location including time and time zone:

local = Accuweather.get_conditions(location_id: 'cityId:53286').local
local.time                   # => '13:41'
local.time_zone              # => '-8'
local.time_zone_abbreviation # => 'PST'

Imperial units are returned by default, but metric results are available:

Accuweather.get_conditions(location_id: 'cityId:53286', metric: true)

Each Accuweather::Conditions object implements a to_s method that displays all attribute name, value pairs. This makes it easy to explore the API. For example:

Accuweather.get_conditions(location_id: 'cityId:53286').local.to_s
# => "city: Vancouver, state: British Columbia, latitude: 49.2448, longitude: -123.1154, time: 16:58, time_zone: -8, obs_daylight: 0, current_gmt_offset: -8, time_zone_abbreviation: PST"

Development

Run rake to run the tests

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/accuweather.