members.list() 在 Google 管理 SDK 目录 API (Java)

members.list() in Google Admin SDK Directory API (Java)

我有一段代码(在 Java 中)可以列出个人 Google 应用程序域中的所有 members 群组。这使用 google 目录 API.

这是片段:

public static void listMembers(String groupKey,Directory service) throws IOException {
        Members res = service.members().list(groupKey).execute();

        List<Member> members = res.getMembers();
        int count = 0;
        if (members == null || members.size() == 0) {
            System.out.println();
            System.out.println("No members found.");
        } else {
            System.out.println();
            System.out.println("Members of "+groupKey);
            for (Member member : members) {
                count++;
                System.out.println(member.getEmail());
            }
            System.out.println(count);
        }
    }

这很好用,但对于任何组,列出的用户数不超过 exactly 200 members,尽管一个组实际上有更多用户。我试图搜索我正在使用的 members.list() 函数的限制,但在目录 API 的 Google 文档中找不到它。有没有这样的限制?如果是,我可以以某种方式列出所有用户吗?

查看 members.list() 上的 maxResults 和 pageToken 属性。该页面未指定,但我相信 200 是 maxResults 默认值和最大值。您的应用需要检查结果中是否存在 pageToken 属性。如果已设置,您至少还有一页结果要抓取。继续遍历结果,直到未设置 pageToken。

我修改了代码以使用 pageToken 属性,如下所示:

public static void listMembers(String groupKey,Directory service) throws IOException {

        Directory.Members.List res = service.members().list(groupKey);
        Members mbrs;
        List<Member> members ;
        int count = 0;
        String pageToken;
        do{
                mbrs = res.execute();
                members = mbrs.getMembers();
                System.out.println();
                System.out.println("Members of "+groupKey);
                for (Member member : members) {
                    count++;
                    System.out.println(member.getEmail());
                }
                pageToken = mbrs.getNextPageToken();
                //System.out.println(res.getPageToken());   //The first pageToken of any Directory.Members.List is null.
                res.setPageToken(pageToken);
                System.out.println(count);
        }while(pageToken!=null);
    }

我想补充一点,任何 Directory.Members.List 的第一个 pageToken 都是空的。可以通过将 while 循环的条件从 pageToken!=null 更改为 true 来验证这一点。此更改将一遍又一遍地列出所有成员。