【问题标题】:Google Directory API - batch add members to a groupGoogle Directory API - 将成员批量添加到组
【发布时间】:2015-05-21 20:23:11
【问题描述】:

我正在使用 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);

【问题讨论】:

    标签: google-admin-sdk google-groups google-groups-api


    【解决方案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();
    

    【讨论】:

      【解决方案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);
      

      仅此而已,而且效果很好

      【讨论】:

        猜你喜欢
        • 2015-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-11
        • 2015-08-02
        • 2023-02-10
        • 1970-01-01
        相关资源
        最近更新 更多