我正在与我的应用程序进行谷歌日历同步。 我正在使用最新的google-api-php-client
现在我想更新我的所有活动,所以我想使用批处理操作。 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时,我将成为以下代码: $ client = new 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
我不认为“$ plus-> people-> get('')”是一个HttpRequest。
有人知道我做错了什么,或者我应该在批处理中添加什么方法/对象? 或者日历的批处理操作的正确用法是什么?
提前致谢!
答案 0 :(得分:1)
使用MirrorService api的插入时遇到了同样的问题,特别是时间轴项。发生的事情是,Google_ServiceRequest对象看到您在客户端上设置了useBatch标志,并且在执行对Google的调用之前实际上返回了返回的Google_HttpRequest对象,但日历服务中的insert语句没有正确处理它这样并最终返回日历事件对象。
看起来你的params-gt; add是向后的。应该是:
$batch->add( $this->service->events->insert($gEvent1, 'primary'));
这是我对insert方法的修改(你需要在日历服务中使用方法的正确对象输入来执行此操作)。只需几行就可以检查从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;
}
}