【自動日記ツール】GoogleCalendarから情報を取得する
そんな欲望をもとに考えた一連の仕組みがあるので、今日は、それを紹介します。
今回は、Googleスプレッドシートを使用してGoogleCalendarから情報を取得する仕組みです。
今回の記事は、これ単独でもいろいろな使い方ができそうなので、記事をわけています。
本記事だけを読んでも意味がわからないと思いますが、もし、興味のある方は、一連の流れを以下の記事、マガジンにしていますので、こちらをご参照ください。
全体の説明はこちら
今回は、以下の工程の中の「GAS経由でカレンダーから情報を読み出す」から「Googleスプレッドシートにリスト化」の部分です
Google App Scriptを作成する
任意のスプレッドシートで、「拡張機能」>「Apps Script」を実行します
自動ツールの一連の流れで作成したものがある場合、そのツールで行います。
単にCalendarから情報を抜き出したいだけであれば、どのスプレッドシートでも構いません
「<>エディタ」のところに、何もコードが入っていないと思いますので、場所を用意します
スクリプトプロパティの設定
「歯車マーク プロジェクトの設定」を開きます
画面下部にスクロールすると、「スクリプト プロパティ」というものがありますので、「スクリプト プロパティを追加」を押下します。
スクリプト プロパティには、以下の内容を入れてください。
このとき、「プロパティ」の名前は、ここで指定している文字と、一字一句間違えないように入れます
GASで呼び出す名前になるため、間違えた名前で呼ぶと動かないためです
GCalendarID
情報を取得するカレンダーです
以下のサイトを参考にカレンダーIDを見つけて、「値」に入力します
コードの入力
ついにこの時が来ました。
GoogleAppScript(GAS)の入力を行います。
先ほど名前を変えたエディタにある「定時に情報取得.gs」の中を全部消して、↓のコードを入力し、保存します。
function listWeeklyCalendarEvents() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('GCalendar');
if (!sheet) {
// 'GCalendar' という名前のシートがない場合、新しく作成する
sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('GCalendar');
}
sheet.clearContents();
// スクリプトプロパティからカレンダーIDを取得
var calendarId = PropertiesService.getScriptProperties().getProperty('GCalendarID');
if (!calendarId) {
Logger.log('GCalendarID が見つかりません。');
return;
}
var calendar = CalendarApp.getCalendarById(calendarId); // スクリプトプロパティに保存されたカレンダーIDを使用
var now = new Date();
var startOfWeek = new Date(now);
if (now.getDay() === 0) { // 日曜日の場合、前週の月曜日に設定
startOfWeek.setDate(now.getDate() - 6);
} else {
startOfWeek.setDate(now.getDate() - now.getDay() + 1); // 月曜日に設定
}
startOfWeek.setHours(0, 0, 0, 0); // 0時に設定
var endOfWeek = new Date(now); // GASを実行した現在の日時を取得
endOfWeek.setHours(now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());
var events = calendar.getEvents(startOfWeek, endOfWeek);
sheet.appendRow(['日付', '件名', '説明']); // ヘッダー行を追加
for (var i = 0; i < events.length; i++) {
var date = Utilities.formatDate(events[i].getStartTime(), "JST", "yyyy/MM/dd"); // 日付をyyyy/MM/dd形式にフォーマット
var details = [
date, // 日付 (yyyymmdd形式)
events[i].getTitle(), // 件名
events[i].getDescription() // 説明
];
sheet.appendRow(details);
}
}
このコードは、スクリプト プロパティで設定した「GCalendarID」からカレンダー情報を呼び出し
実行した日付の月曜日〜日曜日の一週間分データを抽出するコードです
1年間のスケジュールを取得することもできるので、技術がある方は必要に応じて修正して大丈夫です。
なお、私はScriptは書けないので、このコードは完全にGPT由来の天然物です。その品質に保証はありませんが、エラーがでても、そのエラーコードをGPTなりBingなりに送ればなんとかなります。
カレンダーIDも、スクリプトプロパティから取得するので、外に漏れることはありません。安心して動かしていきましょう。
保存したら、「▷ 実行」で動かしてみましょう。
スプレッドシートの「GCalendar」シートに、一週間分のデータが反映されていたら成功です。
トリガーの設定
左側のメニュー「時計マーク トリガー」を押下します
画面右下の「 + トリガーを追加」を押下します
「実行する関数を選択」は、さきほど作成した「定時に情報取得.gs」に入れたコードから「listWeeklyCalendarEvents」というfunction名を選択します。
現在は、対象のGASを1時間おきに実行する(毎時間カレンダーからスプレッドシートに情報が反映される)内容になっていますが、それらは、好きなように変更して構いません
Google同士の情報連携で、費用はかかりません
これで、カレンダーからスプレッドシートに情報を移す仕組みができました!
コングラッチュレーション!!
この記事が気に入ったらサポートをしてみませんか?