APIキーの発行
Google Cloud プラットフォームを開きます
https://console.cloud.google.com/apis/library?hl=ja
『Google Calendar API』をクリックします
Google Calendar API を有効にします
『認証情報』、『認証情報を作成』をクリックします
『APIキー』を選択します
作成されたAPIキーが表示されるのでコピーし閉じます
③④の画面に戻りますので『APIキー1』をクリックします
アプリケーションの制限の設定は、今回スルーします。APIの制限では『キーを制限』にチェックし、『Select Apis』のセレクトボックスで『Google Calendar API』を選択します
APIキーは『Google Calendar API』で使用するとし制限を設定します
『保存』をクリックし、利用制限付きのAPIキー発行を終了します
Googleカレンダーの設定
APIキーを手にしましたので、次にGoogleカレンダー側の設定を行います
誰でもアクセスできる状態になりますので、念のため新しいカレンダーを作ってから『・・・』(縦)をクリックします
『設定と共有』を選択します
『一般公開してだれでも利用できるようにする』にチェックを入れます
警告がでますが、『OK』をクリックします
予定アクセス権限の下の方にある『カレンダーID』をコピーしておいてください。Webアプリからは、このIDでカレンダーを指定します
検討用のプログラム作成
APIキーの発行の⑥でコピーしたAPIキーと、Googleカレンダーの設定の④でコピーしたGoogleカレンダーIDを使用します
今回のプログラムは、javascript で作成しているので、APIキーも Google Calendar ID もクライアントサイドで見えてしまいます。本来はPHPで作成するべきです
今回はプログラムを下記フォルダ構成でコピーするだけで簡単にサーバーインストールしたく google 検索したのですが、Google Api を利用するためのライブラリをPHPではサーバーサイドにインストールする必要があり javascript で作成しました
└ schedule_app/ // Webアプリフォルダ
├ index.php
├ sever.php
└ data/
├ 省略
gapiLoad_JS 関数は、カレンダーデータを resultArea へ表示します。戻り値は、カレンダーデータ配列を戻します
<body>
<div id='resultArea'></div>
</body>
<!-- Google API 使用時のライブラリ -->
<script src="https://apis.google.com/js/api.js"></script>
<script>
const API_KEY = '?????'; // Google APIキー
const CALENDAR_ID = '?????'; // Google calendar ID
gapi.load( 'client', gapiLoad_JS ); // google api ロード
/*************************/
/* Googleカレンダー取得 */
/*************************/
// 「T」が日付と時間の区切り。ZがタイムゾーンがUTCという事を示す
// +9:00は日本の時間、協定世界時との時差
//
// 参考URL https://magazine.techacademy.jp/magazine/25405
async function gapiLoad_JS()
{
let res;
let results = new Array();
try
{
await gapi.client.init
(
{
'apiKey': API_KEY,
}
);
res = await gapi.client.request
(
{
// https の部分は google calendar の API
// events は 予定に関するAPI
// timeMinとtimeMax は、取得する予定の開始日時と終了日時
'path': 'https://www.googleapis.com/calendar/v3/calendars/' + encodeURIComponent( CALENDAR_ID ) + '/events',
'params':
{
timeMin: '2023-03-01T12:29:00.000+09:00',
timeMax: '2023-03-31T23:59:59.000+09:00'
}
}
);
let resultArea = document.getElementById('resultArea');
let items = res.result.items;
for( let i = 0; i < items.length; i++ )
{
let dateSta = '0000-00-00';
let dateEnd = '0000-00-00';
let timeSta = '00:00:00';
let timeEnd = '00:00:00';
let title = items[i].summary;
// 予定が終日の場合 :date に 日付が入り dateTime はundefined
// 予定が終日でない場合:date に undefinedが入り dateTime は時刻が入る
if(( typeof items[i].start.date !== 'undefined' ) && ( typeof items[i].end.date !== 'undefined' ))
{
dateSta = items[i].start.date;
dateEnd = items[i].end.date;
}
if(( typeof items[i].start.dateTime !== 'undefined' ) && ( typeof items[i].end.dateTime !== 'undefined' ))
{
[ dateSta, timeSta ] = getDateTime( items[i].start.dateTime );
[ dateEnd, timeEnd ] = getDateTime( items[i].end.dateTime );
}
resultArea.insertAdjacentHTML( 'beforeend', dateSta + ' ' + timeSta + '~' + dateEnd + ' ' + timeEnd + ' ' + title + '<br>' );
let temp =
{
start_date : dateSta,
start_time : timeSta,
end_date : dateEnd,
end_time : timeEnd,
title : title
};
results.push( temp );
}
return results;
}
catch( err )
{
console.log( err );
modalClose(); // ウエイト表示を消す
return results;
}
}
</script>