サービスアカウントとその資格情報を作成します
サービスアカウントとその資格情報を作成する必要があります。この手順では、後でGoogle Appsのドメイン全体の権限の委任と、サービスアカウントで承認するためのコードで使用される3つのアイテムを収集する必要があります。これらの3つのアイテムはあなたのサービスアカウントです:
• クライアントID。
•秘密鍵ファイル。
• 電子メールアドレス。
これを行うには、最初に、GoogleCalendarAPIが有効になっている有効なGoogleAPIコンソールプロジェクトが必要です。次の手順を実行します:
- GoogleAPIコンソールに移動します。
- 既存のプロジェクトを開くか、新しいプロジェクトを作成します。
- サービスセクションに移動します。
- Calendar API(およびアクセスが必要な可能性のある他のAPI)を有効にします。
これで、サービスアカウントとその資格情報を作成できます。次の手順を実行します:
APIアクセスセクションに移動します。
[OAuth2.0クライアントIDの作成...]をクリックしてクライアントIDを作成します。
製品名を入力し、オプションのロゴを指定して、[次へ]をクリックします。
アプリケーションタイプの入力を求められたらサービスアカウントを選択し、[クライアントIDの作成]をクリックします。
この時点で、秘密鍵をファイルとしてダウンロードできるダイアログが表示されます(下の画像を参照)。APIコンソールからファイルを再度ダウンロードする方法がないため、そのファイルをダウンロードして安全に保管してください。
ファイルをダウンロードしてダイアログを閉じると、サービスアカウントのメールアドレスとクライアントIDを取得できるようになります。
これで、サービスアカウントの秘密鍵ファイル、クライアントID、および電子メールアドレスが収集されたはずです。これで、ドメイン全体の権限をサービスアカウントに委任する準備が整いました。
ドメイン全体の権限をサービスアカウントに委任します
ここで作成したサービスアカウントには、アクセスするGoogleAppsドメインのユーザーデータへのアクセスを許可する必要があります。次のタスクは、GoogleAppsドメインの管理者が実行する必要があります。
GoogleAppsドメインのコントロールパネルに移動します。URLは次のようになります:www.google.com/a/cpanel/mydomain.com
[高度なツール...]に移動します...>サードパーティのOAuthクライアントアクセスを管理します。
[クライアント名]フィールドに、サービスアカウントのクライアントIDを入力します。
[1つ以上のAPIスコープ]フィールドに、アプリケーションにアクセスを許可する必要があるスコープのリストを入力します(下の画像を参照)。たとえば、Google Calendar APIへのドメイン全体のアクセスが必要な場合は、www.googleapis.com / auth/calendar.readonlyと入力します。
[承認]ボタンをクリックします。
これで、サービスアカウントは、ドメインのすべてのユーザーがGoogleカレンダーAPIにドメイン全体でアクセスできるようになり、場合によっては上記の例にリストした他のAPIにアクセスできるようになります。
以下は、サービスアカウントを使用してPHPのカレンダーデータにアクセスする説明です。
ユーザーカレンダーへのサービスアカウントアクセスの一般的なプロセスは次のとおりです。
•Googleクライアントを作成します
•クライアントアプリケーション名を設定します
•すでにアクセストークンをお持ちの場合は、有効期限が切れているかどうかを確認してください
•アクセストークンの有効期限が切れている場合は、JWTアサーションクレデンシャルを設定して新しいトークンを取得します
•クライアントIDを設定します
•Googleクライアントに基づいて新しいカレンダーサービスオブジェクトを作成します
•カレンダーイベントを取得する
注:アクセストークンを保存し、有効期限が近づいたときにのみ更新する必要があります。そうしないと、ユーザーの一定期間内のアクセストークン数の制限を超えたというエラーが表示されます。
使用されたGooglePHPクライアントライブラリ関数の説明:
クライアントオブジェクトは多くのパラメータとメソッドにアクセスでき、次のすべてはクライアントオブジェクトを介してアクセスされます。
新しいクライアントオブジェクトを作成します。
$client = new Google_Client();
クライアントアプリケーション名を設定します。
$client->setApplicationName(“My Calendar App”);
クライアントアクセストークンをすでに保存している場合は、次のように設定します。
$client->setAccessToken($myAccessToken);
アクセストークンの有効期限が切れているかどうかを確認します。30秒のバッファがあるため、トークンが30秒以内に有効期限が切れるように設定されている場合、これはtrueを返します。アクセストークンの有効期間は1時間です。Accessトークンは、実際には、作成時刻、秒単位の有効期間、およびトークン自体を含むJSONオブジェクトです。したがって、トークンには有効期限が切れる時期を決定するためのすべての情報がローカルにあるため、Googleへの呼び出しは行われません。
$client->isAccessTokenExpired();
トークンの有効期限が切れているか、トークンを取得したことがない場合は、Accessトークンを取得するためにアサーションクレデンシャルを設定する必要があります。
$ client-> setAssertionCredentials(new Google_AssertionCredentials(SERVICE_ACCOUNT_NAME、array(CALENDAR_SCOPE)、$ key、'notasecret'、' http: //oauth.net/grant_type/jwt/1.0/bearer'、$ email_add));
Where:
SERVICE_ACCOUNT_NAMEは、以前に設定したサービスアカウントのメールアドレスです。
For example:’abcd1234567890@developer.gserviceaccount.com’
CALENDAR_SCOPEは、Google管理インターフェースのスコープ設定です。
For example: ‘https://www.googleapis.com/auth/calendar.readonly’
$ keyは、Googleアプリコンソールでプロジェクトを作成したときにダウンロードされたキーファイルのコンテンツです。$ email_addは、カレンダーデータを取得するユーザーのGoogleメールアドレスです。
クライアントIDを設定します:$ client-setClientId(SERVICE_CLIENT_ID); ここで、SERVICE_CLIENT_IDは、以前に設定されたサービスアカウントのクライアントIDです。例:'abcd123456780.apps.googleusercontent.com' </ p>
新しいカレンダーサービスオブジェクトを作成します。$cal= new Google_CalendarService($ client);
カレンダーの取得にはいくつかのオプションを設定できます。以下のコードでそれらのいくつかを設定します。これらはAPIドキュメントで定義されています。$ optEvents = array('timeMax' => $ TimeMax、'timeMin' => $ TimeMin、'orderBy' =>'startTime'、'singleEvents' =>'True');
カレンダーイベントのリストを取得し、上記のオプションを通話に渡します。
$calEvents = $cal->events->listEvents('primary', $optEvents);
返されたイベントリストをループします。リストはページングされるため、リストがなくなるまでページをフェッチする必要があります。
foreach ($calEvents->getItems() as $event) {
// get event data
$Summary = $event->getSummary();
$description = $event->getDescription();
$pageToken = $calEvents->getNextPageToken();
if ($pageToken) { // if we got a token the fetch the next page of events.
$optParams = array('pageToken' => $pageToken);
$calEvents = $cal->events->listEvents('primary', $optParams);
} else {
break;
}
}
アクセストークンを取得します。
$ myAccessToken = $ client-> getAccessToken();
次回のために、アクセストークンをパーマネントストアに保存します。