PHP
GoogleCalendar
google-api-php-client

google-api-php-client v2.2.1を使ってPHPからGoogleカレンダーに登録する

はじめに

Google Calendarにwebページから投稿するフォームを実装しようとしてつまずきました。

webページのフォームからGoogle Calendarに投稿する方法は多くのページで紹介されていますが、バージョン2.0以降のgoogle-api-php-clientを使用しているページが見当たらなかったので自分の覚書も兼ねて投稿します。

環境

  • google/google-api-php-client v2.2.1

https://github.com/google/google-api-php-client/releases
こちらからダウンロードできます。
投稿時のLatest releseがv2.2.1だったのでこちらで紹介します。

準備

まず基本的な導入方法は変わらないので割愛します。
自分は以下のページを参考にしました。

”PHPを使ってGoogleカレンダーにフォームから予定を登録してみる”
https://www.spiceworks.co.jp/blog/?p=10254

変更点

上記のページの方法で実装するとエラーが発生します。
これはv1.0→v2.0にアップグレードした際に色々と変更があったことが原因のようです。
変更点に関する詳細は以下のページで見ることが出来ます。
https://github.com/google/google-api-php-client/blob/master/UPGRADING.md

さて、実装における具体的な変更点は次の通りです。
1. vendorディレクトリの追加
 ダウンロードして解凍したgoogle-api-php-client-2.2.1の中に新たにvendorというディレクトリが増えています。
参考ページのようにsrcディレクトリのみコピペするとエラーが出るのでvendorディレクトリも配置する必要があります。
そのため、サーバー上に作成したgoogle-api-php-clientディレクトリ以下のディレクトリは次のようになります。

google-api-php-client/
 ├ src/
 ├ vendor/
 └ key/

2.autoload.phpのpathの変更
 v1.0ではsrcディレクトリ以下にあるautoload.phpを参照していましたが、v2.0ではvendorディレクトリ以下に変更されたようです。
ですので、参考ページの⑫にあるソースコードの2行目は次のように変更します。

form.php
require_once __DIR__.'/google-api-php-client/vendor/autoload.php';

3.jsonファイルからGoogleClientを生成する方法の変更
 ここの書き方が大きく変わっているようです。

↓参考ページの⑩にあるソースコード

functions.php
<?php
/**
 * jsonファイルからGoogleClientを生成します
 */
function getGoogleClientByJson() {
    $json_path = __DIR__.'/google-api-php-client/key/xxxxxxxxxxx.json'; // jsonファイルのパスをここに書いてください。
    $json_string = file_get_contents($json_path, true);

    $json = json_decode($json_string, true);

    $private_key = $json['private_key'];
    $client_email = $json['client_email'];

    $scopes = array(Google_Service_Calendar::CALENDAR);

    $credentials = new Google_Auth_AssertionCredentials(
        $client_email,
        $scopes,
        $private_key
    );

    $client = new Google_Client();
    $client->setApplicationName("Google Calendar PHP API");
    $client->setAssertionCredentials($credentials);
    if ($client->getAuth()->isAccessTokenExpired()) {
        $client->getAuth()->refreshTokenWithAssertion();
    }
    return $client;
}
?>

↓変更後のソースコード

functions.php
<?php
/**
 * jsonファイルからGoogleClientを生成します
 */
function getGoogleClientByJson() {
   $json_path = __DIR__.'/google-api-php-client/key/xxxxxxxxxxx.json'; // jsonファイルのパスをここに書いてください。

    $scopes = array(Google_Service_Calendar::CALENDAR);

    $client = new Google_Client();
    $client->setApplicationName("Google Calendar PHP API");
    $client->setAuthConfig($json_path);
    $client->setScopes($scopes);
    if ($client->isAccessTokenExpired()) {
    $client->refreshTokenWithAssertion();
    }
    return $client;
}
?>

書き方が簡略化されたようです。

変更箇所は以上です。
無事カレンダーに登録されました。めでたしめでたし。

さいごに

実際に実装してから投稿まで少し日にちが空いてしまったので不備やミスなどあるかもしれません。
お気づきの際には教えていただけると幸いです。