class ClimateTracker::NOAA_Data
Attributes
data_avg[RW]
data_dump[RW]
data_type[RW]
delta_temp[RW]
pull_count[RW]
re_pull[RW]
year1_avgs[RW]
year2_avgs[RW]
Public Class Methods
new()
click to toggle source
# File lib/climate_tracker/noaa_data.rb, line 7 def initialize @data_type = "MNTM" @pull_count = 0 @re_pull = true #Possible Data Types # > MMNT, MMXT, MNTM (Min T, Max T, and Avg T monthly) # > TCPC (Total Precip) TSNW (Total snowfall) end
states()
click to toggle source
# File lib/climate_tracker/noaa_data.rb, line 16 def self.states if @@states.empty? #populate available states uri = URI.parse("http://www.ncdc.noaa.gov/cdo-web/api/v2/locations?locationcategoryid=ST&limit=52") request = Net::HTTP::Get.new(uri.request_uri, initheader = @@header) http = Net::HTTP.new(uri.host, uri.port).start response = http.request(request) data = JSON.parse(response.body) data["results"].collect do |result| st_name = result["name"].upcase st_id = result["id"] @@states[st_name] = st_id end end @@states.keys end
Public Instance Methods
gather_values()
click to toggle source
# File lib/climate_tracker/noaa_data.rb, line 56 def gather_values total_values = 0.000 @data_dump["results"].each do |result| total_values += result["value"].to_f end @data_avg = (((total_values / @data_dump["results"].size)*(9.0/5.0))+32.0) @data_avg #float end
pull_data(date, state)
click to toggle source
# File lib/climate_tracker/noaa_data.rb, line 33 def pull_data(date, state) #NOAA program requires range of 1 year for dataset ANNUAL. Create 1 year ago range from given date date_array = date.split("-") date_array[0] = date_array[0].to_i-1 last_year_date = date_array.join("-") year_date = date #retrieve appropriate state_code and download temperatures for above range if @@states.empty? self.class.states end state_code = @@states[state] uri = URI.parse("http://www.ncdc.noaa.gov/cdo-web/api/v2/data?datasetid=ANNUAL&datatypeid=#{@data_type}&locationid=#{state_code}&startdate=#{last_year_date}&enddate=#{year_date}&units=metric&limit=1000") request = Net::HTTP::Get.new(uri.request_uri, initheader = @@header) http = Net::HTTP.new(uri.host, uri.port).start response = http.request(request) @data_dump = JSON.parse(response.body) #returns are only for the month of the years in which this were called. (ie. startdate XXXX-02-01 will only display February) ur @pull_count += 1 @re_pull = false self end
temp_difference(year1, year2, state)
click to toggle source
# File lib/climate_tracker/noaa_data.rb, line 67 def temp_difference(year1, year2, state) if self.re_pull == true @year1_avgs = self.pull_data(year1, state).gather_values elsif @year1_avgs == nil @year1_avgs = @data_avg elsif @year2_avgs != @data_avg @year1_avgs = @data_avg end @year2_avgs = self.pull_data(year2, state).gather_values delta_temp = (@year2_avgs - @year1_avgs).round(2) delta_percent = ((@year2_avgs/@year1_avgs)*100).round(2) if delta_temp > 0 #if delta_temp is positive than temp went up delta_descr = "warmer" delta_descr_2 = "increase" else delta_descr = "colder" delta_descr_2 = "decrease" end @delta_temp = [delta_temp, delta_percent, delta_descr, delta_descr_2] #hash[state] = [temp change, %, warmer/colder, increase/decrease] @delta_temp end