批量请求Google Calendar php API

时间:2013-11-27 16:23:35

标签: php google-api google-calendar-api google-api-client google-api-php-client

我正在与我的应用程序进行谷歌日历同步。 我正在使用最新的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。

有人知道我做错了什么,或者我应该在批处理中添加什么方法/对象? 或者日历的批处理操作的正确用法是什么?

提前致谢!

1 个答案:

答案 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;
  }
}