Admin SDK Reports サービスを使用すると、Apps Script で Admin SDK の Reports API を使用できます。この API により、ドメインの管理者(販売パートナーを含む)は、 Google Workspace ドメインのカスタムの使用状況レポートを作成できるようになります。
リファレンス
このサービスの詳細については、Admin SDK Reports API のリファレンス ドキュメントをご覧ください。Apps Script のすべての高度なサービスと同様に、Admin SDK Reports サービスでも公開 API と同じオブジェクト、メソッド、パラメータを使用します。詳細については、メソッド シグネチャの決定方法をご覧ください。
問題を報告し、その他のサポートを探すには、Admin SDK レポートのサポートガイドをご覧ください。
サンプルコード
以下のサンプルコードでは、API のバージョン 1 を使用しています。
ログイン アクティビティ レポートを生成する
このサンプルでは、先週のログイン アクティビティ レポートをスプレッドシートとして生成します。このレポートには、時刻、ユーザー、ログイン結果が含まれます。
advanced/adminSDK.gs
/** * Generates a login activity report for the last week as a spreadsheet. The * report includes the time, user, and login result. * @see https://developers.google.com/admin-sdk/reports/reference/rest/v1/activities/list */ function generateLoginActivityReport() { const now = new Date(); const oneWeekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000); const startTime = oneWeekAgo.toISOString(); const endTime = now.toISOString(); const rows = []; let pageToken; let page; do { page = AdminReports.Activities.list('all', 'login', { startTime: startTime, endTime: endTime, maxResults: 500, pageToken: pageToken }); const items = page.items; if (items) { for (const item of items) { const row = [ new Date(item.id.time), item.actor.email, item.events[0].name ]; rows.push(row); } } pageToken = page.nextPageToken; } while (pageToken); if (rows.length === 0) { console.log('No results returned.'); return; } const spreadsheet = SpreadsheetApp.create('Google Workspace Login Report'); const sheet = spreadsheet.getActiveSheet(); // Append the headers. const headers = ['Time', 'User', 'Login Result']; sheet.appendRow(headers); // Append the results. sheet.getRange(2, 1, rows.length, headers.length).setValues(rows); console.log('Report spreadsheet created: %s', spreadsheet.getUrl()); }
ユーザー使用状況レポートを生成する
このサンプルでは、先週のこの日のユーザー使用状況レポートをスプレッドシートとして生成します。このレポートには、日付、ユーザー、最終ログイン時刻、受信メールの数、所有ドキュメントの数が含まれます。
advanced/adminSDK.gs
/** * Generates a user usage report for this day last week as a spreadsheet. The * report includes the date, user, last login time, number of emails received, * and number of drive files created. * @see https://developers.google.com/admin-sdk/reports/reference/rest/v1/userUsageReport/get */ function generateUserUsageReport() { const today = new Date(); const oneWeekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000); const timezone = Session.getScriptTimeZone(); const date = Utilities.formatDate(oneWeekAgo, timezone, 'yyyy-MM-dd'); const parameters = [ 'accounts:last_login_time', 'gmail:num_emails_received', 'drive:num_items_created' ]; const rows = []; let pageToken; let page; do { page = AdminReports.UserUsageReport.get('all', date, { parameters: parameters.join(','), maxResults: 500, pageToken: pageToken }); if (page.warnings) { for (const warning of page.warnings) { console.log(warning.message); } } const reports = page.usageReports; if (reports) { for (const report of reports) { const parameterValues = getParameterValues(report.parameters); const row = [ report.date, report.entity.userEmail, parameterValues['accounts:last_login_time'], parameterValues['gmail:num_emails_received'], parameterValues['drive:num_items_created'] ]; rows.push(row); } } pageToken = page.nextPageToken; } while (pageToken); if (rows.length === 0) { console.log('No results returned.'); return; } const spreadsheet = SpreadsheetApp.create('Google Workspace User Usage Report'); const sheet = spreadsheet.getActiveSheet(); // Append the headers. const headers = ['Date', 'User', 'Last Login', 'Num Emails Received', 'Num Drive Files Created']; sheet.appendRow(headers); // Append the results. sheet.getRange(2, 1, rows.length, headers.length).setValues(rows); console.log('Report spreadsheet created: %s', spreadsheet.getUrl()); } /** * Gets a map of parameter names to values from an array of parameter objects. * @param {Array} parameters An array of parameter objects. * @return {Object} A map from parameter names to their values. */ function getParameterValues(parameters) { return parameters.reduce((result, parameter) => { const name = parameter.name; let value; if (parameter.intValue !== undefined) { value = parameter.intValue; } else if (parameter.stringValue !== undefined) { value = parameter.stringValue; } else if (parameter.datetimeValue !== undefined) { value = new Date(parameter.datetimeValue); } else if (parameter.boolValue !== undefined) { value = parameter.boolValue; } result[name] = value; return result; }, {}); }