【问题标题】:Google Admin API pageToken loop help pythonGoogle Admin API pageToken循环帮助python
【发布时间】:2016-01-07 17:55:13
【问题描述】:

我正在尝试检索公司中每个组的所有成员。我的代码可以正常工作,除非一个组中有超过 200 个成员,然后它会在实际列出“group2@company.com”等成员之前多次输出组 ID。

我不确定 pageToken 是如何工作的,因此无法为超过 200 个成员的组获取单个输出。再次感谢您对此提供的任何帮助。

另外,我添加了 del all_members[:] 以便它只显示该组的成员,否则它会附加上一个组的成员。

输出:

group1@company.com:2 个成员
user3@company.com - 所有者
user4@company.com - 会员

group2@company.com:634 名成员

group2@company.com:634 名成员

group2@company.com:634 名成员

group2@company.com:634 名成员
user1@company.com - 会员
user2@company.com - 会员
...

代码:

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[:]

【问题讨论】:

    标签: python google-admin-sdk google-api-python-client google-directory-api


    【解决方案1】:

    将组打印语句移到 while 循环之外对我有用。我不知道为什么我以前没有看到它。希望这对其他人有所帮助。

    代码:

    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[:]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-21
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 2015-07-30
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多