指定した地域の天気予報を取得し、明日が猛暑日の予想であればメールで通知するGoogle Apps Scriptです。遠方に住んでいる親類に熱中症予防を呼びかけるきっかけにどうぞ。
特にありませんが、スクリプト置き場としてスプレッドシートを利用しています(コンテナバインド型)。
スタンドアロン型としても動作するはずです。
事前設定エリアの「都道府県コード」と「通知先メールアドレス」を設定してください。
都道府県コードはソースコードに乗せてあります。
準備が終わったら関数「onOpen」を一度実行しておきましょう。
スプレッドシートに戻ると「猛暑日をお知らせする」というメニューが増えているはずです。
これを押してテスト実行してみます。
指定したメールアドレスにこのようなメールが届けば成功です。
動作確認で問題なければ、トリガーで定期的に実行しましょう。
実行時刻はいつでもよいですが、できるだけ精度高く翌日の気温を知りたいので夕方〜夜ぐらいがよいのではないでしょうか。
このサンプルスクリプトでは、北海道や沖縄を除いて都道府県単位で指定しています。
東京都を指定しても八丈島の気温も拾ってしまうので、より細かく判定したい場合は61〜70行目あたりで特定の地域だけ取得するように条件分岐を追加してあげてください。
なお、天気予報データは気象庁のJSONファイルを利用させていただいています。APIとして提供されているわけではないため、突然仕様が変わる可能性もありますのでシビアな用途には向かないかもしれません。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00113/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
// UIの取得
const ui = SpreadsheetApp.getUi()
// メニューの表示名
const menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('猛暑日をお知らせする', 'report_extreme_hot_day');
// メニューを画面に追加する
menu.addToUi();
}
function report_extreme_hot_day() {
// ########## 事前設定エリア ここから ##########
// 以下を参考に、希望の都道府県コードをセットしてください。
/*
'宗谷': '011000', '上川・留萌': '012000', '網走・北見・紋別': '013000', '十勝': '014030',
'釧路・根室': '014100', '胆振・日高': '015000', '石狩・空知・後志': '016000', '渡島・檜山': '017000',
'青森県': '020000', '岩手県': '030000', '宮城県': '040000', '秋田県': '050000',
'山形県': '060000', '福島県': '070000', '茨城県': '080000', '栃木県': '090000', '群馬県': '100000',
'埼玉県': '110000', '千葉県': '120000', '東京都': '130000', '神奈川県': '140000', '新潟県': '150000',
'富山県': '160000', '石川県': '170000', '福井県': '180000', '山梨県': '190000', '長野県': '200000',
'岐阜県': '210000', '静岡県': '220000', '愛知県': '230000', '三重県': '240000', '滋賀県': '250000',
'京都府': '260000', '大阪府': '270000', '兵庫県': '280000', '奈良県': '290000', '和歌山県': '300000',
'鳥取県': '310000', '島根県': '320000', '岡山県': '330000', '広島県': '340000', '山口県': '350000',
'徳島県': '360000', '香川県': '370000', '愛媛県': '380000', '高知県': '390000', '福岡県': '400000',
'佐賀県': '410000', '長崎県': '420000', '熊本県': '430000', '大分県': '440000', '宮崎県': '450000',
'鹿児島県': '460100', '奄美': '460040',
'沖縄本島': '471000', '大東島': '472000', '宮古島': '473000', '八重山': '474000'
*/
const pref_code = '130000'; // サンプルとして東京にしてあります
// 通知先のメールアドレスをセットしてください。
const mail_to = '******************';
// ########## 事前設定エリア ここまで ##########
// 都道府県コードを元に、リクエストURLを生成
const url = 'https://www.jma.go.jp/bosai/forecast/data/forecast/' + pref_code + '.json';
// URLにアクセスする
const response = UrlFetchApp.fetch(url);
// コンテンツを取得する
const response_text = response.getContentText();
// JSONとしてパースする
const json = Utilities.jsonParse(response_text);
// 明日の気温が35℃以上の地域を格納する変数を宣言
const hot_areas = [];
// ひとつの都道府県コード内に複数の地域が入っている場合があるので、ループで取得する。
for (let j = 0; j < json[1]['timeSeries'][1]['areas'].length; j++) {
let area = json[1]['timeSeries'][1]['areas'][j]['area']['name']; // 地域を取得する
let temp_max = json[1]['timeSeries'][1]['areas'][j]['tempsMax']; // 最高気温を取得する
if (temp_max[1] >= 35) { // 明日(配列の2番目)の気温が35度以上なら
// 地域と最高気温を配列に追加する
hot_areas.push([area, temp_max[1]]);
}
}
// 猛暑日の地域が1つ以上あれば
if (hot_areas.length > 0) {
// メールの件名を作成する
const mail_subject = '猛暑日アラート(' + Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + ')';
// メール本文用の変数を宣言
const mail_body = [];
// 猛暑日の地域の数だけループして本文を作成する
for (let i = 0; i < hot_areas.length; i++) {
mail_body.push('明日は' + hot_areas[i][0] + '地方で猛暑日(' + hot_areas[i][1] + '℃)の見込みです。');
}
// メールの送信処理
GmailApp.sendEmail(mail_to, mail_subject, mail_body.join('\n'));
}
}
Google Public DNSを利用して、指定したタイプ、ラベルのリソースレコードを取得するGoogle Apps Scriptです。登録値の確認や変更時の反映確認に使えるかも。
気象庁が公開しているJSONファイルから今日、明日、明後日の天気予報を取得するGoogle Apps Scriptです。
chatGPTのAPIを使用し、スプレッドシートに書き込んだ質問にまとめて答えてもらうGoogle Apps Scriptです。消費したトークンも同時に記録します。