Help us understand the problem. What is going on with this article?

GASでAdmin SDKを利用する(Reports編)その1

More than 3 years have passed since last update.

Reports APIについて

公式ドキュメント:https://developers.google.com/admin-sdk/reports/v1/get-start/getting-started

Reports APIは、Google Appsの利用状況を取得するAPIです。指定するパラメータによって、以下の利用状況を取得する事ができます。

  • admin(管理者イベント)
  • calendar(カレンダー)
  • drive(Google Drive)
  • groups(Google Groups)
  • login(ログイン)
  • token(OAuthを使った認証)

今回は、Activitiesを取得してみる。

今回は、Activitiesを使って、すべてのイベントのリストを取得します。

今日のコード.gs

今回は、Spreadsheetに出力するようにしました。eventの数が複数になるようなので、ちょっとソースコードは整理されていない感じになっています。

コード.gs
function myFunction() {
  var applicationNames = ["admin", "calendar", "drive", "groups", "login", "token"];
  var cells = [];

  cells.push(["id", "actor", "ipAddress", "ownerDomain", "event.name", "event.type", "event.parameters"]);
  for(var name in applicationNames) {
    var pageToken = "";
    Logger.log(applicationNames[name]);
    do {
      var page;
      if(pageToken != "") {
        page = AdminReports.Activities.list("all", applicationNames[name], {pageToken: pageToken});
      } else {
        page = AdminReports.Activities.list("all", applicationNames[name]);
      }
      pageToken = page.nextPageToken;
      if(page.items) {
        for(var i = 0; i < page.items.length; i++) {
          var rows = [];

          if(page.items[i].events.length > 0) {
            for(var j = 0; j < page.items[i].events.length; j++) {
              rows.push(page.items[i].id);
              rows.push(page.items[i].actor);
              rows.push(page.items[i].ipAddress);
              rows.push(page.items[i].ownerDomain);
              rows.push(page.items[i].events[j].name);
              rows.push(page.items[i].events[j].type);
              rows.push(page.items[i].events[j].parameters);

              cells.push(rows);
            }
          } else {
            rows.push(page.items[i].id);
            rows.push(page.items[i].actor);
            rows.push(page.items[i].ipAddress);
            rows.push(page.items[i].ownerDomain);
            rows.push("なし");
            rows.push("なし");
            rows.push("なし");

            cells.push(rows);
          }          
        }
      }
      Logger.log(pageToken);
    } while(pageToken != undefined);
  }

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  sheet.getRange("A1:G" + cells.length).setValues(cells);
}

実行時に承認

ほぼ毎回のことですが、実行時に承認をする必要があります。
許可のリクエスト.png

実行結果

今回は利用頻度が少なすぎたのか、あまりデータが取得できなかったのと、リアルタイムでActivityのログが取得できるわけではないようです。あまりに取得結果が少なかったので、カレンダーを追加してみたのですが、すぐに取得できるようにならなかった。

結論

Google Appsはしっかり使おう!

Disclaimer

  • この記事は個人的なものです。私の雇用者とは全く関係はありません。(一応つけておきます)
ttyokoyama
GDG Okayama Organizer たまにGoogle関連の技術の事を投稿しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away