Google api Google用户:列出特定组的用户数据

Google api Google用户:列出特定组的用户数据,google-api,google-admin-sdk,google-api-nodejs-client,Google Api,Google Admin Sdk,Google Api Nodejs Client,我需要列出属于组织内特定组的用户数据。未指定这是否可行。我真的希望能有某种查询来允许这一点。例如,email in(1@domain.com,2@domain.com)。然而,我不认为这是可能的。我认为实现这一目标的唯一方法是: 获取组()中所有成员的列表 通过电子邮件获取每个用户的数据() 上述方法的问题是,如果一个组包含50多个成员,这意味着我必须提出所有数量的请求,这会适得其反。想象一下这需要多长时间 有什么想法吗?非常感谢。不幸的是,我不认为您可以跳过这两个步骤,但您可以使用。这 允

我需要列出属于组织内特定组的用户数据。未指定这是否可行。我真的希望能有某种查询来允许这一点。例如,
email in(1@domain.com,2@domain.com)
。然而,我不认为这是可能的。我认为实现这一目标的唯一方法是:

  • 获取组()中所有成员的列表

  • 通过电子邮件获取每个用户的数据()

  • 上述方法的问题是,如果一个组包含50多个成员,这意味着我必须提出所有数量的请求,这会适得其反。想象一下这需要多长时间


    有什么想法吗?非常感谢。

    不幸的是,我不认为您可以跳过这两个步骤,但您可以使用。这 允许您在一次请求中最多请求1000个呼叫。这些步骤将是:

  • 发出批处理请求以获取所需所有组的所有成员(使用
    members.list
  • 使用用户id(使用
    user.get
    )批量请求获取所需的所有用户信息
  • 请注意,结果中的数据不会被排序,但它们将被
    内容ID
    标记

    工具书类

    在我发布问题的几个小时后,我考虑了批处理请求。Node JS的问题在于它没有内置的批处理请求支持,这与php客户端库不同;因此,我不得不花一些时间自己实现对它的支持,因为我找不到任何示例。我将分享解决方案,以防它对其他人有帮助,或供我将来参考

    异步函数getGroupMembersData(){ const groupEmail=”group@domain.com“;//谷歌集团电子邮件 const groupMembers=等待getGroupMembers(groupEmail).catch(错误=>{ 错误(`error querying group members:${error.toString()}`); }); 如果(!groupMembers){return;} 常量url=”https://www.googleapis.com/batch/admin/directory_v1"; 常量范围=[”https://www.googleapis.com/auth/admin.directory.user.readonly"]; 常量请求=[]; for(设i=0;i{ 错误(`error processing batch request:${error.toString()}`); }); 如果(!batchRequestData){return;} const usersList=batchRequestData.map(i=>{ 返回i.responseBody; }); console.log(usersList); } //使用组电子邮件地址获取组成员 异步函数getGroupMembers(groupKey){ const client=wait getClient(scopes);//函数要获得授权的客户端,必须自己实现 const service=google.admin({version:“directory_v1”,auth:client}); const request=wait service.members.list({ groupKey, 字段:“成员(电子邮件)”, 最大结果:200 }); const members=!!request.data.members?request.data.members.map(i=>i.email):[]; 返回成员; } //以100人为一组处理批处理请求 异步函数batchProcess(batchUrl、作用域、请求){ const client=wait getClient(scopes);//函数要获得授权的客户端,必须自己实现 让结果=[]; const boundary=“foobar999888”;//边界线定义 让batchBody=“;const nl=“\n”; const batchLimit=100;//定义批处理限制(支持的最大值=100) const totalRounds=Math.ceil(requests.length/batchLimit); 让batchRound=1; 设batchItem=0; 设roundLimit=batchLimit; 做{ roundLimit=roundLimit{ const objectParts=part.split(“:”); responseMeta[objectParts[0].trim()]=objectParts[1].trim(); }); const responseHeadersParts=零件[1]。拆分(nl); 让responseHeaders={}; responseHeadersParts.forEach(part=>{ if(第indexOf部分(“HTTP/1.1”)>-1){ responseHeaders.status=零件; }否则{ const objectParts=part.split(“:”); 响应头[objectParts[0].trim()]=objectParts[1].trim(); } }); const reg=new RegExp(`${nl}`,'g'); const responseBody=JSON.parse(parts[2].replace(reg)”); 常量格式化={ responseMeta:responseMeta, 负责人:负责人, responseBody:responseBody }; 返回格式; }); 返回格式化的响应; }