AdminSDK(Directory API)でのグループ情報の取得

1,423 views
Skip to first unread message

k.numa...@gmail.com

unread,
Apr 20, 2015, 3:25:24 AM4/20/15
to google-app...@googlegroups.com
初めまして。
沼田と申します。

DirectoryAPIについてわからないことがあり、ご助力頂けたらと思い投稿させて頂きます。
グループ情報(グループ名やメーリングリスト)の取得や編集を行いたいのですが、環境に登録されているグループ一覧情報を取得するところで躓いております。
最終的にはプログラム上からグループ情報を編集することが目標です。

開発言語は"Java"で「https://developers.google.com/admin-sdk/directory/v1/quickstart/quickstart-java」を参考にユーザー一覧情報の取得まではできました。
参考になるソースやサイト等ございましたら紹介して頂けると幸いです。
宜しくお願い致します。

Shinichi Ogawa

unread,
Apr 20, 2015, 11:22:47 AM4/20/15
to google-app...@googlegroups.com
沼田さん

Google Apps APIは認証部分はどのAPIも共通ですので、
それ以外の各種APIごとの挙動(リソースの構造、操作メソッド)については
まずはリファレンスに埋め込まれている「API Explorer」で実際にAPIを試し、
リソースのデータ構造や操作の種類を確認して、
その後対応するライブラリを使ってみるのが一番です。

例えば

を開くとGroupというリソースに対する操作の一覧として delete, get, insert...
などがあることがわかり、それらの操作に対応するリンクをクリックすると、
WEB上からその操作APIを実行することができる「API Explorer」がリファレンスの下部に埋め込まれています。
私が新しくAPIを試す場合は、まずlistで一覧を取得し、
取得できたリソースから idを拾ってgetを使いリソースのデータ構造を確認し、
その後update, insert, deleteを試す…とやることが多いです。

そこまでやってみれば、後は
などのリンクからライブラリを取得(又はJavaならライブラリ名を確認してsearch.maven.orgで検索)して使用します。
API Explorerを触った後であれば、どのリソースのどの操作はプログラムでどう書く?については簡単に探すことができます。

公式のライブラリの場合は、大抵は
「API名().リソース名().操作メソッド()」でAPIのリクエストのためのオブジェクトが生成できて、
それをexecute()で実行するとAPIのレスポンスが格納されたオブジェクトが返される…
という仕組みになっています。

例:
Directory.Groups.List listRequest = directory.groups().list().setDomain(domain);
Groups listResponse = listRequest.execute();
List<Group> groups = listResponse.getGroups();
...

このように、リファレンスで表示されているデータ構造・操作メソッドがそのままライブラリに反映されています。




--
このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

k.numa...@gmail.com

unread,
Apr 21, 2015, 5:47:59 AM4/21/15
to google-app...@googlegroups.com
shin1ogawa様

お忙しいところご返信ありがとうございます。
頂いた情報のおかげでコーディングの進め方が把握できました。
今まで「API Explorer」の使い方がいまいち分からず流していたのですが、使えるようになりコーディングに役立ちそうです。

下部に記載されたコーディングで実行してみましたが以下のエラーが発生しました。
最初は公式のクイックスタートのページを参考に、setCustomerメソッドで取得しようとしたのですが同様のエラーが発生したと記憶しています。
調べてみたところバックエンドのサービス登録に失敗(GUI上で何かを認証し忘れ?)が原因のようですが、具体的な解決策がわかりません。
解決方法をご存知でしたらご教授頂けませんでしょうか。
宜しくお願い致します。

4 21, 2015 6:33:59 午後 org.apache.catalina.core.StandardWrapperValve invoke
重大: サーブレット login のServlet.service()が例外を投げました
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden


2015年4月21日火曜日 0時22分47秒 UTC+9 shin1ogawa:
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。

Tatsuya Nakano

unread,
Apr 21, 2015, 7:46:42 AM4/21/15
to google-app...@googlegroups.com
こんにちは、中野です。

403ですか。

下のようなレスポンスの場合権限(Scope)が足りてません。
おそらくですが、Scopeの設定がユーザー一覧取得の時と同じままになっていませんか?
以下のように変えてみてください。
DirectoryScopes.ADMIN_DIRECTORY_USER
DirectoryScopes.ADMIN_DIRECTORY_GROUP
{
 
"error": {
   
"code": 403,
   
"message": "Insufficient Permission",
   
"errors": [
     
{
       
"domain": "global",
       
"message": "Insufficient Permission",
       
"reason": "insufficientPermissions"
     
}
   
]
 
}
}

APIを発行にするのに必要なScopeはリファレンス上のAuthorizationの項を参照してください。
例)
Groupの一覧取得の場合は以下の2つのどちらかがScopeに含まれていればOKです。


2015年4月21日火曜日 18時47分59秒 UTC+9 k.numa...@gmail.com:

k.numa...@gmail.com

unread,
Apr 21, 2015, 9:17:02 PM4/21/15
to google-app...@googlegroups.com
中野様

お忙しいなかご返信ありがとうございます。
プログラムを実行すると仰られたレスポンスが返ってきました。
Scopeというものがあるのですね。。。初めて知りました。

スコープの設定回りを確認したのですが設定方法がわかりませんでした。
スコープの設定を行う(?)画面は以下の2つを確認しております。

[1] リファレンス→下部のAPI Exploer→のOauth 2.0をONにした時に表示される画面
[2] GoogleDeveloperConsole→プロジェクトを選択→API→このAPIを確認→ Oauth 2.0をONにした時に表示される画面

[1]の方でGroupの一覧を取得するためのScope設定(既に含まれておりました)は可能だったのですが、「DirectoryScopes.ADMIN_DIRECTORY_USER」から「DirectoryScopes.ADMIN_DIRECTORY_GROUP」の切り替える項目は見当たりませんでした。

お手数をお掛けして申し訳ありませんが設定方法をご教授頂けませんでしょうか。
宜しくお願い致します。




2015年4月21日火曜日 20時46分42秒 UTC+9 Tatsuya Nakano:

Tatsuya Nakano

unread,
Apr 22, 2015, 9:57:15 AM4/22/15
to google-app...@googlegroups.com
沼田さん

中野です。

[1] リファレンス→下部のAPI Exploer→のOauth 2.0をONにした時に表示される画面
API ExplorerはGoogleが用意したAPIの動作確認用のWebアプリなので沼田さんが作られているプログラムとは関係ありません。 

[2] GoogleDeveloperConsole→プロジェクトを選択→API→このAPIを確認→ Oauth 2.0をONにした時に表示される画面
"このAPIを確認"以降がちょっとわからないですね。


DirectoryScopes.ADMIN_DIRECTORY_USERはクイックスタートに書かれているJavaのソースコード内のScopeの事です。
これをGroupに変えてみてください。



2015年4月22日水曜日 10時17分02秒 UTC+9 k.numa...@gmail.com:

2015年4月22日水曜日 10時17分02秒 UTC+9 k.numa...@gmail.com:
Message has been deleted

k.numa...@gmail.com

unread,
Apr 22, 2015, 10:29:19 PM4/22/15
to google-app...@googlegroups.com
中野様

お世話になっております。
沼田です。

詳細な情報ありがとうございます。
Scopeについてですが、Eclipseで開発してたこともありgroups()を記載したタイミングで自動追加されておりました。
自動追加されたのは「Groups」のみだったので新たに「Group」を追加しましたが、groups()と関係があるのはGroups」のようでした。
※Eclipseが「インポートされたcom.google.api.services.admin.directory.model.Groupは一度も使用していませんと警告を出していました。
上記の修正を加え再度プログラムを実行してみましたが同様のエラーが出力されました。。。

スコープの追加方法が誤っているかもしれないのでソースの該当箇所を添付させて頂きました。
お間違いありませんでしょうか?
宜しくお願い致します。

// スコープの追加

import com.google.api.services.admin.directory.Directory;
import com.google.api.services.admin.directory.DirectoryScopes;
import com.google.api.services.admin.directory.model.Groups;
import com.google.api.services.admin.directory.model.Group;

Directory service = new Directory.Builder(httpTransport, jsonFactory, credential).setApplicationName("DirectoryCommandLine").build();
// setDomainに設定する値はAPIExploerの「domain」に設定した値と同じ物を設定
Directory.Groups.List listRequest = service.groups().list().setDomain("****.**.**");
Groups listResponse = listRequest.execute();


2015年4月22日水曜日 22時57分15秒 UTC+9 Tatsuya Nakano:

Tatsuya Nakano

unread,
Apr 23, 2015, 7:58:32 AM4/23/15
to google-app...@googlegroups.com
沼田さん

中野です。

言葉足らずでしたね。
Scopeを設定するのはAPI発行前の認可の箇所です。
クイックスタートのコードですと以下の部分になります。

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
        httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DirectoryScopes.ADMIN_DIRECTORY_USER))
        .setAccessType("online")
        .setApprovalPrompt("auto").build();



2015年4月23日木曜日 11時29分19秒 UTC+9 k.numa...@gmail.com:

k.numa...@gmail.com

unread,
Apr 24, 2015, 3:31:25 AM4/24/15
to google-app...@googlegroups.com
中野様

お世話になっております。
沼田です。

お手数をお掛けしました。ありがとうございます。
エラーが解消されデータの取得に成功しました。
今回頂いた情報でコーディング全体の流れが掴めたので他のメソッドも確認してみます。
宜しくお願い致します。

2015年4月23日木曜日 20時58分32秒 UTC+9 Tatsuya Nakano:
Reply all
Reply to author
Forward
0 new messages