我正在尝试使用Admin SDK并尝试在Google电子表格中列出群组成员。这是我提出的代码:
function recordGroupsMembers() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Get all groups
var groupPageToken, groupPage;
do {
groupPage = AdminDirectory.Groups.list({
domain: 'mydomain.com',
maxResults: 100,
pageToken: groupPageToken
});
var groups = groupPage.groups;
if (groups) {
//Iterate groups
for (var i in groups) {
var group = groups[i];
//Get members of group
var membersPageToken, membersPage;
do {
membersPage = AdminDirectory.Members.list(group, {
maxResults: 100,
pageToken: membersPageToken
});
var members = membersPage.members;
if (members) {
//Iterate group members
for (var j in members) {
var member = members[j];
Logger.log('%s member: %s', group.email, member.email);
}
} else {
Logger.log('%s: no members.', group.email);
}
membersPageToken = membersPage.nextPageToken;
} while (membersPageToken);
}
} else {
Logger.log('No groups found.');
}
groupPageToken = groupPage.nextPageToken;
} while (groupPageToken);
ScriptProperties.setProperty('lastUpdate', new Date());
}
对于AdminDirectory.Members.list
来电,会显示以下错误:
未授权访问此资源/ api
要明确的是,管理员SDK目录服务已在资源>下的enabled。高级Google服务...... ,以及Google Developer Console。
此外,运行此脚本的用户可以使用API Explorer成功检索预期结果。
我得到的印象是我忽略了一些非常简单或者“Apps Script handles the authorization flow automatically”语句中的错误。
答案 0 :(得分:2)
基本上,这个脚本有两个问题。
未授权访问此资源/ api - >这至少有两个可能的原因:
a) You don't have sufficient Admin privileges to access this API (Basically, you're not a SuperAdmin).
b) The domain is spelled incorrectly in your live code (I hesitate to even mention this one, but mistakes do happen).
否则,这部分对我来说很好,'原样'我只能重现:
Not Authorized to access this resource/api
当这两个问题之一适用时。
一旦您解决了这个错误,您就会遇到错误的请求' for:
membersPage = AdminDirectory.Members.list(group, {
maxResults: 100,
pageToken: membersPageToken
});
第21行。
这是因为行:
var group = groups[i];
看起来喜欢它只是返回一个带有该组名称的字符串,但实际上它返回的内容如下:
{id=GROUPID, nonEditableAliases=[GROUPEMAIL, GROUPEMAIL], etag=GROUPTAG, email=GROUPEMAIL, directMembersCount=3, description=, adminCreated=true, name=GROUPNAME, kind=admin#directory#group}
这是一个简单的修复,我们只需将其替换为:
membersPage = AdminDirectory.Members.list(group.email, {
maxResults: 100,
pageToken: membersPageToken
});
它将返回我们正在寻找的结果。