3

Google_CalendarService を使用してすべてのイベントを取得しようとしています。これまでのところ、定期的なイベントですべてを取得していますが、表示されないイベントがいくつかあります。

例: 22-okt、23-okt、および 24-okt にイベントがあります。それらはすべて通常のイベントですが、取得しているのは 22 と 23 だけです。24 は表示されませんが、私のカレンダーには存在します。

【追記】また不具合発見!アプリを介して既存のイベントを編集するたびに、イベントは消えますが、カレンダーには存在します!

データを取得するための私のコードは次のとおりです。

API 設定:

function calSettings(){

    $client = new Google_Client();

    $cal = new Google_CalendarService($client);

    $client->setAccessType('offline');

    if (isset($_GET['code'])) {

        $client->authenticate($_GET['code']);

        $_SESSION['token'] = $client->getAccessToken();

        header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);

    }


    if (isset($_SESSION['token'])) {


        $client->setAccessToken($_SESSION['token']);


        $sessionToken = json_decode($_SESSION['token']);


        $this->Cookie->write('token', $sessionToken->refresh_token, false, '1 month');
    }


    $cookie = $this->Cookie->read('token');

    if(!empty($cookie)){
        $client->refreshToken($this->Cookie->read('token'));
    }


    $serviceArr = array('client' => $client, 'service' => $cal);

    return $serviceArr;
}

イベントを取得:

public function initCalendar($ownerCalendarId = null, $eventID = null){

    $serviceArr = $this->calSettings();
    $client = $serviceArr['client'];
    $cal = $serviceArr['service'];
    $wandaCalendarId = 'gmail@gmail.com';

    if ($client->getAccessToken()) {
        /************* Code entry *************/
        if($eventID != null){
            $events = $cal->events->get($ownerCalendarId, $eventID);
        }else{
            $ownerEvents = $cal->events->listEvents($ownerCalendarId);

            if($ownerCalendarId != $wandaCalendarId){
                $wandaEvents = $cal->events->listEvents($wandaCalendarId);
                $events = array('owner' => $ownerEvents, 'wanda' => $wandaEvents);
            }else{
                $events = array('owner' => $ownerEvents, 'wanda' => '');
            }
        }

        return $events;

    }else{
        /************* Not connected to google calendar code *************/
        $authUrl = $client->createAuthUrl();

        $returnArr = array('status' => 'false', 'message' => "<a class='login' href='$authUrl'>Connect Me!</a>");

        return $returnArr;
    }
}

このコードでは、ほとんどのイベントを取得できますが、他のイベントが表示されないのはなぜですか? 誰かが以前にこの問題を抱えていましたか?

4

4 に答える 4

10

わかりました、ついにすべてのイベントを取得する方法を見つけました!

面白いことに、すべてのイベントを取得できますが、250 のイベントのバッチになります。250 を超えるイベントがある場合は、JSON 応答でページ トークンを取得します。ページトークンを使用して、イベントの次のバッチを取得してください!

編集部分について?イベントを編集すると、そのイベントがイベント リストの一番下にスローされることに気付きました。したがって、取得するイベントは、最後に編集された順に並べ替えられます。

不要なデータを避けたり、シンプルに保つために、timeMin と timeMax を使用してイベントをフィルタリングできます。何をするかに応じて、これを動的に設定してリクエストクエリを変更できます。

ページトークンで必要なイベントを取得する私のバージョンは次のとおりです。

$minCheck = date(DATE_ATOM, mktime(0, 0, 0, 1, 1, date("Y") -1));
$maxCheck = date(DATE_ATOM, mktime(0, 0, 0, 12, 31, date("Y") +1));

do{
if(isset($result['nextPageToken'])){
   $result= $cal->events->listEvents($calendarId, array('singleEvents' => 'true', 'pageToken' => $result['nextPageToken'], 'timeMin' => $minCheck, 'timeMax' => $maxCheck));
}else{
   $result= $cal->events->listEvents($calendarId, array('singleEvents' => 'true', 'timeMin' => $minCheck, 'timeMax' => $maxCheck));
}
array_push($totalResult, $result['items']);
}while(isset($result['nextPageToken']) && !empty($result['nextPageToken']));
于 2012-10-31T16:17:57.117 に答える
2

デフォルト値は 250 件です。オプションのクエリ パラメータ「maxResults」を使用して、最大 2500 件の結果まで増やすことができます (イベント: リストを参照) 。

于 2015-05-28T09:50:08.553 に答える