Skip to content

weather.rb

TADA Tadashi edited this page Nov 10, 2017 · 4 revisions

その日の天気プラグイン

その日の天気を、その日の日記を最初に更新する時に取得して保存し、それぞれの日の日記の上部に表示します。

入手方法

tDiary-1.5.5以降に収録されています。

使い方

インストール方法

weatherプラグインを有効にしてください。

次に、ブラウザからtDiaryの設定画面を閲覧して「その日の天気」をクリックするか、tdiary.confを直接編集して、天気データをいただいてくるURLを@options['weather.url']に設定してください。

例えば、 NOAA National Weather Serviceを利用する場合には、http://weather.noaa.gov/から、Select a country...で国名を選んでGo!ボタンを押し、次に観測地点を選んでください。その時表示されたページのURLを、例えば、

@options['weather.url'] = 'http://weather.noaa.gov/weather/current/RJTI.html'

と書いてください。この例では東京ヘリポートの天気が記録されます。情報の二次利用が制限されている場合がありますので、そのようなWWWページから情報を取得しないように注意してください。

これで、新しい日の日記を書く度に、設定したURLから天候データを取得して、表示するようになるはずです。天気は、

<div class="weather"><span class="weather">hh:mm現在<a href="取得元URL">天気(温度)</a></span></div>

という形式でそれぞれの日の日記の上に表示されます。必要ならば、CSSを編集してくだ さい。

日記に使用しているWWWサーバーからサーバーの権限でWWWページの閲覧ができる必要があります。

1.1.2.29以降では、デフォルトでは携帯端末からの閲覧の際には天気が表示されないようになっています。表示されるようにしたい場合は、

@options['weahter.show_mobile'] = true

を設定してください。

天気の表示内容は、html_stringとi_html_stringが生成しています。天気や温度以外に、風向きなどのデータも保存されていますので、必要な場合はそれぞれのメソッドを編集あるいはうわがきしてカスタマイズしてください。

保存される天気データについて

天気データは、@options['weather.dir']に設定したディレクトリか、 @cache_path/weather/ ディレクトリ以下に、年/年月.weather というファイル名で保存されます。タブ区切りのテキストファイルですので必要に応じて編集することができます。タブの数を変えてしまわないように気をつけて編集してください。フォーマットの詳細は、Weather.to_sメソッドを参照してください。

天気データは、

  • 書いてる日記の日付と現在の日付が一致し、
  • その日の天気データがまだ取得されていないか、前回の取得時にエラーがあった

場合に、取得されます。

オプション

指定しなくてもいい項目については、プラグインのファイル内を参照してください。

@options['weather.url']

天気データを得られるWWWページのURL。例えば、

@options['weather.url'] = 'http://weather.noaa.gov/weather/current/RJTI.html'

情報の二次利用が制限されている場合がありますので、そのようなWWWページから情報を取得しないように注意してください。

天気データのタイムゾーンについて

1.1.2.20から天気データをタイムゾーンと一緒に記録するようにしました。日記自体のタイムゾーンと関係なく天気の時刻を表示できます。これで転勤属のあなたも安心。1.1.2.20以降を使って、環境変数TZかオプション@options['weather.tz']が設定されている場合にタイムゾーンを記録します。詳しくはプラグインに含まれている文書をご覧ください。

天候の翻訳について

NWSからのデータは英語ですので、適当に日本語に直してから出力するようにしてあります。翻訳は、WeatherTranslatorモジュールによっていて、変換表は、 Weatherクラスに、Words_jaというハッシュ定数として与えてあります。

語彙はまだまだ充分ではないと思います。知らない単語は英語のまま表示されますので 、Words_jaに適宜追加してください。以下に書いていただければ、気づいたときに追加します。

  • この辺に書いてね (はーと 今朝方、浅間山の火山灰降ってましたね。 こんな感じで良いんでしょうか?

    [%r[ *Volcanic ash *]i, '"火山灰"'],

Light small hail and/or snow pellets showers と出ました。http://www.iknet.info/docs/howmetar.html で調べてみると

氷霰/雪霰(Small Hail/Snow Pellets)

って書いてあったんですが、・・・たぶん、「あられ」ですね。表示では、

Light small hail and/or 雪 pellets にわか雨

になってしまいましたが、「雪や氷の霰が一時的に軽く降った」ですね。(謎)

jun.o 2003/12/20 http://r1100r.zapto.org/diary/?date=20031220

天気の表示場所について

現在は、body_enter_procを使って天気を表示していますので、取得した天気は日記の本文の上に表示されます。日記の本文の下に表示したい場合には、最後の方のadd_body_enter_procをadd_body_leave_procに書きかえてください。

日記のタイトルの日付けの横に表示するには、skel/diary.rhtmlとskel/i.diary.rhtmlの編集も必要です。プラグインに提供されている設定の範囲外となるので今のところ積極的にサポートすることはできませんが、例えば下記のように編集してみて、必要でしたらCSSの調整もしてみてください。

Index:で始まる部分をコピーして(先頭に空白があれば、2つだけとりのぞいてください)、適当なファイル名で保存し、skelディレクトリやpluginディレクトリで patch < ファイル名 というコマンドを実行することでもファイルの編集ができます。

skel以下の変更例 -日付けの後にweather.rbで提供されるメソッドの実行結果を挿入します。

skel/diary.rhtml

下記の最初が「-」の行を、次にある最初が「+」の行のように書きなおしてください。

Index: diary.rhtml
===================================================================
RCS file: /hoge/moga/cvs/d/skel/diary.rhtml,v
retrieving revision 1.1.1.1.2.4
diff -u -u -r1.1.1.1.2.4 diary.rhtml
--- diary.rhtml	2003/04/11 10:29:09	1.1.1.1.2.4
+++ diary.rhtml	2003/04/14 16:19:22
@@ -4,7 +4,7 @@
if opt['show_nyear'] then
%><span class="nyear"><%%=nyear "<%= @date.strftime('%Y%m%d') %>" %%></span><%
end
-%> <span class="title"><%= title %></span>
+%> <span class="weather"><%%= weather( @date ) %%></span> <span class="title"><%= title %></span>
</h2>

<div class="body">

skel/i.diary.rhtml

diary.rhtmlと同じように、最初が「-」の行を、次にある最初が「+」の行のように書きなおしてください。

Index: i.diary.rhtml
===================================================================
RCS file: /hoge/moga/cvs/d/skel/i.diary.rhtml,v
retrieving revision 1.1.1.1.2.1
diff -u -u -r1.1.1.1.2.1 i.diary.rhtml
--- i.diary.rhtml	2003/03/21 14:24:30	1.1.1.1.2.1
+++ i.diary.rhtml	2003/04/14 16:19:22
@@ -1,5 +1,5 @@
<%# i.diary.rhtml $Revision: 1.8 $ %>
-<H2><%= @date.strftime( opt['date_format'] ) %> <%= title %></H2>
+<H2><%= @date.strftime( opt['date_format'] ) %> <%%= weather( @date ) %%><%= title %></H2>
<%%= body_enter_proc( Time::at( <%=@date.to_i%> ) ) %%>
<%= to_html( opt, :CHTML ) %>
<%%= body_leave_proc( Time::at( <%=@date.to_i%> ) ) %%><%

weather.rb自体の変更例 -div spanタグと、タイムスタンプを表示しないようにします。

HTML_STARTとHTML_END

天気のHTML断片の前後に付く文字列です。タイトル内に表示するようにする時には、上記の(i.)diary.rhtmlにタグを書いているので不要になります。下記の「+」で始まる行のように、空文字列にしちゃってください。

# time stampで始まるひとかたまり

ここで、HTML断片の「hh時mm分現在」という文字を作っています。日記タイトル内に表示するには邪魔だと思いますので、下記の「-」で始まる行を消去してください。

Index: weather.rb
===================================================================
RCS file: /hoge/moga/cvs/d/plugin/Attic/weather.rb,v
retrieving revision 1.1.2.27
diff -u -u -r1.1.2.27 weather.rb
--- weather.rb	2003/03/28 09:22:36	1.1.2.27
+++ weather.rb	2003/04/14 16:24:30
@@ -334,8 +334,8 @@
	attr_reader :date, :time, :url, :error, :data, :tz

	# magic numbers
-	HTML_START = '<div class="weather"><span class="weather">'
-	HTML_END = '</span></div>'
+	HTML_START = ''
+	HTML_END = ''
	WAITTIME = 10
	MAXREDIRECT = 10

@@ -346,21 +346,6 @@
	# edit this method to define how you show the weather
	def html_string
		r = "#{HTML_START}"
-
-		# time stamp
-		if @tz then
-		  tzbak = ENV['TZ']
-			ENV['TZ'] = @tz	# this is not thread safe...
-		end
-		if @data['timestamp'] then
-			r << Time::at( @data['timestamp'].to_i ).strftime( '%H:%M' ).sub( /^0/, '' )
-		else
-			r << Time::at( @time.to_i ).strftime( '%H:%M' ).sub( /^0/, '' )
-		end
-		r << '現在'
-		if @tz then
-		  ENV['TZ'] = tzbak
-		end

		# weather
		r << %Q|<a href="#{@url}">|

まだやるべきこと

  • 天気に応じたアイコンの表示 -どうやろうか?
  • NOAA以外からのデータ取得の検討…権利関係が複雑ですう(と思っているのはzundaだけか?)

謝辞

その日の天気プラグインのアイディアを提供してくださったhsbtさん、実装のヒントを提供してくださったzoeさんに感謝します。また、NOAAの情報を提供してくださったkotakさんに感謝します。

The author appreciates National Weather Service http://weather.noaa.gov/ making such valuable data available in public domain as described in http://www.noaa.gov/wx.html.

更新履歴

  • 2003-03-11 リリース-zunda

  • 2003-03-12 (1.1.2.19) 語彙に小雪(ただただしさん発案)とにわか雪を追加しました-zunda

  • 2003-03-17 (1.1.2.20) タイムゾーンを記録するようにしました-zunda

  • 2003-03-20 (1.1.2.23) 「Light drizzle - 小雨ではいかがでしょう?」に対応しました。ありがとうございました。-zunda [%r|\s*\blight drizzle\b\s*|i, '"小雨"'],

  • 2003-03-25 (1.1.2.25) 「"Haze"と出ました。「霞」でしょうか。」に対応しました。ありがとうございました。ついでに、mistを靄(もや)ではなくて霞(かすみ)としていた間違いを修正しました。僕の目にも霞が…(おい -zunda [%r|\s*\bmist\b\s*|i, '"靄"'], [%r|\s*\bhaze\b\s*|i, '"霞"'],

  • 2003-03-27 (1.1.2.26) sandを「黄砂」として追加しました。こさかさん、ありがとうございました。-zunda [%r|\s*\bsand\b\s*|i, '"黄砂"'],

  • 2003-03-28 (1.1.2.27) overcastを「曇」として追加しました。kotakさん、ありがとうございました。-zunda [%r|\s*\bovercast\b\s*|i, '"曇"'],

  • 2003-04-14 天気の表示場所について追記しました -zunda

  • 2003-04-15 (1.1.2.28) drizzleを「こぬか雨」として追加しました。light drizzleはもう入れてあったのにね。-zunda [%r|\s*\bdrizzle\b\s*|i, 'こぬか雨"'],

  • 2003-05-05 (1.1.2.29) 携帯端末での閲覧に対応しました。-zunda

  • 2003-05-07 (1.1.2.31) 「Light rainwith thunder/Cumulonimbus clouds observed」に対応しました。「雷ありの霧雨/積乱雲」でいかがでしょう?-zunda

    • "霧雨with thunder/℃umulonimbus clouds observed" といわれました。うーんなんて訳しましょう^^; [%r|\A(.)/(.)|, '"#{S.new( $1 ).translate( table )}/#{S.new( $2 ).translate( table )}"'], [%r|^(.?) with (.)$|i, '"#{S.new( $2 ).translate( table )}ありの#{S.new( $1 ).translate( table )}"'], [%r|\s*\bthunder( storm)?\b\s*|i, '"雷"'], [%r|\s*\bcumulonimbus clouds\b\s*|i, '"積乱雲"'], [%r|\s*\bobserved\b\s*|i, '""'], [%r|\s*\bC\b\s*|, '"℃"'],
  • 2003-05-07 (1.1.2.32) 「…during the past hour(s)」に対応。「直前まで…」でいかがでしょうか?halchanさんありがとうございました。-zunda [%r|^(.*?) during the past hours?$|i, '"直前まで#{S.new( $1 ).translate( table )}"'],

  • 2003-05-09 (1.1, tDiary-1.5.4に収録) tDiaryのCVSレポジトリに追加させていただきました。新1.1と旧1.1.2.32は同じものです。-zunda

  • 2003-05-26 (1.2) オプション名のtypoを修正しました。weahter.show_errorとweahter.show_mobileを使っていた方は、tdiary.confでそれぞれweather.show_errorとweather.show_mobileに変更して、これらのオプションを使っていなかった方はtdiary.confはそのまま、プラグイン本体をcvsレポジトリか上記ダウンロード元から更新してください。halchanさん、ご報告ありがとうございました。-zunda

  • 2003-06-03 (1.3) 「…in the vicinity」に対応。それほど詳しく訳出する必要がないかと思い、無視するようにしましたが、必要な方は、ソースの281行目くらいのコメントを外せば、「近辺で…」と訳します。こさかさん、ありがとうございました。さらに、単独で実行した場合には訳のテストをできるようにしました。ソースの最後の方をご覧ください。 -zunda #[%r|\s*\b([\w\s]+?) in the vicinity|i, '"近辺で#{S.new( $1).translate( table )}"'], [%r|\s*\bin the vicinity\b\s*|i, '""'],

  • 2003-06-06 (1.4) -zunda

    • データの古さチェックをするようにしました。デフォルトでは6時間以上古いデータは使いません。@option[weather.oldest']で調整できます。
    • towering cumulus cloudsに対応しました。 [%r|\s*\bcumulus clouds\b\s*|i, '"積雲"'], [%r|\s*\btowering\b\s*|i, '""'],
  • 2003-07-21 (1.5) -zunda

    • wwwブラウザから基本的な設定をできるようにしました
    • ruby-1.8.0の正規表現の書法に対応しました
  • 2003-07-22 (1.6) -zunda

    • デバッグコードの消し忘れを修正しました
  • 2003-07-24 (1.7, tDiary-1.5.5に収録) -zunda

    • drizzleの訳語がシンタックスエラーを出していたのを修正しました。このプラグインをお使いの方は早目に更新してください。 設定画面を表示した時に、 標準エラー出力にtrueまたはfalseの文字列を出力するようになっていました。 1.1.2.28の更新記録には律義に間違えたままのエントリーが書かれてる…。

    [%r|\s*\bdrizzle\b\s*|i, '"こぬか雨"'],

  • 2003-08-06 (1.8) -zunda

    • 稲光を追加しました。kotakさん、ありがとうございます。

    [%r[\s*\blightning\b\s*]i, '"稲光"'],

  • 2003-08-15 (1.9) -zunda

    [%r[\s*\bheavy rain showers?\b\s*]i, '"強いにわか雨"'],

  • 2004-08-10 (1.12) -zunda

    • 検索エンジンが天気を見ないようにしました。検索エンジンにも天気を見せたい場合は、設定画面から設定してください。
Clone this wiki locally