使用 AdminReports.Activities.list 获取每个用户的最新日期和操作
Getting the most recent date & action for each user using AdminReports.Activities.list
我需要为 Google Currents(以前是 Google plus)Google 域中的每个用户获取最新的 activity
我为此使用 AdminReports.Activities.list,使用 'all' 参数而不是电子邮件地址。
我已经使用以下脚本进行了测试:
function testFunc() {
let target;
if (testState == true) {
target = "single.user@email.com";
} else if (testState == false) {
target = "all";
} else {
throw "State not defined";
}
const app = "gplus";
const daysToCheck = 1;
const now = new Date();
const daysAgo = new Date(now.getTime() - daysToCheck * 24 * 60 * 60 * 1000);
const date = daysAgo.toISOString();
const optionalArgs = {
startTime: date
};
let rows = [];
let response;
let pageToken;
do {
response = AdminReports.Activities.list(target, app, optionalArgs);
let activities = response.items;
if (activities) {
activities.forEach(item => {
let row = [
new Date(item.id.time),
item.actor.email,
item.events[0].name
]
rows.push(row)
})
} else {
throw 'Error'
}
pageToken = response.nextPageToken;
} while (pageToken);
Logger.log(rows);
/** NOTES
* will eventually log this out to a spreadsheet
*/
}
但是,这将 return 一个人的多个事件。我只需要 return 域中每个用户的最新事件。
有人对如何实现这一点有任何想法吗?
解决方案:
您可以按名称顺序对 rows
数组进行排序,然后按时间降序排列,然后循环到 return 每个名称的第一个元素。
示例代码: 在 Logger.log(rows)
之后
rows.sort(function(a,b) {
if (a[2] == b[2])
return a[0] < b[0] ? 1 : -1;
return a[2] < b[2] ? -1 : 1;
});
let final = [];
final.push(rows[0]);
for (i = 1; i < rows.length; i++) {
if (rows[i][2] != arr[i-1][2])
final.push(rows[i]);
}
console.log(final);
我需要为 Google Currents(以前是 Google plus)Google 域中的每个用户获取最新的 activity
我为此使用 AdminReports.Activities.list,使用 'all' 参数而不是电子邮件地址。
我已经使用以下脚本进行了测试:
function testFunc() {
let target;
if (testState == true) {
target = "single.user@email.com";
} else if (testState == false) {
target = "all";
} else {
throw "State not defined";
}
const app = "gplus";
const daysToCheck = 1;
const now = new Date();
const daysAgo = new Date(now.getTime() - daysToCheck * 24 * 60 * 60 * 1000);
const date = daysAgo.toISOString();
const optionalArgs = {
startTime: date
};
let rows = [];
let response;
let pageToken;
do {
response = AdminReports.Activities.list(target, app, optionalArgs);
let activities = response.items;
if (activities) {
activities.forEach(item => {
let row = [
new Date(item.id.time),
item.actor.email,
item.events[0].name
]
rows.push(row)
})
} else {
throw 'Error'
}
pageToken = response.nextPageToken;
} while (pageToken);
Logger.log(rows);
/** NOTES
* will eventually log this out to a spreadsheet
*/
}
但是,这将 return 一个人的多个事件。我只需要 return 域中每个用户的最新事件。
有人对如何实现这一点有任何想法吗?
解决方案:
您可以按名称顺序对 rows
数组进行排序,然后按时间降序排列,然后循环到 return 每个名称的第一个元素。
示例代码: 在 Logger.log(rows)
rows.sort(function(a,b) {
if (a[2] == b[2])
return a[0] < b[0] ? 1 : -1;
return a[2] < b[2] ? -1 : 1;
});
let final = [];
final.push(rows[0]);
for (i = 1; i < rows.length; i++) {
if (rows[i][2] != arr[i-1][2])
final.push(rows[i]);
}
console.log(final);