Googleカレンダー情報をPHPで取得してみる2
こんにちは、システムエンジニアの今井です。
以前、「Googleカレンダー情報をPHPで取得してみる」を公開しましたが、今回は「サービスアカウント」方式の使い方について書きたいと思います。
以前はサーバーキーを使ってGoogleカレンダー情報を取得してみましたが、
取得するGoogleカレンダーを一般公開する必要があり、一般公開したくないカレンダーには向かないというデメリットがありました。
※一般公開すると、世界中のユーザから閲覧できてしまいます。
「サービスアカウント」方式を使うことで、一般公開したくないカレンダーからデータを取得できるようになります。
1.今回してみること
- 自分のGoogleカレンダーの「hoge」という名前のカレンダーから情報を取得したい
- PHPプログラムで「hoge」カレンダー情報を取得して、var_dumpする
- PHPプログラムはカレンダー情報の読み込みだけを行う、PHPプログラムからカレンダーへの書き込みは行わない
2.用意するもの
「サービスアカウント」方式でGoogleカレンダーから情報を取得するにあたり以下のものが必要になります。
- Googleアカウント
- サービスアカウントキー
- google-api-php-clientプログラム
※Googleアカウントの取得方法はここでは省略させていただきます。
3.サービスアカウントキー取得方法
①:GoogleDeveloperConsoleページにアクセスします
https://code.google.com/apis/console/
③:「hoge」という名前でプロジェクトを作成します。
※:運用時は正しい名前で登録してください。
④:作成後以下の画面が表示されますので、「GoogleAPIを利用する」をクリックします。
⑤:検索窓に「calendar」と入力すると、「CalendarAPI」が表示されますのでクリックします。
⑦:有効になった後、左メニューの「認証情報」をクリックします。
⑧:「認証情報を作成」から「サービスアカウントキー」をクリックします。
⑨:「サービスアカウント」には「App Engine default service account」を選択して「JSON」にチェックをいれて「作成」ボタンをクリックします。
⑩:jsonファイルがダウンロードされるので、ローカルPCに保存します。
以上で、サービスアカウントキーの取得が完了しました。
4.google-api-php-clientプログラム取得方法
Googleカレンダーからサービスアカウント方式でデータを取得するため、google-api-php-clientというライブラリを使います。
バージョン1.1.7を使います。
①:以下URLを開きます。
https://github.com/google/google-api-php-client
③:1.1.7の「Source code(zip)」をクリックしてzipファイルをダウンロードします。
ダウンロードしたzipファイルはローカルPCに保存しておきます。
※後ほどこのzipファイルを使います。
5.Googleカレンダーの準備
データを取得したいカレンダーに対して先ほどダウンロードしたjsonファイルのサービスアカウントキーを登録する必要があります。
①:「3.サービスアカウントキー取得方法」でダウンロードしたjsonファイルをテキストエディタで開きます。
※client_emailの値を覚えておきます。
②:Googleカレンダーを開きます。
③:「マイカレンダー」から「新しいカレンダー作成」をクリックします。
④:新しいカレンダーに以下の項目を入力して、「カレンダーを作成」を押します。
・「カレンダー名」に任意の値を入れます。(ここではhogeとしています)
・「ユーザ」にclient_emailの値を入れて「ユーザを追加」を押します。
以上でカレンダー側の設定は終了です。
6.PHPからGoogleカレンダーの情報を取得してみる
①:「5.Googleカレンダーの準備」で作成した「hoge」カレンダーにテスト用の値を入れて保存します。
②:「hoge」カレンダーIDを取得します。
・「hoge」カレンダー右の▼をクリックして、「カレンダー設定」をクリックします。
・「カレンダーのアドレス」にあります、「カレンダーID」が今回必要な情報になります。こちらを覚えておいてください。
③:PHPプログラムからカレンダー情報を取得します。
以下の環境で作成します。
・テストプログラムは /var/www/html/index.php として設置
・「4.google-api-php-clientプログラム取得方法」で取得したプログラムは/var/www/html/google-api-php-client以下に保存
・「3.サービスアカウントキー取得方法」で取得したjsonファイルは /var/www/html/json/hoge.json として設置
<?php /** * ・データを先頭から10件取得します。 * ・2016年1月1日から2016年12月31日までのデータが対象です。 */ require_once __DIR__.'/google-api-php-client/src/Google/autoload.php'; $json_path = __DIR__.'/json/hoge.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_READONLY); $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(); } $service = new Google_Service_Calendar($client); // ここでデータを取得する範囲を決めています $t = mktime(0, 0, 0, 1, 1, 2016); $t2 = mktime(0, 0, 0, 12, 31, 2016); $calendarId = ''; // ここには「6.PHPからGoogleカレンダーの情報を取得してみる」の②で取得したカレンダーIDを入れます。 $optParams = array( 'maxResults' => 10, 'orderBy' => 'startTime', 'singleEvents' => TRUE, 'timeMin' => date('c', $t), 'timeMax' => date('c', $t2), ); $results = $service->events->listEvents($calendarId, $optParams); var_dump($results['items']);
④:パラメータ説明
パラメータを設定することで検索条件の絞り込みができます。
パラメータ名説明
orderBy | 指定した条件で並び替えてくれます。startTimeまたはupdatedが指定できます。 |
maxResults | 最大件数を設定します。設定しない場合は全件取得されます。 |
timeMin | 開始日付を設定します。 |
timeMax | 終了日付を設定します。 |
以上でサービスアカウントキーを使ってPHPでGoogleカレンダー情報を取得できるようになりました。
7.まとめ
サービスアカウントキーを使うことで、カレンダーを一般公開しないままデータが取得できるようになりました。
次回は、PHPプログラムからカレンダーに情報を書き込む方法を紹介できればと思います。