0

我試圖檢索我公司中每個組的所有成員。我的代碼可以正常工作,除非組中有超過200個成員,然後在實際列出諸如「[email protected]」之類的成員之前輸出組ID。谷歌管理API pageToken循環幫助python

我不確定pageToken是如何工作的,所以無法爲超過200個成員的組獲得單個輸出。再次感謝您的幫助。

此外,我添加了del all_members [:],這樣它將只顯示該組的成員,否則它會追加前一組的成員。

輸出:

[email protected]:2構件(一個或多個)
[email protected] - OWNER
[email protected] - MEMBER

[email protected] :634構件(一個或多個)

[email protected]:634構件(一個或多個)

[email protected]:634構件(一個或多個)

[email protected]:634件(S)
[email protected] - 會員
[email protected] - 會員
...

代碼:

directory_service = authenticate() 

all_groups = [] 
all_members = [] 
page_token = None 
new_page_token = None 
params = {'domain': 'company.com', 'customer': 'my_customer'} 

while True: 
    try: 
    if page_token: 
     params['pageToken'] = page_token 
    current_page = directory_service.groups().list(**params).execute() 

    all_groups.extend(current_page['groups']) 
    page_token = current_page.get('nextPageToken') 
    if not page_token: 
     break 
    except errors.HttpError as error: 
    print 'An error occurred: %s' % error 
    break 

for group in all_groups: 
    group_key = group['email'] 
    new_params = {'groupKey': '%s' % group_key, 'maxResults': '500'} 

    if group['directMembersCount'] == '0': 
    continue 
    else: 
    while True: 
     try: 
     if new_page_token: 
      new_params['pageToken'] = new_page_token 
     new_current_page = directory_service.members().list(**new_params).execute() 

     print '' 
     print '%s: %s member(s)' % (group['email'], group['directMembersCount']) 

     all_members.extend(new_current_page['members']) 
     new_page_token = new_current_page.get('nextPageToken') 

     if not new_page_token: 
      break 
     except errors.HttpError as error: 
     print 'An error occurred: %s' % error 
     break 

    for member in all_members: 
    print ' %s - %s' % (member['email'], member['role']) 
    del all_members[:] 

回答

0

在while循環之外移動group print語句適用於我。我不確定爲什麼我以前沒有看到它。希望這有助於他人。

代碼:

directory_service = authenticate() 

all_groups = [] 
all_members = [] 
page_token = None 
new_page_token = None 
params = {'domain': 'company.com', 'customer': 'my_customer'} 

while True: 
    try: 
    if page_token: 
     params['pageToken'] = page_token 
    current_page = directory_service.groups().list(**params).execute() 

    all_groups.extend(current_page['groups']) 
    page_token = current_page.get('nextPageToken') 
    if not page_token: 
     break 
    except errors.HttpError as error: 
    print 'An error occurred: %s' % error 
    break 

for group in all_groups: 
    group_key = group['email'] 
    new_params = {'groupKey': '%s' % group_key, 'maxResults': '500'} 

    if group['directMembersCount'] == '0': 
    continue 
    else: 
    while True: 
     try: 
     if new_page_token: 
      new_params['pageToken'] = new_page_token 
     new_current_page = directory_service.members().list(**new_params).execute() 
     all_members.extend(new_current_page['members']) 
     new_page_token = new_current_page.get('nextPageToken') 

     if not new_page_token: 
      break 
     except errors.HttpError as error: 
     print 'An error occurred: %s' % error 
     break 

    print '' 
    print '%s: %s member(s)' % (group['email'], group['directMembersCount']) 

    for member in all_members: 
    print ' %s - %s' % (member['email'], member['role']) 
    del all_members[:]