(Clojure)サーバーにやさしい逆引き天気予報
[追記] tenkijp の rss サービスが終わってしまいました。下記プログラムももう使えません。
ポイント
clojure.core.cache で取得データを5分間保持しサーバー負荷を軽減しています。replなどの起動しっぱなしの実行環境でなければ意味はありませんが。
依存ライブラリ
:dependencies [[org.clojure/clojure "1.5.1"] [org.clojure/data.zip "0.1.1"] [org.clojure/core.cache "0.6.3"]]
実行例
関東甲信越地方で予報に「雪」が含まれるものを検索。
50 と 77 が地域を表すIDです。report に 50 77 を指定すると、「50,新潟県 下越(新潟)」~「76,山梨県 東部・富士五湖(河口湖)」の間の全地域が検索対象になります。
地域IDの一覧も、コードと一緒にアップしてあります。
tenki.core> (require '[clojure.pprint :refer [pprint]]) nil tenki.core> (->> (report #"雪" 50 77) (sort-by :forecast) (map (juxt :forecast :city)) pprint) (["18日(火) 曇時々雪 3℃/-1℃" "新潟県 下越(新潟)"] ["18日(火) 雪時々止む(雪は時々止む) ---/---" "新潟県 中越(長岡)"] ["18日(火) 雪時々止む(雪は時々止む) 3℃/1℃" "新潟県 上越(高田)"] ["19日(水) 曇一時雪 3℃/-2℃" "新潟県 上越(高田)"] ["19日(水) 雪のち曇 2℃/-2℃" "新潟県 中越(長岡)"] ["19日(水) 雪のち曇 3℃/0℃" "新潟県 下越(新潟)"] ["21日(金) 曇時々雪 0℃/-5℃" "群馬県 北部(みなかみ)"] ["21日(金) 曇時々雪 1℃/-1℃" "新潟県 中越(長岡)"] ["21日(金) 曇時々雪 1℃/-1℃" "新潟県 上越(高田)"] ["21日(金) 曇時々雪 1℃/-4℃" "長野県 北部(長野)"] ["21日(金) 曇時々雪 2℃/-1℃" "新潟県 下越(新潟)"] ["21日(金) 曇時々雪 2℃/0℃" "新潟県 佐渡(相川)"] ["22日(土) 曇一時雪 3℃/-1℃" "新潟県 下越(新潟)"] ["22日(土) 曇一時雪 3℃/-1℃" "新潟県 中越(長岡)"] ["22日(土) 曇一時雪 3℃/-1℃" "新潟県 上越(高田)"] ["22日(土) 曇一時雪 3℃/-1℃" "新潟県 佐渡(相川)"] ["26日(水) 晴一時雪 10℃/2℃" "栃木県 南部(宇都宮)"] ["26日(水) 晴一時雪 11℃/-1℃" "栃木県 北部(大田原)"] ["26日(水) 晴一時雪(雨の可能性) 10℃/1℃" "群馬県 南部(前橋)"] ["26日(水) 晴一時雪(雨の可能性) 8℃/-1℃" "長野県 中部(松本)"] ["26日(水) 晴一時雪(雨の可能性) 8℃/0℃" "山梨県 東部・富士五湖(河口湖)"] ["26日(水) 晴一時雪(雨の可能性) 9℃/-1℃" "山梨県 中・西部(甲府)"] ["26日(水) 晴一時雪(雨の可能性) 9℃/-2℃" "長野県 南部(飯田)"] ["26日(水) 曇一時雪 10℃/0℃" "長野県 北部(長野)"] ["26日(水) 曇時々雪 6℃/-4℃" "群馬県 北部(みなかみ)"] ["27日(木) 晴一時雪 11℃/-2℃" "長野県 北部(長野)"]) nil tenki.core>
おわりに
core.cacheを初めて使いました。
少し癖のあるモジュールですが、今回のように期限付きのメモ化を実現するのに有効のようです。