LoginSignup
83
101

More than 3 years have passed since last update.

PHPからGoogleカレンダーに予定を登録する(Google Calendar API)

Last updated at Posted at 2016-05-27

Webサーバなどから、GoogleカレンダーにPHPで直接予定とかを書き込む方法です。

Google Cloud プラットフォームでの作業

  1. プロジェクトを作成して「APIとサービス」にアクセス
  2. 概要から、Google Calendar API を選択して有効にする
  3. 認証情報から、サービスアカウントの管理に移動
  4. 新しいサービスアカウントの作成
  5. サービスアカウント名を入力(任意のもの)
  6. 「役割」の項目は「サービス管理」→「Cloud Functions サービス エージェント」を選択
  7. 「新しい秘密鍵の提供」にチェックして、キーのタイプは「p12」を選択
  8. 「G Suite ドメイン全体の委任を有効にする」はチェックなしでいいみたい。
  9. 秘密鍵ファイルがダウンロードされるので保存する【※1】
  10. サービスアカウントの管理を開いて、先ほど作成したサービスアカウントのところにある「サービスアカウントID」をメモする【※2】

Googleカレンダーでの作業

  1. 更新したいGoogleカレンダーをいて「カレンダーの設定」を開く
  2. カレンダーのアドレスという欄に「カレンダーID」というのがあるのでメモする【※3】
  3. 次にカレンダーの共有を開いて、共有するユーザーの欄に先ほどの(※2)のサービスアカウントIDを入力して共有権限をあたえる。(変更およぼ共有の権限)
  4. 上記設定を保存するのを忘れずに。

必要なファイルの準備

  1. 必要なファイルをダウンロード  
  2. google/google-api-php-client【※4】
  3. 上記からLatest release(私は1.1.7でした)をダウンロードして展開(私はサーバの事情で手動ダウンロードしましたが、composerでのインストールがベストのようです。)
  4. 上記の(※1)の秘密鍵ファイルもサーバにアップロード

PHPコードを作成

PHPからGoogleカレンダーに予定を追加するためのサンプルコードを掲載します。

sample.php
<?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
※こちらの情報がかなり参考になりましたが、なぜか私の環境ではうまくいかなかったので、いろいろ試した結果今回の記事になりました。

83
101
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
83
101