我需要列出我的域中的所有用户,但我不能,因为我的域有超过 500 个用户,每页的默认限制是 500。在下面的示例中(Google 快速入门示例)我如何列出我的所有用户1000 个用户?我已经阅读过有关 Nextpagetoken 的内容,但我不知道如何获取或实现它。有人可以帮助我吗?
from __future__ import print_function
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/admin.directory.user']
def main():
"""Shows basic usage of the Admin SDK Directory API.
Prints the emails and names of the first 10 users in the domain.
"""
creds = None
# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.json', 'w') as token:
token.write(creds.to_json())
service = build('admin', 'directory_v1', credentials=creds)
# Call the Admin SDK Directory API
print('Getting the first 10 users in the domain')
results = service.users().list(customer='my_customer', maxResults=1000, orderBy='email').execute()
users = results.get('users', [])
if not users:
print('No users in the domain.')
else:
print('Users:')
for user in users:
print(u'{0} ({1})'.format(user['primaryEmail'],
user['name']['fullName']))
if __name__ == '__main__':
main()
您必须迭代地请求不同的页面。您可以为此使用 while 循环。
有两种不同的方法可以做到这一点。
while
循环来检查 request
是否存在。list_next
方法调用连续页面。此方法可用于根据上一页的 request
和 response
检索连续页面。有了这个,你就不需要使用pageToken
。request
将返回None
,因此循环结束。def list_users(service):
request = service.users().list(customer='my_customer', maxResults=500, orderBy='email')
response = request.execute()
users = response.get('users', [])
while request:
request = service.users().list_next(previous_request=request, previous_response=response)
if request:
response = request.execute()
users.extend(response.get('users', []))
if not users:
print('No users in the domain.')
else:
for user in users:
print('{0} ({1})'.format(user['primaryEmail'],user['name']['fullName']))
pageToken
)。nextPageToken
。while
循环来检查 nextPageToken
是否存在。while
循环中使用上次响应中检索到的 nextPageToken
请求连续页面。nextPageToken
将不会被填充,因此循环将结束。def list_users(service):
response = service.users().list(customer='my_customer', maxResults=500, orderBy='email').execute()
users = response.get('users', [])
nextPageToken = response.get('nextPageToken', "")
while nextPageToken:
response = service.users().list(customer='my_customer', maxResults=500, orderBy='email', pageToken=nextPageToken).execute()
nextPageToken = response.get('nextPageToken', "")
users.extend(response.get('users', []))
if not users:
print('No users in the domain.')
else:
for user in users:
print('{0} ({1})'.format(user['primaryEmail'],user['name']['fullName']))
extend将当前迭代中的用户添加到主
users
列表中。