diff --git a/app/models/ruling_weather_cache.rb b/app/models/ruling_weather_cache.rb new file mode 100644 index 0000000..c02d235 --- /dev/null +++ b/app/models/ruling_weather_cache.rb @@ -0,0 +1,7 @@ +class RulingWeatherCache + include Mongoid::Document + include Mongoid::Timestamps + field :cache + field :cache_time , :type=> DateTime, :default=> DateTime.now + belongs_to :ruling_weather_setting +end \ No newline at end of file diff --git a/app/models/ruling_weather_setting.rb b/app/models/ruling_weather_setting.rb index 34eb232..a780107 100644 --- a/app/models/ruling_weather_setting.rb +++ b/app/models/ruling_weather_setting.rb @@ -7,6 +7,7 @@ class RulingWeatherSetting field :location, type: String, default: "" field :dataid, type: String, default: "" field :observatory_name, type: String, default: "" + has_one :ruling_weather_cache def get_now_info(custom_location=nil,custom_dataid=nil,custom_observatory_name=nil) time_now = DateTime.now.utc.new_offset(self.time_offset) today = time_now.strftime("%Y-%m-%d") @@ -23,18 +24,35 @@ class RulingWeatherSetting "locationName" => custom_location} res = Net::HTTP.get_response(URI.parse("#{url}?#{data.to_query}")) content = JSON.parse(res.body) - weather_data = get_weather_data(content) - mint = get_element_value(weather_data["MinT"]).to_i #最低溫度(攝氏度) - maxt = get_element_value(weather_data["MaxT"]).to_i #最高溫度(攝氏度) - avgt = get_element_value(weather_data["T"]).to_i #平均溫度(攝氏度) - rain_rate = get_element_value(weather_data["PoP12h"]).to_i #降雨機率(百分比) - uvi = get_element_value(weather_data["UVI"],0).to_i #紫外線指數(數值) - uvi_text = get_element_value(weather_data["UVI"],1).to_s #紫外線指數(文字) - uvi_text = uvi_text.blank? ? I18n.t("ruling_weather.none") : uvi_text - rh = get_element_value(weather_data["RH"]).to_i #相對溼度 - wx_text = get_element_value(weather_data["Wx"],0).to_s #天氣現象(文字) - wx_code = get_element_value(weather_data["Wx"],1).to_i #天氣現象(編碼) - ws = get_element_value(weather_data["WS"]).to_i #風速(m/s) + cahche_model = self.ruling_weather_cache + if cahche_model.nil? + cahche_model = RulingWeatherCache.create(:cache=>{},:ruling_weather_setting=>self) + end + cache = cahche_model.cache rescue {} + weather_data = get_weather_data(content) rescue {} + if (weather_data.count == 0 rescue true) + mint = cache["mint"].to_i + maxt = cache["maxt"].to_i + avgt = cache["avgt"].to_i + rain_rate = cache["rain_rate"].to_i + uvi = cache["uvi"].to_i + uvi_text = cache["uvi_text"].to_s + rh = cache["rh"].to_i + wx_text = cache["wx_text"].to_s + wx_code = cache["wx_code"].to_i + ws = cache["ws"].to_i + else + mint = get_element_value(weather_data["MinT"]).to_i #最低溫度(攝氏度) + maxt = get_element_value(weather_data["MaxT"]).to_i #最高溫度(攝氏度) + avgt = get_element_value(weather_data["T"]).to_i #平均溫度(攝氏度) + rain_rate = get_element_value(weather_data["PoP12h"]).to_i #降雨機率(百分比) + uvi = get_element_value(weather_data["UVI"],0).to_i #紫外線指數(數值) + uvi_text = get_element_value(weather_data["UVI"],1).to_s #紫外線指數(文字) + rh = get_element_value(weather_data["RH"]).to_i #相對溼度 + wx_text = get_element_value(weather_data["Wx"],0).to_s #天氣現象(文字) + wx_code = get_element_value(weather_data["Wx"],1).to_i #天氣現象(編碼) + ws = get_element_value(weather_data["WS"]).to_i #風速(m/s) + end if wx_code < 10 wx_code = "0" + wx_code.to_s else @@ -55,7 +73,11 @@ class RulingWeatherSetting res2 = Net::HTTP.get_response(URI.parse("#{url2}?#{data2.to_query}")) content2 = JSON.parse(res2.body) weather_data2 = get_weather_data(content2) rescue {} - rain = weather_data2["NOW"]["elementValue"].to_f rescue 0.0 + if (weather_data2.count == 0 rescue true) + rain = cache["rain"] + else + rain = weather_data2["NOW"]["elementValue"].to_f rescue 0.0 + end end result = {"mint" => mint, "maxt" => maxt, @@ -68,6 +90,10 @@ class RulingWeatherSetting "wx_svg" => wx_svg, "ws" => ws, "rain" => rain} + cahche_model.update(:cache=>result,:cache_time=>time_now) + if uvi_text.blank? + result["uvi_text"] = I18n.t("ruling_weather.none") + end return result end def test diff --git a/modules/ruling_weather/_ruling_weather_widget1.html.erb b/modules/ruling_weather/_ruling_weather_widget1.html.erb index c63e878..db0d860 100644 --- a/modules/ruling_weather/_ruling_weather_widget1.html.erb +++ b/modules/ruling_weather/_ruling_weather_widget1.html.erb @@ -1,52 +1,98 @@