天気予報の自動貼り付け機能
天気予報API
参考
「出かけようとしたら雨が降ってた……」を防ぐため、「1時間毎の天気予報」を1時間毎にSlack通知してみた | Developers.IO
GASを使って天気予報botを作ってみよう! - Qiita
気象情報APIの OpenWeatherMap で「現在・1時間毎・1日毎」の天気予報を取得してみた | Developers.IO
OpenWeatherMapで郵便番号が使えないときのアプローチ - Shoのシステム開発忘備録
Google Apps Script - jsonの抜き出し方について、google apps script|teratail
https://gyazo.com/a90101beb033ffa9936348e97307d0ee
鯖江の経度と緯度を確認
APIを呼び出すURL
鯖江の位置
金沢の位置 36.59444,136.62556
こちらを参照
One Call API: weather data for any geographical coordinate - OpenWeatherMap
https://gyazo.com/87d652720d1a419c89362f891a56b0da
https://gyazo.com/2dc9c055418d9944ff51c53de0c1e839
完成
https://gyazo.com/f270001760878ab063404cccfb396716
https://gyazo.com/b76da97b77fb200fb9da0cea03f9ca87
2024/10/17
従来のAPIがサービス停止したため、One Call API3.0に変更
参考ページ
上記ページを参考に、支払い方法を登録した後、新たにAPIキーを作って使用すると上手く動作した。
code:aaa.js
//200926_ function startTodayActive() シート起動時に本日の日付をアクティブする関数を追加
function updateTodayScheduleToText(){
//各月の予定シート関係の定数
var dateRow = 1;//各月の予定シートの日付の記載されている行、1行目に記載されているはず
var dateColumn = 9;//各月の予定シートの日付の記載されている列、9列目(I列)に記載されているはず
var scheduleRow = 2;//各月の予定シートの日毎の予定の記載されている行、2行目に記載されているはず
//各月の予定シート関係の定数(天気予報関連)
var weatherRow = 27;//天気予報の行
var maxTempRow = 28; //最高気温の行
var minTempRow = 29; //最低気温の行
var now = new Date();//現在時刻、日付の取得
var now_yyMM =Utilities.formatDate(now, "JST", "yyMM");//現在時刻を年月の書式に変更
Logger.log(now);//確認用
Logger.log(now_yyMM);
var thisMonthSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(now_yyMM);//伊勢Todoの今月シートを取得
var firstDayOfThisMonth = thisMonthSheet.getRange(dateRow,dateColumn);//1行9列目が当月一日の日付が入力されたセル、シートの書式を変更した場合は修正が必要
var dateFirstDay = firstDayOfThisMonth.getValue();
Logger.log(dateFirstDay);
if(now_yyMM == Utilities.formatDate(dateFirstDay, "JST", "yyMM") ){//念のため、yyMMタブの月初めのセルの内容を確認、当月一日なら実行
Logger.log('今月であることを確認しました');
var column_today = Utilities.formatDate(now, "JST", "dd")-1;
Logger.log(column_today);
var todayOfThisMonth = thisMonthSheet.getRange(scheduleRow,dateColumn+column_today);//当日予定セルの範囲取得
var dateThisDay = todayOfThisMonth.getValue();//当日予定セルの値の取得
Logger.log('セル内容"'+dateThisDay+'"');
todayOfThisMonth.copyTo(todayOfThisMonth,{contentsOnly:true});//値の貼付け
//以下天気予報情報取得+貼り付け
var json=fetchWeatherData();
//(当日分)
thisMonthSheet.getRange(weatherRow,dateColumn+column_today).setValue(strWeather);//天気の内容貼り付け
thisMonthSheet.getRange(maxTempRow,dateColumn+column_today).setValue(strMaxTemp);//最高気温の貼り付け
thisMonthSheet.getRange(minTempRow,dateColumn+column_today).setValue(strMinTemp);//最低気温の貼り付け
//(翌日分)
thisMonthSheet.getRange(weatherRow,dateColumn+column_today+1).setValue(strWeather);//天気の内容貼り付け
thisMonthSheet.getRange(maxTempRow,dateColumn+column_today+1).setValue(strMaxTemp);//最高気温の貼り付け
thisMonthSheet.getRange(minTempRow,dateColumn+column_today+1).setValue(strMinTemp);//最低気温の貼り付け
//天気予報情報取得+貼り付け終わり
}
}
function fetchWeatherData() { // API Callをして天気予報情報を取得
const apiKey = '自分のAPIキー'; // OpenWeatherMap APIkey
const lat = 36.59444; //金沢の緯度、経度
const lon = 136.62556; //金沢の緯度、経度
const lang = 'ja' // 言語指定
const apiUrl = https://api.openweathermap.org/data/3.0/onecall?lat=${lat}&lon=${lon}&lang=${lang}&appid=${apiKey}&units=metric&exclude=current,hourly,minutely;
const response = UrlFetchApp.fetch(apiUrl);
const data = JSON.parse(response.getContentText());
return data;
}
function startTodayActive(){
//各月の予定シート関係の定数
var dateRow = 1;//各月の予定シートの日付の記載されている行、1行目に記載されているはず
var dateColumn = 9;//各月の予定シートの日付の記載されている列、9列目(I列)に記載されているはず
var scheduleRow = 2;//各月の予定シートの日毎の予定の記載されている行、2行目に記載されているはず
var now = new Date();//現在時刻、日付の取得
var now_yyMM =Utilities.formatDate(now, "JST", "yyMM");//現在時刻を年月の書式に変更
Logger.log(now);//確認用
Logger.log(now_yyMM);
var thisMonthSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(now_yyMM);//伊勢Todoの今月シートを取得
var firstDayOfThisMonth = thisMonthSheet.getRange(dateRow,dateColumn);//1行9列目が当月一日の日付が入力されたセル、シートの書式を変更した場合は修正が必要
var dateFirstDay = firstDayOfThisMonth.getValue();
Logger.log(dateFirstDay);
if(now_yyMM == Utilities.formatDate(dateFirstDay, "JST", "yyMM") ){//念のため、yyMMタブの月初めのセルの内容を確認、当月一日なら実行
Logger.log('今月であることを確認しました');
var column_today = Utilities.formatDate(now, "JST", "dd")-1;
Logger.log(column_today);
var todayOfThisMonth = thisMonthSheet.getRange(scheduleRow,dateColumn+column_today);//当日予定セルの範囲取得
thisMonthSheet.setActiveSelection(todayOfThisMonth);
}
}
https://gyazo.com/55f04943baac2a488fb3a7881322637e