

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から書き込んだ予定は、しっかりと書きこまれています。

ただ、予定の作成者は、オーナーのメールアカウントではなく、サービスアカウントのアドレスで作成されています。

どなたかおわかりになる方はいらっしゃいませんでしょうか？

＊＊＊＊追記＊＊＊＊

[code]

    //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);
    
[/code]

よろしくお願いします。


CC BY-SA 3.0
2017-04-17T11:01:04.933
34072
2020-06-24T20:44:30.990
2017-04-17T14:40:06.663
22603
22603
question
google-api
Google カレンダーAPI についての質問です。


同じ問題にあたりました。繰り返しイベントを通常イベントにばらして取得するパラメータをtrueにしたら取得できるようになりました。


CC BY-SA 4.0
2020-06-24T20:44:30.990
67966
2020-06-24T20:44:30.990
40810
34072
answer