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