class Weatherbot::API

Attributes

cloudiness[RW]
cloudiness24[RW]
cloudiness48[RW]
cloudiness72[RW]
condition[RW]
condition24[RW]
condition48[RW]
condition72[RW]
coordinates[RW]
country[RW]
google_maps[RW]
hr24_dt[RW]
hr48_dt[RW]
hr72_dt[RW]
humidity[RW]
humidity24[RW]
humidity48[RW]
humidity72[RW]
location[RW]
location_name[RW]
report_time[RW]
response_code[RW]
sunrise[RW]
sunset[RW]
temp24[RW]
temp48[RW]
temp72[RW]
temp_avg[RW]
temp_celsius[RW]
wind_direction[RW]
wind_direction24[RW]
wind_direction48[RW]
wind_direction72[RW]
wind_speed[RW]
wind_speed24[RW]
wind_speed48[RW]
wind_speed72[RW]

Public Class Methods

current_weather(location) click to toggle source

Takes user input to enter into URL query & gets current weather conditions in imperial units

# File lib/api.rb, line 17
def self.current_weather(location)
  # query sample: 'https://api.openweathermap.org/data/2.5/weather?q=new+york&appid=3207703ee5d0d14e6b6a53d10071018f&units=imperial'
  response = HTTParty.get("https://api.openweathermap.org/data/2.5/weather?q=#{location}&appid=3207703ee5d0d14e6b6a53d10071018f&units=imperial")
  parsed = response.parsed_response
  @current = self.new
  @current.response_code = parsed["cod"]

  # Check for invalid entry
  if @current.response_code === "404"
    puts "\n\nInvalid location, please enter a valid location.\n\n"
    return
  else
    # Assign attributes to current weather object
  @current.coordinates = parsed["coord"].values.reverse.join(", ")
  @current.location_name = parsed["name"]
  @current.report_time = Time.at(parsed["dt"])
  @current.temp_avg = parsed["main"]["temp"]
  @current.condition = parsed["weather"].first["description"]
  @current.cloudiness = parsed["clouds"]["all"]
  # @current.pressure = parsed["main"]["pressure"]
  @current.humidity = parsed["main"]["humidity"]
  @current.wind_speed = parsed["wind"]["speed"]
  @current.sunrise = Time.at(parsed["sys"]["sunrise"])
  @current.sunset = Time.at(parsed["sys"]["sunset"])
  @current.wind_direction = degToCompass(parsed["wind"]["deg"])
  @current.temp_celsius = toCelsius(parsed["main"]["temp"])

  # Open query in browser to Google Maps
  @current.google_maps = "https://www.google.com/maps/place/#{@current.coordinates.gsub(" ", "")}"
  @google_maps_link = @current.google_maps

  # Check for odd locations with no country key
  if parsed.fetch("sys").has_key?("country")
    @current.country = parsed["sys"]["country"]
  else
    @current.country = nil
  end


  end

  @current
end
forecast(location) click to toggle source

Takes user input to enter into URL query for 3 day forecast in imperial units

# File lib/api.rb, line 63
def self.forecast(location)
  # query sample: https://api.openweathermap.org/data/2.5/forecast?q=new+york&appid=3207703ee5d0d14e6b6a53d10071018f&units=imperial
  response = HTTParty.get("https://api.openweathermap.org/data/2.5/forecast?q=#{location}&appid=3207703ee5d0d14e6b6a53d10071018f&units=imperial")
  parsed = response.parsed_response
  forecast = self.new

  forecast.location_name = @current.location_name
  # 24/48/72hr date
  forecast.hr24_dt = parsed["list"][8]["dt_txt"]
  forecast.hr48_dt = parsed["list"][16]["dt_txt"]
  forecast.hr72_dt = parsed["list"][24]["dt_txt"]
  # 24/48/72hr temp
  forecast.temp24 = parsed["list"][8]["main"]["temp"]
  forecast.temp48 = parsed["list"][16]["main"]["temp"]
  forecast.temp72 = parsed["list"][24]["main"]["temp"]
  # 24/48/72hr condition
  forecast.condition24 = parsed["list"][8]["weather"][0]["description"]
  forecast.condition48 = parsed["list"][16]["weather"][0]["description"]
  forecast.condition72 = parsed["list"][24]["weather"][0]["description"]
  # 24/48/72hr cloudiness
  forecast.cloudiness24 = parsed["list"][8]["clouds"]["all"]
  forecast.cloudiness48 = parsed["list"][16]["clouds"]["all"]
  forecast.cloudiness72 = parsed["list"][24]["clouds"]["all"]
  # 24/48/72hr humidity
  forecast.humidity24 = parsed["list"][8]["main"]["humidity"]
  forecast.humidity48 = parsed["list"][16]["main"]["humidity"]
  forecast.humidity72 = parsed["list"][24]["main"]["humidity"]
  # 24/48/72hr wind speed & direction
  forecast.wind_speed24 = parsed["list"][8]["wind"]["speed"]
  forecast.wind_speed48 = parsed["list"][16]["wind"]["speed"]
  forecast.wind_speed72 = parsed["list"][24]["wind"]["speed"]
  forecast.wind_direction24 = degToCompass(parsed["list"][8]["wind"]["deg"])
  forecast.wind_direction48 = degToCompass(parsed["list"][16]["wind"]["deg"])
  forecast.wind_direction72 = degToCompass(parsed["list"][24]["wind"]["deg"])

  # Open query in browser to Google Maps
  forecast.google_maps = "https://www.google.com/maps/place/#{@current.coordinates.gsub(" ", "")}"
  @google_maps_link = @current.google_maps

  # Output 3 day forecast
  puts "\n-------------------------------\n"
  puts "\n\nIn 24 Hours:"
  puts "\nReport Time:      #{forecast.hr24_dt}"
  puts "Location:         #{forecast.location_name},  #{@current.country}"
  puts "Google Maps:      #{forecast.google_maps}"
  puts "\nTemperature:      #{forecast.temp24}ºF / #{toCelsius(forecast.temp24)}ºC"
  puts "Condition:        #{forecast.condition24.capitalize}"
  puts "Cloudiness:       #{forecast.cloudiness24}%"
  puts "\nHumidity:         #{forecast.humidity24}%"
  puts "Wind Speed:       #{forecast.wind_speed24} mph"
  puts "Wind Direction:   #{forecast.wind_direction24}"

  puts "\n-------------------------------\n"
  puts "\n\nIn 48 Hours:"
  puts "\nReport Time:      #{forecast.hr48_dt}"
  puts "Location:         #{forecast.location_name},  #{@current.country}"
  puts "Google Maps:      #{forecast.google_maps}"
  puts "\nTemperature:      #{forecast.temp48}ºF / #{toCelsius(forecast.temp48)}ºC"
  puts "Condition:        #{forecast.condition48.capitalize}"
  puts "Cloudiness:       #{forecast.cloudiness48}%"
  puts "\nHumidity:         #{forecast.humidity48}%"
  puts "Wind Speed:       #{forecast.wind_speed48} mph"
  puts "Wind Direction:   #{forecast.wind_direction48}"

  puts "\n-------------------------------\n"
  puts "\n\nIn 72 Hours:"
  puts "\nReport Time:      #{forecast.hr72_dt}"
  puts "Location:         #{forecast.location_name}, #{@current.country}"
  puts "Google Maps:      #{forecast.google_maps}"
  puts "\nTemperature:      #{forecast.temp72}ºF / #{toCelsius(forecast.temp72)}ºC"
  puts "Condition:        #{forecast.condition72.capitalize}"
  puts "Cloudiness:       #{forecast.cloudiness72}%"
  puts "\nHumidity:         #{forecast.humidity72}%"
  puts "Wind Speed:       #{forecast.wind_speed72} mph"
  puts "Wind Direction:   #{forecast.wind_direction72}"

end
locations() click to toggle source
# File lib/api.rb, line 12
def self.locations
  @@locations
end
new() click to toggle source
# File lib/api.rb, line 7
def initialize
  @location = location
  @@locations << self
end