class MeteoUB::Data
Attributes
data_uri[RW]
datetime[RW]
datetime_max[RW]
datetime_min[RW]
humidity[RW]
max_wind_speed[RW]
max_wind_speed_km_h[RW]
precipitation[RW]
pressure[RW]
rain[RW]
raw_data[RW]
sunrise[RW]
sunset[RW]
temperature[RW]
temperature_max[RW]
temperature_min[RW]
windrose[RW]
Public Class Methods
new(params = {})
click to toggle source
# File lib/meteoub-gem.rb, line 29 def initialize(params = {}) @data_uri = URI(DATA_URL) @maxmin_uri = URI(MAXMIN_URL) parse if get end
Public Instance Methods
get()
click to toggle source
# File lib/meteoub-gem.rb, line 35 def get @raw_data = Net::HTTP.get(@data_uri).split("\n") @raw_maxmin = Net::HTTP.get(@maxmin_uri).split("\n") true rescue false end
parse()
click to toggle source
# File lib/meteoub-gem.rb, line 43 def parse @datetime = DateTime.strptime(@raw_data[0] + " " + @raw_data[1] + " UTC", "%d-%m-%y %k:%M %Z") @temperature = @raw_data[2].to_f @pressure = @raw_data[10].to_f @humidity = @raw_data[7].to_f @sunrise = parse_date(@raw_data[19]) @sunset = parse_date(@raw_data[20]) @rain = @raw_data[22].to_i == 1 @precipitation = @raw_data[21].to_i @max_wind_speed = @raw_data[12].to_f @max_wind_speed_km_h = @max_wind_speed * 3.6 @windrose = parse_windrose(@raw_data[13].to_f) @temperature_max, @datetime_max = parse_maxmin(@raw_maxmin[0]) @temperature_min, @datetime_min = parse_maxmin(@raw_maxmin[1]) end
parse_date(date_raw)
click to toggle source
# File lib/meteoub-gem.rb, line 59 def parse_date(date_raw) hour, minutes = sanitize_time(date_raw.split(":")) DateTime.strptime(@raw_data[0] + " #{hour}:#{minutes} UTC", "%d-%m-%y %k:%M %Z") end
parse_maxmin(maxmin_raw)
click to toggle source
# File lib/meteoub-gem.rb, line 64 def parse_maxmin(maxmin_raw) temperature, time, date = maxmin_raw.split(" ") hour, minutes = sanitize_time(time.split(":")) [temperature.to_f, DateTime.strptime("#{date} #{hour}:#{minutes} UTC", "%Y%m%d %k:%M %Z")] end
parse_windrose(windrose_raw)
click to toggle source
cbc.riocean.com/wstat/012006rose.html
# File lib/meteoub-gem.rb, line 79 def parse_windrose(windrose_raw) case(windrose_raw) when (0..11.25) return "N" when (11.26..33.75) return "NNE" when (33.76..56.25) return "NE" when (56.26..78.75) return "ENE" when (78.76..101.25) return "E" when (101.26..123.75) return "ESE" when (123.76..146.25) return "SE" when (146.26..168.75) return "SSE" when (168.76..191.25) return "S" when (191.16..213.75) return "SSW" when (213.76..236.25) return "SW" when (236.26..258.75) return "WSW" when (258.76..281.25) return "W" when (281.26..303.75) return "WNW" when (303.76..326.25) return "NW" when (326.26..348.75) return "NNW" when (348.76..360.0) return "N" else return "???" end end
sanitize_time(time_split)
click to toggle source
# File lib/meteoub-gem.rb, line 70 def sanitize_time(time_split) if time_split[1] == "60" time_split[1] = 0 time_split[0] = time_split[0].to_i + 1 end time_split end
save()
click to toggle source
# File lib/meteoub-gem.rb, line 120 def save measure = Measure.new({:datetime => @datetime, :temperature => @temperature}) measure.save end