class AleAir::FetchJSON

Attributes

danger_level[R]
irc_string[R]
location[R]
message[R]
quality[R]
secret_token[W]
status[R]
time_measured[R]

Public Class Methods

new(token = '') click to toggle source
# File lib/ale_air/fetch_json.rb, line 9
def initialize(token = '')
  @secret_token = token
end

Public Instance Methods

air_quality(city = nil) click to toggle source
# File lib/ale_air/fetch_json.rb, line 13
def air_quality(city = nil)
  unless @secret_token.nil?
    document = JSON.parse(RestClient.get 'https://api.waqi.info/search/?keyword=' + cleaned(city) + '&token=' + @secret_token)
    get_info(document)
  end 
end

Private Instance Methods

cleaned(chars = "") click to toggle source
# File lib/ale_air/fetch_json.rb, line 21
def cleaned(chars = "")
  URI.encode(chars.downcase.strip)
end
danger_lev(aqi=0) click to toggle source
# File lib/ale_air/fetch_json.rb, line 63
def danger_lev(aqi=0)
  case aqi
  when 0..50
    "Good"
  when 51..100
    "Moderate"
  when 101..150
    "Unhealthy for Sensitive Groups"
  when 151..200
    "Unhealthy"
  when 201..300
    "Very Unhealthy"
  else
    "Hazardous"
  end
end
get_info(document = nil) click to toggle source
# File lib/ale_air/fetch_json.rb, line 25
def get_info(document = nil)
  @status = "error"
  unless document.nil?
    if document["status"] == "ok"
      if document["data"].length > 0
        document["data"].each do |air|
          if !air["aqi"].nil? || !air["aqi"].empty?
            unless is_int(air["aqi"])
              @message = "Invalid Airquality Value"
              return false
            end      
            @status = "ok"
            @message = "Air Quality"
            @quality = air["aqi"]
            @time_measured = air["time"]["stime"] + ' ' + air["time"]["tz"]
            @location = air["station"]["name"]
            @danger_level = danger_lev(air["aqi"].to_i)
            @irc_string = "Air quality: " + air["aqi"] + " AQI " + danger_lev(air["aqi"].to_i) + " @ " + air["station"]["name"] + " " + @time_measured 
            return true
          else
            @message = "No Data Available"
          end
        end
      else
        @message = "No Stations Found"
      end
    else
      if !document["data"].nil?
        @message = document["data"]
      else
        @message = "Unknown Error"
        @message = document
      end
    end      
  end
  false
end
is_int(string) click to toggle source
# File lib/ale_air/fetch_json.rb, line 80
def is_int(string)
  Integer(string).is_a?(Integer)
rescue ArgumentError, TypeError
  false
end