気象庁が公開しているJSONファイルから今日、明日、明後日の天気予報を取得するGoogle Apps Scriptです。
特にありません。今お使いのスプレッドシートに組み込めます。
上のメニューに有る「スクリプト実行」から「天気予報を取得する」を実行します。
天気予報を取得したい地域を入力します。
基本的に都道府県名を入れればOKですが、北海道、鹿児島、沖縄は地域が別れていますので注意してください。
下記の地域が選択可能です。
アクティブなスプレッドシートに、天気予報が追記されていきます。
実行する時間帯によって取得できる予報が明日までだったり、明後日までだったりと変化するようです。
存在しない地域が入力された場合は、「地方を正しく入力してください」というエラーメッセージが表示され、スクリプトが終了します。
天気予報を取得することができますが、気象庁としては「API」ではないというスタンスです。
しかし「政府標準利用規約」に則って、JSONファイルを利用することは問題ないそうです。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00056/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
// UIの取得
const ui = SpreadsheetApp.getUi()
// メニューの表示名
const menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('天気予報を取得する', 'get_weather_forecast');
// メニューを画面に追加する
menu.addToUi();
}
function get_weather_forecast() {
// UIを取得
const ui = SpreadsheetApp.getUi();
// アクティブなスプレッドシート、シートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 地域を入力させる
const input = ui.prompt('地域を入力してください', ui.ButtonSet.OK_CANCEL);
// キャンセルが押されたらスクリプトを終了する
if (input.getSelectedButton() == ui.Button.CANCEL) {
return;
}
// 入力したされた都道府県を取得する
const input_pref = input.getResponseText();
// 都道府県コードを用意する
const obj_pref_codes = {
'宗谷': '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'
}
let pref_code;
let jma_area;
// 都道府県コードのオブジェクトをループして、入力されたキーワードから地域を探す
for (let [key, value] of Object.entries(obj_pref_codes)) {
if (key.match(input_pref)) {
pref_code = value;
jma_area = key;
break;
}
}
// ループで見つけることが出来なかったらエラーを出してスクリプトを終了する
if (!pref_code) {
ui.alert('地方を正しく入力してください');
return;
}
// 都道府県コードを元に、リクエスト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);
// 最大で「今日、明日、明後日」の3日分のデータが入っている。日付の数だけループする。
for (let i = 0; i < json[0]['timeSeries'][0]['timeDefines'].length; i++) {
// 天気予報の日時を取得する。ISO8601形式のため、通常のDate型に直す。
let date = new Date(json[0]['timeSeries'][0]['timeDefines'][i]);
// ひとつの地域コード内に複数の地域が入っている場合があるので、ループで取得する。
for (let j = 0; j < json[0]['timeSeries'][0]['areas'].length; j++) {
/*
入っているデータのサンプル
{
area={
name=東京地方, code=130010},
weatherCodes=[200, 202, 101],
waves=[1メートル, 0.5メートル 後 1メートル, 0.5メートル 後 1メートル],
winds=[北東の風 23区西部 では 北東の風 やや強く, 北東の風 日中 南西の風 23区西部 では 南西の風 やや強く],
weathers=[くもり, くもり 後 晴れ 明け方 から 朝 雨 所により 雷 を伴う, 晴れ 時々 くもり]
}
*/
let name = json[0]['timeSeries'][0]['areas'][j]['area']['name']; //地域を取得する
let weather = json[0]['timeSeries'][0]['areas'][j]['weathers'][i]; //天気を取得する
let wind = json[0]['timeSeries'][0]['areas'][j]['winds'][i]; //風の情報を取得する
// シートに書き込むために配列にする
let line = [date, jma_area, name, weather, wind]
// シートの最終行に追記する
sheet.appendRow(line);
}
}
}
Google Public DNSを利用して、指定したタイプ、ラベルのリソースレコードを取得するGoogle Apps Scriptです。登録値の確認や変更時の反映確認に使えるかも。
NHKが提供している番組表APIを利用して、スプレッドシートに番組表を書き出すGoogle Apps Scriptです。見たい・録画したい番組を探す時などにどうぞ。
指定した地域の天気予報を取得し、明日が猛暑日の予想であればメールで通知するGoogle Apps Scriptです。遠方に住んでいる親類に熱中症予防を呼びかけるきっかけにどうぞ。
chatGPTのAPIを使用し、スプレッドシートに書き込んだ質問にまとめて答えてもらうGoogle Apps Scriptです。消費したトークンも同時に記録します。