Google カレンダーAPI についての質問です。
Google カレンダーAPI についての質問です。
Google カレンダーAPI をphpで取得し、サービスアカウントを使用して予定を書き込みました。
再度、その同じカレンダーIDのカレンダーを読み込むと、サービスアカウントでphpから書き込んだ予定だけ、読み込むことができません。
原因はなにが考えられますか?
もしくは、サービスアカウントでphpから書き込まれた予定は、phpでは読み込めない仕様なのでしょうか?
設定情報
①google-api-php-client-1-master の autoload.php を使っています。
②Google カレンダーV3 です。
③カレンダーID では共有しているメールアカウント(サービスアカウント)には「予定の変更権限」を与えてあり、カレンダーに書き込みはできます。
④オーナーがGoogleカレンダー上で直接書き込んだ予定は、phpで読み込むことができますが、サービスアカウントでphpで書き込んだ予定は読み込むことができません。
要するに、phpで読み込んで、予定をphpで書き込んだ後、リロードしても予定をphpで書き込んだものだけ読み込めないという現象です。
なお、Google カレンダーを開くと、phpから書き込んだ予定は、しっかりと書きこまれています。
ただ、予定の作成者は、オーナーのメールアカウントではなく、サービスアカウントのアドレスで作成されています。
どなたかおわかりになる方はいらっしゃいませんでしょうか?
****追記****
//read EVENT
$json_path = '../json/XXXX-123465789.json';
$json_string = file_get_contents($json_path, true);
$json = json_decode($json_string, true);
$private_key = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADAN・・・・・";
$client_email = "123456789-compute@developer.gserviceaccount.com";
$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();
}
$service = new Google_Service_Calendar($client);
$read_start = mktime(0, 0, 0, 4, 10, 2017);
$read_end = mktime(0, 0, 0, 4, 17, 2017);
$calendarId = '123456789@group.calendar.google.com';
$optParams = array(
'maxResults' => 99,
'orderBy' => 'startTime',
'singleEvents' => TRUE,
'timeMin' => date('c', $read_start),
'timeMax' => date('c', $read_end),
);
$results = $service->events->listEvents($calendarId, $optParams);
//create EVENT
$json_path = './json/xxx-123456789.json';
$json_string = file_get_contents($json_path, true);
$json = json_decode($json_string, true);
$calendarId = '123456789@group.calendar.google.com';
$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");
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
$service = new Google_Service_Calendar($client);
$meeting_end_time = _get_sum_time($set_time,$meeting_time);
$event = new Google_Service_Calendar_Event(array(
'summary' => 'created by service account',
'start' => array(
'dateTime' => '2017-04-04T00:12:00+09:00',
'timeZone' => 'Asia/Tokyo',
),
'end' => array(
'dateTime' => '2017-04-04T00:13:00+09:00',
'timeZone' => 'Asia/Tokyo',
),
));
$event = $service->events->insert($calendarId, $event);
よろしくお願いします。