Admin SDK Directory API でのGoogleAppsグループメンバーの取得、更新について

688 views
Skip to first unread message

浅尾貴行

unread,
Jul 14, 2014, 1:27:56 AM7/14/14
to google-app...@googlegroups.com
こんにちは。Directory API でのGoogleAppsグループメンバーの処理について質問させてください。
質問ポイントは2つございます。下に経緯も含めて記載させていただきます。

初めに、管理コンソールにて、あるGoogleAppsグループのメンバーとして、
「このドメインのユーザー全てを追加」ボタンにて、ドメイン内の全ユーザーをメンバーとして追加します。
※このメンバーに対して、PythonからのDirectory API での処理についての質問となります。

初めに取得に関しましては

□取得ソース
# メンバー一覧
member_entrys = directory_service.members().list(groupKey='grou...@mydomain.com').execute()
if member_entrys.has_key('members'):
for member_entry in member_entrys['members']:
logging.info(member_entry)

□結果
{
u'type': u'CUSTOMER'
, u'kind':u'admin#directory#member'
, u'etag': u'"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"'
, u'role': u'MEMBER'
, u'id': u'xxxxxxxx'
}

といった結果が得られます。

type="CUSTOMER" の結果を「ドメイン内のユーザー全てを追加」のメンバーとして判断してもよいものでしょうか? --- 質問1

次に、同メンバーをAPIで追加する場合の処理について、ですがこちらもうまくいきません。
以下の何パターンか試しているのですが、どれもHttpErrorが返ってきてしまいます。
Directory APIで「ドメイン内のユーザー全てを追加」のメンバーを追加する方法はあるのでしょうか?  --- 質問2

□ソース…パターン1
new_member_entry = {u'type': u'CUSTOMER', u'kind': u'admin#directory#member', u'role': u'MEMBER'}
new_member_entry = directory_service.members().insert(groupKey='grou...@mydomain.com', body=new_member_entry).execute()
□ソース…パターン2
new_member_entry = {u'type': u'CUSTOMER', email:'*'}
new_member_entry = directory_service.members().insert(groupKey='grou...@mydomain.com', body=new_member_entry).execute()

□結果
HttpError: <HttpError 400 when requesting https://www.googleapis.com/admin/directory/v1/groups/grou...@mydomain.com/members?alt=json returned "Missing required field: memberKey">

以上、わかりにくい説明となっているかもしれませんが、ご教授いただけると幸いです。
ご不明点、不足情報がございましたら、ご指摘くださいませ。

Tatsuya Nakano

unread,
Jul 15, 2014, 10:12:53 AM7/15/14
to google-app...@googlegroups.com
こんにちは、中野です。

type="CUSTOMER" の結果を「ドメイン内のユーザー全てを追加」のメンバーとして判断してもよいものでしょうか? --- 質問1
その認識で良いと思います。 

Directory APIで「ドメイン内のユーザー全てを追加」のメンバーを追加する方法はあるのでしょうか?  --- 質問2

試してみましたが同様のエラーになりました。

リファレンスを見る限りtypeにCUSTOMERは入れらないようですね。

未確認ですが、以下の様な設定で同じような状態になりそうな気がします。
・1つグループを作成(A)し、管理コンソールからドメイン内のユーザー全てを追加する
・グループを作成(B)
・グループBのメンバーとしてグループAを追加(グループBにはユーザー全てが入っていると同義?)




2014年7月14日月曜日 14時27分56秒 UTC+9 浅尾貴行:

浅尾貴行

unread,
Jul 15, 2014, 11:40:04 AM7/15/14
to google-app...@googlegroups.com
中野さま、ご返信ありがとうございます。

> リファレンスを見る限りtypeにCUSTOMERは入れらないようですね。

そうですね。それに加えて「writable」ではないのでAPIでの追加、更新時に指定できる項目ではないようですね。。

> 未確認ですが、以下の様な設定で同じような状態になりそうな気がします。
> ・1つグループを作成(A)し、管理コンソールからドメイン内のユーザー全てを追加する
> ・グループを作成(B)
> ・グループBのメンバーとしてグループAを追加(グループBにはユーザー全てが入っていると同義?)

今回実現したいこととしましては、この特殊なメンバーそのものをAPIで操作したいという主旨になりますので
ご案内いただいた方法ではちょっと厳しそうです。せっかくご提案いただいたにもかかわらず申し訳ございません。

やはり、AdminSDKでこのメンバーを登録することは難しいのかもしれませんね。。


2014年7月15日火曜日 23時12分53秒 UTC+9 Tatsuya Nakano:

Ohashi, Keisuke

unread,
Jul 15, 2014, 9:26:24 PM7/15/14
to google-app...@googlegroups.com
To 浅尾さん

大橋ことサントリーです。
私も色々試してみましたが、
仮に一つもType:Customerなメンバーを含むGroupを作成していないと、
APIのみで同じものを他のグループに作るのは厳しそうですね(各所調べてもでないですし。。。)

一つでもType:Customerなメンバーを含むGroupを作成してあれば、
そのGroupのメンバーを取得して(Type:CustomerなMember JSONを取得して)、そのIDを利用して、
他のグループへ追加するという事は可能なようです。

このIDは雰囲気的に自動採番で自分で作成するのは厳しそうなので現状SDKだけでは全てはできない様に思えます。









2014年7月16日 0:40 浅尾貴行 <takayu...@gmail.com>:

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

浅尾貴行

unread,
Jul 17, 2014, 10:19:16 AM7/17/14
to google-app...@googlegroups.com
大橋さま

ありがとうございます。

一つでもType:Customerなメンバーを含むGroupを作成してあれば、
そのGroupのメンバーを取得して(Type:CustomerなMember JSONを取得して)、そのIDを利用して、
他のグループへ追加するという事は可能なようです。

なるほど!貴重な情報ありがとうございます。これは面白い動作ですね。

このIDは雰囲気的に自動採番で自分で作成するのは厳しそうなので現状SDKだけでは全てはできない様に思えます。

ただおっしゃる通り、このIDは自動採番のようで、試しにほかのドメインで同じIDで処理できるか試してみましたが
やはりNGでした。。

残念ですが、本件はひとまずあきらめることにします。
いろいろとアドバイス、ありがとうございました。

2014年7月16日水曜日 10時26分24秒 UTC+9 soundTricker:
中野さま、ご返信ありがとうございます。

HttpError: <HttpError 400 when requesting https://www.googleapis.com/admin/directory/v1/groups/group001...@mydomain.com/members?alt=json returned "Missing required field: memberKey">

以上、わかりにくい説明となっているかもしれませんが、ご教授いただけると幸いです。
ご不明点、不足情報がございましたら、ご指摘くださいませ。

--
このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。

soundTricker

unread,
Jul 17, 2014, 10:28:35 PM7/17/14
to google-app...@googlegroups.com
諦めた後にで申し訳ないですが、
このIDの取得方法がわかりました。

このIDはcustomerIdっぽいです。

customerIdはdirectory apiのdirectory.users.getで適当なユーザを取得すれば一緒についてきます。

私が知るいくつかのGoogle AppsのcustomerIdに一致していたので多分行けるはずです。




2014年7月17日木曜日 23時19分16秒 UTC+9 浅尾貴行:

Tatsuya Nakano

unread,
Jul 18, 2014, 3:58:45 AM7/18/14
to google-app...@googlegroups.com
私の持っているドメインでも登録できました!
リファレンスはあてになりませんね。(汗)

stackoverflowにも同様の書き込みがありました。
http://stackoverflow.com/questions/23678358/admin-sdk-directory-api-returning-member-type-equal-to-customer

浅尾貴行

unread,
Jul 19, 2014, 12:01:30 PM7/19/14
to google-app...@googlegroups.com
大橋様、中野様

ありがとうございます!
私の手元の環境でも頂いた方法でばっちり動作しました。

customerIdというのは気が付かなかったです。ご検証含め、お付き合いいただきましてありがとうございました。

2014年7月18日金曜日 16時58分45秒 UTC+9 Tatsuya Nakano:
Reply all
Reply to author
Forward
0 new messages