Google Apps Scriptで雨予報通知システムを作る
Google Apps Script(以下GAS)を使って「雨予報通知システム」を作りました。
「雨予報の時だけGmailでメールを送るシステム」です。
開発の経緯
このアプリを作ったきっかけは「天気アプリを毎日チェックするのって面倒だな。」と思ったことです。
雨予報の時だけ、通知が来たら便利だと思ったからです。
GASについて
このアプリはGASを使って作りました。
GASを使った理由は3つあります。
スクレイピングが簡単
Gmailの送信が簡単
定期実行も簡単
GASは、Googleのサービスをプログラミングで使うことができる便利なものです。Gmailやスプレッドシートなどのサービスをプログラミングで自動化できるのです。
プログラムの仕組み
このプログラムは大きく分けて2つの要素からなります。
天気情報をスクレイピングで取得してスプレッドシートに書き込む
セルの中に「雨」という文字があった時だけGmailでメールを送る
というプログラムです。
天気情報をスクレイピングする
データの取得先
天気の情報は、Yahoo天気北西部(千葉)の天気をスクレイピングして取得しました。
スプレッドシートのIMPORTXML関数を使う
スクレイピングはスプレッドシートで行います。
スプレッドシートには、簡単にスクレイピングできるIMPORTXML関数があります。
セルに = IMPORTXML(URL, XPathクエリ, locale) を入力することでスクレイピングができるのです。
Xpathクエリは、ブラウザのデベロッパーツールで確認できます。
GASでコードを書く
スクレイピングでデータの取得ができたら、そのデータをプログラムで扱います。
スプレッドシートの拡張機能タブにある「Apps Script」を開きます。
これでコードを書くエディタが起動します。
サンプルプログラム
作ったサンプルコードをのせます。
プログラムは、4つの関数に分けて作成しました。
スプレッドシートのセルの情報を取得する
メールの作成
メールの送信
取得したデータに「雨」という文字があったらGmailでメールを送信する
①スプレッドシートのセルの情報を取得する
// セルのデータを取得する
function getWeatherData() {
//1. 現在のスプレッドシートを取得
let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
//2. シートを取得
let sheet = spreadsheet.getSheetByName("天気データ");
//3. セルの範囲を取得(開始行番号, 開始列番号, 行数, 列数)
let range = sheet.getRange(2, 2, 1, 5);
//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で作成したプログラムは定期実行できます。
やり方をご説明します。
画面左端にある「トリガー」タブを開きます。
「トリガーを追加」をクリックします。
実行する関数名や実行する時間などを指定します。
これで、定期実行の予約が完了します。
例えば、「毎朝7時にプログラムを実行させる」ような事が簡単に設定できます。
まとめ
ご覧くださいましてありがとうございました!
この記事で書いた手順で行えば、通知システムが作れると思います。
ぜひ作ってみてください。
プログラムの全文は有料で販売させていただきます。よろしければご購入ください。
ここから先は
¥ 100
この記事が気に入ったらサポートをしてみませんか?