3

我正在使用 Google Admin SDK 来创建、更新和删除邮件列表(又名组)。

到目前为止一切正常,我可以创建一个新组并向其中添加成员。但是:每次添加一个成员大约需要 1 秒,所以我正在考虑一次将多个用户添加到一个组的批处理请求。

在 Google Admin 界面中,一次添加多个用户很容易,但我没有找到任何通过 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);
4

2 回答 2

3

最后我自己找到了一个解决方案: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);

仅此而已,而且效果很好

于 2015-03-18T21:34:26.563 回答
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();
于 2020-12-02T10:31:08.633 回答