ヤマムギ

growing hard days.

*

Google Apps ScriptでAdmin SDK Directory Serviceを使ってグループメンバー情報を出力する

      2015/07/17


GoogleAppsのGoogleGroupをメーリングリストとして使っている人がほとんどだと思うのですが、メンバーの一覧って見る画面がないので、いちいちGroupのメンバーを開くか、他のファイルで管理したりって事で、棚卸しする時に面倒なので、今現在どのメールアドレスがメンバーになっているのかを出力する事はGoogle Apps Scriptで簡単に出来ないかと思って調べてみたら簡単に出来たので記載します。

Admin SDK Directory Serviceを有効にする

今時点では試験運用中のGoogleの拡張サービスなので、
スクリプトエディタで[リソース]-[Googleの拡張サービス]で「Admin Directory API」をONにする。
同じ画面の下にリンクで「Googleデベロッパーコンソール」があるのでそこからGoogleデベロッパーコンソールでも、「Admin SDK」を有効にしておく。

グループメンバーを確認する方法

下のコードをSpreadSheetの[ツール]-[スクリプトエディタ]に書いて、実行したら、とりあえずSpreadSheetに今の設定が書き出せます。
ドメインとかメールアドレスとかは編集して自己責任で参考にしてください。

詳細は公式のAdmin SDK Directory Serviceのページを確認してください。

簡単に説明します。

「page = AdminDirectory.Groups.list~」で指定ドメインのGoogleGroupのリストをpage変数に代入します。

で、「page.groups」をループでまわして、
「var members = AdminDirectory.Members.list(group.email).members」でグループメンバーを代入します。

で、次はメンバーをループでまわしながら、
「user = AdminDirectory.Users.get(member.email)」でユーザ情報を代入します。
※ user.name.fullNameの漢字名が必要だったため。
※ ドメイン外のメールアドレスが含まれる事を考慮したかったのですが、「AdminDirectory.Users.get」でエラーになる事しか分からなかったので、try~catchにしてます。

[js]
function listAllGroupsMembers() {

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var k = 2;

var pageToken, page;
do {
page = AdminDirectory.Groups.list({
domain: ‘xxxxxx.xx.xx’,
maxResults: 300,
pageToken: pageToken
});
var groups = page.groups;
if (groups) {
for (var i = 0; i < groups.length; i++) {
var group = groups[i];
var members = AdminDirectory.Members.list(group.email).members;
if (members){
for (var l = 0;l < members.length;l++){
var member = members[l];
if (sheet.getRange(k,2) + sheet.getRange(k,3) == group.email + member.email){
}else{
sheet.getRange(k,1).setValue(group.name);
sheet.getRange(k,2).setValue(group.email);
sheet.getRange(k,3).setValue(member.email);
var user;
try{
user = AdminDirectory.Users.get(member.email);
if (user){
sheet.getRange(k,4).setValue(user.name.fullName);
}
}catch(e){
Logger.log(e.message);
}
k ++;
}
}
}
}
} else {
Logger.log(‘グループがありません’);
}
pageToken = page.nextPageToken;
} while (pageToken);
MailApp.sendEmail("xxxx@xxxxx.xx.xx", "処理完了", "listAllGroupMembersの処理が完了しました。");
}
[/js]

(ディレクトリのAPIに触れていると、names.nsfの扱いやすさを思い出します。)

Admin_SDK_Directory_Service_-_Google_Apps_Script_—_Google_Developers


最後までお読みいただきましてありがとうございました!

【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。

【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

 - Google, GoogleAppsScript, Web ,

ad

ad

  関連記事

Chrome リモートデスクトップを使ってみる

自宅のMacをリモートで操作したい 外出用PCはWindows 8 とLinux …

「Cloud Vision Api & Tensorflow勉強会」に行ってきました

「Cloud Vision Api & Tensorflow勉強会」に行 …

WordPressの記事を公開日時に関係なくソート順を変更する

PostMash Customを使う WordPressのプラグインでPostM …

youtube-container クラスのheightを調整

当ブログにGoogleカレンダーとかGoogleフォームを埋め込むと、heigh …

redmine_omniauth_googleプラグインをRedmine3.0.0で動くようにする

redmine_omniauth_googleプラグインをインストールしたところ …

GoogleAppsScriptを使ってGmailの本文を解析してSpreadSheetにエクスポートする

GoogleAppsScriptを使ってGmailの本文を解析してSpreadS …

GoogleフォームからAPI Gatewayで作成したREST APIにPOSTリクエストする

「API GatewayからLambdaを介さずにSNSトピックへ送信」の続きで …

自転車でナビ+記録出来るアプリ+ホルダー+バッテリー試してみた

目的 記録を蓄積して振り返りやる気を継続する 飽きないように単調にならないように …

C#でOpenWeatherMap APIを使って天気情報を取得する

C#でOpenWeatherMapAPIを使って現在の天気を取得してみました。 …

chromium OS をインストールするためのUSBをMacで作る

別にChromeBookを購入するお金をけちるわけではないのですが。 chrom …