2012-10-25 23 views
2

我試圖使用Google_CalendarService檢索所有事件。到目前爲止,我正在重新審視所有事件,但有一些事件沒有顯示出來。Google Calendar API PHP listEvents不檢索所有事件

例如:我有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 = '[email protected]'; 

    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; 
    } 
} 
與此代碼

所以,我得到的大部分事件,爲什麼的arent其他人出現?有沒有人有過這個問題?

回答

9

好的,終於找到了如何得到所有的事件!

有趣的是,你得到的所有事件,但分批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'])); 
1

250結果爲默認值。通過使用可選的查詢參數「maxResults」可將其結果增加到2500個結果(請參閱Events: list