Webサーバなどから、GoogleカレンダーにPHPで直接予定とかを書き込む方法です。
Google Cloud プラットフォームでの作業
- プロジェクトを作成して「APIとサービス」にアクセス
- 概要から、Google Calendar API を選択して有効にする
- 認証情報から、サービスアカウントの管理に移動
- 新しいサービスアカウントの作成
- サービスアカウント名を入力(任意のもの)
- 「役割」の項目は「サービス管理」→「Cloud Functions サービス エージェント」を選択
- 「新しい秘密鍵の提供」にチェックして、キーのタイプは「p12」を選択
- 「G Suite ドメイン全体の委任を有効にする」はチェックなしでいいみたい。
- 秘密鍵ファイルがダウンロードされるので保存する【※1】
- サービスアカウントの管理を開いて、先ほど作成したサービスアカウントのところにある「サービスアカウントID」をメモする【※2】
Googleカレンダーでの作業
- 更新したいGoogleカレンダーをいて「カレンダーの設定」を開く
- カレンダーのアドレスという欄に「カレンダーID」というのがあるのでメモする【※3】
- 次にカレンダーの共有を開いて、共有するユーザーの欄に先ほどの(※2)のサービスアカウントIDを入力して共有権限をあたえる。(変更およぼ共有の権限)
- 上記設定を保存するのを忘れずに。
必要なファイルの準備
- 必要なファイルをダウンロード
- google/google-api-php-client【※4】
- 上記からLatest release(私は1.1.7でした)をダウンロードして展開(私はサーバの事情で手動ダウンロードしましたが、composerでのインストールがベストのようです。)
- 上記の(※1)の秘密鍵ファイルもサーバにアップロード
PHPコードを作成
PHPからGoogleカレンダーに予定を追加するためのサンプルコードを掲載します。
<?php
//上記の(※4)でダウンロードしたファイルから src/Google/autoload.php を読み込み
require_once realpath(dirname(__FILE__).'/〜/src/Google/autoload.php');
$calendarId='***@gmail.com'; //上記の(※3)でメモしたカレンダーID
$client_email = '****@****'; //上記の(※2)でメモしたサービスアカウントID(長いけどそのまま全部)
$private_key = file_get_contents('/path/******.p12'); //上記の(※1)でダウンロードした秘密鍵ファイルを指定します
$scopes = array('https://www.googleapis.com/auth/calendar');//カレンダー書き込み時に必要なscope(下記で説明します)
$credentials = new Google_Auth_AssertionCredentials(
$client_email,
$scopes,
$private_key
);
$client = new Google_Client();
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
$service = new Google_Service_Calendar($client);
//以下がカレンダーに登録する内容です。(下記で説明します)
$event = new Google_Service_Calendar_Event(array(
'summary' => 'テストの予定を登録するよ', //予定のタイトル
'start' => array(
'dateTime' => '2016-05-28T09:00:00+09:00',// 開始日時
'timeZone' => 'Asia/Tokyo',
),
'end' => array(
'dateTime' => '2016-05-28T18:00:00+09:00', // 終了日時
'timeZone' => 'Asia/Tokyo',
),
));
$event = $service->events->insert($calendarId, $event);
printf('Event created: %s\n', $event->htmlLink);
補足説明
基本的にGoogle Calendar API のサイト(https://developers.google.com/google-apps/calendar/) に書いてありますが、わかりにくそうなところを説明します。
scopeについて
上記APIのサイトのリファレンスから、やりたい処理を選択します。
今回は予定の登録をしたかったので、Events->insert のページを見ました。
そこに「Scope」という欄がありますので、それを上記コードに記述します。複数ある場合は配列でよいのではと思います。
登録する内容について
こちらも、リファレンスにあります。同じくEvents->insert のページを見ました。
各ページの下部に「Try It!」という項目があり、ここである程度サンプルコードが作れるみたいですので参考になります。
基本的には上記コードの「 //以下が〜 」より下を、リファレンスに合わせて書換えていけば、いろいろ出来そうな気がします。
参考になったサイトや必要なサイト
GoogleカレンダーAPIの公式
https://developers.google.com/google-apps/calendar/
Google Developers Console(ここでAPI登録します)
https://console.developers.google.com
google/google-api-php-client(必要なライブラリのダウンロード)
https://github.com/google/google-api-php-client/releases
Magento Study Blog様
http://latics.hateblo.jp/entry/google-api
※こちらの情報がかなり参考になりましたが、なぜか私の環境ではうまくいかなかったので、いろいろ試した結果今回の記事になりました。