我正在使用Google Admin SDK创建,更新和删除邮件列表(也称为群组)。
到目前为止一切正常,我可以创建一个新组并添加成员。但是:每增加一个成员需要大约1秒,所以我想到一个批处理请求,一次将多个用户添加到一个组。
在Google管理界面中,可以轻松添加多个用户,但我没有找到任何方法通过API实现此功能。
有没有办法这样做,还是我必须遍历每个用户?
如果必须为每个用户执行此操作,但需要花费大量时间:
$service = new Google_Service_Directory($this->getGoogleClient());
$user = new Google_Service_Directory_Member();
$user->setEmail('test@test.com');
$user->setRole('MEMBER');
$user->setType('USER');
$service->members->insert($group_id, $user);
答案 0 :(得分:2)
最后我自己找到了一个解决方案:Admin SDK带有Batch类:)
要获得批处理请求,必须执行以下步骤:
启动Google客户端时,请在代码中添加以下行
$client->setUseBatch(true);
然后您可以启动批处理对象
$batch = new Google_Http_Batch($client);
对上面发布的代码进行了一些修改,这让我想到了这段代码
foreach($arr_users as $user)
{
$userdata = new Google_Service_Directory_Member();
$userdata->setEmail($user);
$userdata->setRole('MEMBER');
$userdata->setType('USER');
$batch->add($service->members->insert($temp_list_name, $userdata));
}
最后你必须执行这一行所做的请求:
$client->execute($batch);
全部而且完美无缺
答案 1 :(得分:1)
在使用Christian Lange的方法时,我遇到了这个错误-
Argument 1 passed to Google\Client::execute() must implement interface Psr\Http\Message\RequestInterface, instance of Google\Http\Batch given,
所以我改用了它
$client->setUseBatch(true);
$service = new Google_Service_Directory($client);
$batch = $service->createBatch();
foreach ($emails as $email)
{
$user = new Google_Service_Directory_Member(array('email' => $email,
'kind' => 'member',
'role' => 'MEMBER',
'type' => 'USER'));
$list = $service->members->insert($key, $user);
$batch->add($list);
}
$resultsBatch = $batch->execute();