获取 G Suite 中给定用户列表的用户 Activity 报告
Getting User Activity Reports for a given list of users in G Suite
我正在尝试使用 Admin SDK 报告服务获取 20 个用户的上次登录时间和一些其他数据。由于域的大小,获取整个域的数据然后过滤是不可行的,所以我想只获取这 20 个用户的数据,但我似乎找不到办法做到这一点。我当前的代码因 Admin user usage reports get failed with error: GoogleJsonResponseException: API call to reports.userUsageReport.get failed with error: Bad Request
而失败
我知道这是错误的,但查看文档时我不确定该怎么做。我可以使用一个用户,并且在网站上运行良好,但唯一的选择是获取所有用户或一个用户似乎很奇怪。我试图修改我的代码以在循环中多次获取一个用户,但由于上述错误而失败。 userList
值是从 AppMaker 用户界面中的 table 中提取的。我也可以毫无问题地使用文档网站的 API 资源管理器。
这是我当前的功能:
function generateLoginActivityReport(userList) {
var today = new Date();
var oneWeekAgo = new Date(today.getTime() - (7 * 24 * 60 * 60 * 1000));
var timezone = Session.getScriptTimeZone();
var date = Utilities.formatDate(oneWeekAgo, timezone, 'yyyy-MM-dd');
userList = JSON.parse(userList);
//console.log("server code: " + list);
for (var a = 0; a < userList.length; a++) {
//console.log(userList[a]);
var parameters = [
'accounts:last_login_time',
'drive:num_items_created'
];
var rows = [];
var pageToken;
var page;
do {
page = AdminReports.UserUsageReport.get('all', date, {
parameters: parameters.join(','),
maxResults: 1,
pageToken: pageToken,
userKey: userList[a]
});
var reports = page.usageReports;
if (page.warnings) {
for (var q = 0; q < page.warnings.length; q++) {
var warning = page.warnings[a];
Logger.log(warning.message);
}
}
if (reports) {
for (var i = 0; i < reports.length; i++) {
var report = reports[i];
try {
var parameterValues = getParameterValues(report.parameters);
var row = [
report.date,
report.entity.userEmail,
parameterValues['accounts:last_login_time'],
//parameterValues['drive:num_items_created']
];
rows.push(row);
var ar = app.models.ActivityReport.newRecord();
ar.LastLogin = parameterValues['accounts:last_login_time'];
console.log(report.entity.userEmail);
ar.DocsAdded = 0; //getting this value is another issue but unrelated so it's set to 0 for now.
ar.Email = report.entity.userEmail.toString();
app.saveRecords([ar]);
}
catch(error) {
console.error("Error! Did not write last item to model: \n"+error);
}
}
}
} while (pageToken);
}
}
问题是由您调用方法的方式引起的AdminReports.UserUsageReport()
。
正确的语法是:
AdminReports.UserUsageReport.get(userKey, date, optionalArgs)
因此,您需要将用户密钥 ‘all’
替换为 userList[a]
,而不是在参数中插入 userkey
:
page = AdminReports.UserUsageReport.get(userList[a], date, {
parameters: parameters.join(','),
maxResults: 1,
pageToken: pageToken,
});
我正在尝试使用 Admin SDK 报告服务获取 20 个用户的上次登录时间和一些其他数据。由于域的大小,获取整个域的数据然后过滤是不可行的,所以我想只获取这 20 个用户的数据,但我似乎找不到办法做到这一点。我当前的代码因 Admin user usage reports get failed with error: GoogleJsonResponseException: API call to reports.userUsageReport.get failed with error: Bad Request
我知道这是错误的,但查看文档时我不确定该怎么做。我可以使用一个用户,并且在网站上运行良好,但唯一的选择是获取所有用户或一个用户似乎很奇怪。我试图修改我的代码以在循环中多次获取一个用户,但由于上述错误而失败。 userList
值是从 AppMaker 用户界面中的 table 中提取的。我也可以毫无问题地使用文档网站的 API 资源管理器。
这是我当前的功能:
function generateLoginActivityReport(userList) {
var today = new Date();
var oneWeekAgo = new Date(today.getTime() - (7 * 24 * 60 * 60 * 1000));
var timezone = Session.getScriptTimeZone();
var date = Utilities.formatDate(oneWeekAgo, timezone, 'yyyy-MM-dd');
userList = JSON.parse(userList);
//console.log("server code: " + list);
for (var a = 0; a < userList.length; a++) {
//console.log(userList[a]);
var parameters = [
'accounts:last_login_time',
'drive:num_items_created'
];
var rows = [];
var pageToken;
var page;
do {
page = AdminReports.UserUsageReport.get('all', date, {
parameters: parameters.join(','),
maxResults: 1,
pageToken: pageToken,
userKey: userList[a]
});
var reports = page.usageReports;
if (page.warnings) {
for (var q = 0; q < page.warnings.length; q++) {
var warning = page.warnings[a];
Logger.log(warning.message);
}
}
if (reports) {
for (var i = 0; i < reports.length; i++) {
var report = reports[i];
try {
var parameterValues = getParameterValues(report.parameters);
var row = [
report.date,
report.entity.userEmail,
parameterValues['accounts:last_login_time'],
//parameterValues['drive:num_items_created']
];
rows.push(row);
var ar = app.models.ActivityReport.newRecord();
ar.LastLogin = parameterValues['accounts:last_login_time'];
console.log(report.entity.userEmail);
ar.DocsAdded = 0; //getting this value is another issue but unrelated so it's set to 0 for now.
ar.Email = report.entity.userEmail.toString();
app.saveRecords([ar]);
}
catch(error) {
console.error("Error! Did not write last item to model: \n"+error);
}
}
}
} while (pageToken);
}
}
问题是由您调用方法的方式引起的AdminReports.UserUsageReport()
。
正确的语法是:
AdminReports.UserUsageReport.get(userKey, date, optionalArgs)
因此,您需要将用户密钥 ‘all’
替换为 userList[a]
,而不是在参数中插入 userkey
:
page = AdminReports.UserUsageReport.get(userList[a], date, {
parameters: parameters.join(','),
maxResults: 1,
pageToken: pageToken,
});