GAS(Google Apps Script)を使って天気通知システムを作りました。
「雨の日だけGmailで通知を送るシステム」です。
経緯
毎日スマホアプリで天気予報を見るのが面倒だったので。雨の日だけわかれば準備ができるので。
Webの天気情報をスクレイピングして、条件によってGmailを送るシステムを作りました。
GASを使った理由は3つあります。
- スクレイピングが簡単
- Gmailの送信が簡単
- 定期実行も簡単
手軽でとても便利です。簡単なツールをすぐ作れるところがGASの魅力です。
天気データをどこから取ってくるか
いくつかの天気サイトを確認したところ、HTMLの構造的にスクレイピングがしやすそうなYahoo天気を選びました。
GASにライブラリを導入する
GASでスクレイピングをするためには、ライブラリを導入する必要があります。
使ったライブラリは「Cheerio」です。
スクレイピング
スクレイピングするために、検証ツール(デベロッパーツール)を使って、Yahoo天気サイトを見ていきます。
HTMLを特定するために、idやclassが付いているところを探します。
天気情報を取る
まずは、天気情報(晴れとか雨)の文字を取得します。
HTMLを確認すると、
<p class="pict">......</p>
となっています。pictクラスが付与されていますのでこれを使いました。
そのままでは、空白スペースも取得されてしまうので、trim()メソッドで空白を削除します。
降水確率
メールには、降水確率ものせたいので降水確率も取得します。
同じようにHTMLを確認すると、tableタグの中に、
<tr class="precip">.....</tr>
が確認できますので、これを使います。
降水確率は、以下のようなテーブルになっていますので。。。
時間 | 0-6 | 6-12 | 12-18 | 18-24 |
降水 | 10% | 20% | 50% | 60% |
時間帯ごとに4つのデータを取得して、配列で保存します。
if文で分岐処理
スクレイピングでデータが取得できたので、あとは「雨」のときだけ、メールを送る処理を作ります。
条件式
if (weather.search("雨") != -1) {
// 雨の時の処理
}
search()メソッドは、最初の文字から最後の文字まで検索し、一致した位置を返すメソッドです。
検索文字列に一致するものが無い場合は、「-1」が出力されます。
なので、「雨」「雨のち晴れ」「晴れのち雨」のように「雨」という文字がどこかしらに入っている時は「-1」を返します。
GASでGmailを送る処理
GASでGmailを送るには、以下のメソッドを使います。
GmailApp.sendEmail(address, subject, body);
GASの教科書
参考にした本です。Amazonレビュー上位の本です。