service-account-method を使用中に Google カレンダー サービスにアクセスすることはできますか? Google は、calendar-service が service-account-method のドキュメントでサポートされているサービスのリストにないため、不可能だと間接的に言っていますが、個人的には可能だと思います。しかし、どのように?
私はphpでカレンダーアプリケーションを書いています。そこで、ユーザーアクション(ログインなど)なしでGoogleカレンダーにカレンダーイベントを作成したいと考えています。
私は、最初にアプリケーションがキーファイル.p12でservice-account-methodを使用して、Googleサーバーに対して自分自身を認証する必要があることを学びました
認証に次のコードを使用しています: (ここからダウンロード: http://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount.php )
session_start();
require_once 'google-api/src/Google_Client.php';
require_once 'google-api/src/contrib/Google_CalendarService.php';
require_once 'google-api/src/contrib/Google_PredictionService.php';
$client = new Google_Client();
$client->setApplicationName(GOOGLE_APPLICATION_NAME);
$client->setClientId(GOOGLE_CLIENT_ID);
$keyfile = file_get_contents(GOOGLE_KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
GOOGLE_SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/prediction'),
$keyfile)
);
しかし、このログインは機能していないようです。その時点でサーバーがログインしているかどうかを確認するにはどうすればよいですか?
私はこれを続けたい:
$cal = new Google_CalendarService($client);
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
if ($client->getAccessToken()) {
$calList = $cal->calendarList->listCalendarList(); // <- this is line 55
print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>";
$_SESSION['token'] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
print "<a class='login' href='$authUrl'>Connect Me!</a>";
}
しかし、55 行目で次のエラーが発生します。
致命的なエラー: /usr/www/users/leuchtk/ で「 GET https://www.googleapis.com/calendar/v3/users/me/calendarListの呼び出し中にエラーが発生しました: (403) 権限が不十分です」というメッセージを含むキャッチされない例外「Google_ServiceException」 html/google-api/src/io/Google_REST.php:66
スタック トレース: #0 /usr/www/users/leuchtk/html/google-api/src/io/Google_REST.php(36): Google_REST::decodeHttpResponse(Object(Google_HttpRequest)) #1 /usr/www/users/ leuchtk/html/google-api/src/service/Google_ServiceResource.php(186): Google_REST::execute(Object(Google_HttpRequest)) #2 /usr/www/users/leuchtk/html/google-api/src/contrib/ Google_CalendarService.php(205): Google_ServiceResource->__call('list', Array) #3 /usr/www/users/leuchtk/html/i_termine_admin.php(55): Google_CalendarListServiceResource->listCalendarList() #4 /usr/www /users/leuchtk/html/termine_admin.php(113): include('/usr/www/users/...') #5 {main} が /usr/www/users/leuchtk/html/google-api でスローされます/src/io/Google_REST.php 66 行目
そのため、アプリケーションがログインしていないようです。今のところ、このコードで完全に迷っています。小さな光をありがとう、そこに欠けているもの...
マルコ