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
};
返回格式;
});
返回格式化的响应;
}