見出し画像

Google Apps Scriptで雨予報通知システムを作る

Google Apps Script(以下GAS)を使って「雨予報通知システム」を作りました。

「雨予報の時だけGmailでメールを送るシステム」です。


開発の経緯

このアプリを作ったきっかけは「天気アプリを毎日チェックするのって面倒だな。」と思ったことです。
雨予報の時だけ、通知が来たら便利だと思ったからです。



GASについて

このアプリはGASを使って作りました。
GASを使った理由は3つあります。

  1. スクレイピングが簡単

  2. Gmailの送信が簡単

  3. 定期実行も簡単

GASは、Googleのサービスをプログラミングで使うことができる便利なものです。Gmailやスプレッドシートなどのサービスをプログラミングで自動化できるのです。



プログラムの仕組み

このプログラムは大きく分けて2つの要素からなります。

  1. 天気情報をスクレイピングで取得してスプレッドシートに書き込む

  2. セルの中に「雨」という文字があった時だけGmailでメールを送る

というプログラムです。



天気情報をスクレイピングする

データの取得先

天気の情報は、Yahoo天気北西部(千葉)の天気をスクレイピングして取得しました。


スプレッドシートのIMPORTXML関数を使う

スクレイピングはスプレッドシートで行います。
スプレッドシートには、簡単にスクレイピングできるIMPORTXML関数があります。 
セルに = IMPORTXML(URL, XPathクエリ, locale) を入力することでスクレイピングができるのです。 
Xpathクエリは、ブラウザのデベロッパーツールで確認できます。



GASでコードを書く

スクレイピングでデータの取得ができたら、そのデータをプログラムで扱います。
スプレッドシートの拡張機能タブにある「Apps Script」を開きます。
これでコードを書くエディタが起動します。


サンプルプログラム

作ったサンプルコードをのせます。
プログラムは、4つの関数に分けて作成しました。

  1. スプレッドシートのセルの情報を取得する

  2. メールの作成

  3. メールの送信

  4. 取得したデータに「雨」という文字があったらGmailでメールを送信する


①スプレッドシートのセルの情報を取得する

// セルのデータを取得する
function getWeatherData({
  //1. 現在のスプレッドシートを取得
  let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  //2. シートを取得
  let sheet = spreadsheet.getSheetByName("天気データ");
  //3. セルの範囲を取得(開始行番号, 開始列番号, 行数, 列数)
  let range = sheet.getRange(2215);
  //4. 値を取得
  let weatherData = range.getValues();

  return weatherData;
}



②メール作成

// メール作成機能
function makeMail(){
  // データを取得してくる
  let data = getWeatherData();
  // 一次元配列に変換
  dataArr = data.flat();

  // メールの本文を作る
  let mailbody = 
  `今日は【 ${dataArr[0]} 】です。傘を持っていきましょう!\n
  【降水確率】
  午前: ${dataArr[2]}
  午後: ${dataArr[3]}
  夜間: ${dataArr[4]}`

  return mailbody;
}



③メール送信

// メール送信機能
function sendMail({
  // 送信先のアドレス
  const recipient = 'test@gmail.com';
  // 件名
  const subject = "雨予報です。"
  // 本文
  const body = makeMail();

  GmailApp.sendEmail(recipient, subject, body);
}



④「雨」という文字があったらメールを送信

// 「雨」という文字列が入っていたらメールを送信
function main({
  // 検索する文字列をsentenceに代入
  let sentence = getWeatherData();
  sentence = sentence[0][0];

  // 文字列を検索
  if (sentence.indexOf("雨") != -1) {
    sendMail();
  } else {
    return;
  };
}


searchメソッドについて

④のコードにある、searchメソッドについて説明します。

if (weather.search("雨") != -1) {
  // 雨の時の処理
}


search()メソッドは、最初の文字から最後の文字までを検索し、条件に一致した「位置を返す」メソッドです。
検索文字列に一致するものが無い場合は、「-1」が出力されます。

なので、「雨」「雨のち晴れ」「晴れのち雨」のように「雨」という文字がどこかしらに入っている時に「-1」を返します。


GASで定期実行する

GASで作成したプログラムは定期実行できます。
やり方をご説明します。

  1. 画面左端にある「トリガー」タブを開きます。

  2. 「トリガーを追加」をクリックします。

  3. 実行する関数名や実行する時間などを指定します。

これで、定期実行の予約が完了します。
例えば、「毎朝7時にプログラムを実行させる」ような事が簡単に設定できます。


まとめ

ご覧くださいましてありがとうございました!
この記事で書いた手順で行えば、通知システムが作れると思います。
ぜひ作ってみてください。

プログラムの全文は有料で販売させていただきます。よろしければご購入ください。

ここから先は

1,134字

¥ 500

この記事が気に入ったらサポートをしてみませんか?