4

我有一段代碼(Java),用於列出個人Google Apps域中所有組的members。這使用谷歌目錄API。Google Admin SDK Directory API(Java)中的members.list()

下面是摘錄:

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()函數的限制,但無法在Google文檔中找到Directory API的限制。有沒有這種限制?如果是,我可以以某種方式列出所有用戶?

回答

3

查看members.list()上的maxResults和pageToken屬性。頁面沒有指定,但我相信200既是maxResults的默認值,也是最大值。您的應用需要檢查結果中是否存在pageToken屬性。如果已設置,您至少還有一頁結果要抓取。保持循環播放結果,直到pageToken未設置。

+0

非常感謝!有效 –

2

我已經修改爲使用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來驗證這一點。這一改變將反覆列出所有成員。

相關問題