天気予報をメールで届ける

〜雨のときだけメールする〜


動機


通常、何気なくTVやラジオをつけていれば、自然と天気予報が耳に入ってきます。 普段であればそれで良いのですが、朝の忙しい時間では天気予報の情報が手に入らないことがあります。 かといって、PCや携帯などで天気予報をチェックするのは面倒です。

雨や雪の日だけ、「今日は雨ですよ」と教えてくれる人がいると便利です。 つまり以下のことが機械的にできれば便利です

  1. サーバが天気予報を情報を得る
  2. 雨のときだけ携帯メールに情報を送信する
  3. 上記を定期的(例えば朝7時)に行う

To: hoge@hogehoge.com
From: hoge@hogehoge.com
Subject: 天気予報

 0  3  6  9 12 15 18 21
晴 晴 弱 弱 強 強 弱 弱
29 27 27 24 24 24 25 25

 0  3  6  9 12 15 18 21
曇 曇 弱 弱 曇 曇 晴 晴
24 24 24 25 25 29 27 26


9月10日(金)晴時々曇
9月11日(土)晴時々曇
9月12日(日)曇り
9月13日(月)曇り
9月14日(火)曇時々晴
9月15日(水)曇時々晴
Yahoo天気予報抜粋してメールにされた形式

プログラムの概要


プログラムは以下の手順になります。
  1. wgetで、天気予報の情報を得る
  2. 天気予報の情報を加工する(携帯メール用に不要な情報を削除、整形する)
  3. 予報に雨や雪が含まれるか調べる
  4. 雨か雪が含まれていたら、携帯にメール送信する。
  5. 上記のことを定期的にするために、上記のプログラムをcronに登録する

天気予報はWebサイトで見ることができます。ここでは、Yahoo天気予報を使うことにします。

Webファイルから情報を取得するには、lynxやwgetなどがあります。ここではwgetを使うことにします。 wgetはURLを指定するだけで、Webファイルをテキストファイルとして取得することができます。 実際は「-o」オプションを使って、標準出力に出力しています。

Webファイルを加工するのは地味な作業で、ここが一番大変です。Perlで色々加工します。 同時に、天気予報情報に雨または雪が含まれるかどうかを判定しておきます。

もし雨か雪が含まれていたら、メール送信します。 メール送信は、sendmailコマンドを使います。 mailコマンドは、人によって環境が違ったりして、意外とトラブルの元です。(*1)
sendmailは古いプログラムなので、すでに使っていない人もいるかもしれません。 しかし例えば、MTA(メールサーバ)として、Postfixなどを使っていても、Postfixにはsendmail互換のコマンドが実行できるようになっているので、問題ありません。
mailコマンドは普段使っていないから、.mailrcもいじっていないし大丈夫だろうと思ったりします。それでもトラブルが起きます。

プログラムはここに置いておきます。
後はcronに登録するだけです。


wgetの代わりにLinxを使うと・・・


Linxは、タグを解析した結果を表示させることが可能です。そのため、タグの処理が必要ありません。 しかし、ターミナルに表示することが想定されているので、cronで動かすときは注意が必要です。 具体的には環境変数TERMに、VT100を設定して起動してあげないといけません。