1

我正在處理Google日曆與我的應用程序同步。 我使用最新的google-api-php-client批量請求Google日曆php API

現在我想更新我所有的事件,所以我想使用批處理操作。 PHP客戶端API的示例代碼:

$client = new Google_Client(); 
$plus = new Google_PlusService($client); 

$client->setUseBatch(true); 

$batch = new Google_BatchRequest(); 
$batch->add($plus->people->get(''), 'key1'); 
$batch->add($plus->people->get('me'), 'key2'); 
$result = $batch->execute(); 

所以,當我「翻譯」它的日曆API,我成了下面的代碼: $客戶端=新Google_Client(); $ this-> service = new Google_CalendarService($ client);

$client->setUseBatch(true); 
// Make new batch and fill it with 2 events 
$batch = new Google_BatchRequest(); 

$gEvent1 = new Google_event(); 
$gEvent1->setSummary("Event 1"); 

$gEvent2 = new Google_event(); 
$gEvent2->setSummary("Event 2"); 

$batch->add($this->service->events->insert('primary', $gEvent1)); 
$batch->add($this->service->events->insert('primary', $gEvent2)); 

$result = $batch->execute(); 

但是當我運行此代碼,我得到這個錯誤:

Catchable fatal error: Argument 1 passed to Google_BatchRequest::add() 
    must be an instance of Google_HttpRequest, instance of Google_Event given 

而且我不認爲 「$加功能>以人爲>獲取( '')」 是一個HttpRequest的。

有人知道我做錯了什麼,或者我應該用什麼方法/對象來添加批處理? 或日曆的批處理操作的正確用法是什麼?

在此先感謝!

回答

1

我在插入MirrorService api的時候遇到了同樣的問題,特別是時間軸項目。現在發生的事情是,Google_ServiceRequest對象看到您已經在客戶端上設置了useBatch標誌,並且實際上在執行對Google的調用之前返回了Google_HttpRequest對象,但日曆服務中的插入語句沒有正確處理它這樣並最終返回日曆事件對象。

它也看起來像你的參數批量添加是向後。應該是:

$batch->add($this->service->events->insert($gEvent1, 'primary')); 

下面是我修改插入方法(你需要與對象輸入正確的方法做這個日曆服務)。只需幾行即可查看ServiceRequest類返回的課程類別:

public function insert(google_TimelineItem $postBody, $optParams = array()) { 
    $params = array('postBody' => $postBody); 
    $params = array_merge($params, $optParams); 
    $data = $this->__call('insert', array($params)); 
    if ($this->useObjects()) { 
    if(get_class($data) == 'Google_HttpRequest'){ 
     return $data; 
    }else{ 
     return new google_TimelineItem($data); 
    } 
    } else { 
    return $data; 
    } 
}