如何让 Google admin_sdk 上的所有用户?
How can I get all users on Google admin_sdk?
我需要列出我域中的所有用户,但我不能,因为我的域有超过 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 循环。
有两种不同的方法可以做到这一点。
方法一list_next:
- 请求第一页。
- 启动一个
while
循环来检查 request
是否存在。
- 使用
list_next
方法调用连续页面。此方法可用于根据上一页的 request
和 response
检索连续的页面。有了这个,你不需要使用 pageToken
.
- 如果下一页不存在,
request
将 return None
,因此循环将结束。
def listUsers(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(u'{0} ({1})'.format(user['primaryEmail'],user['name']['fullName']))
方法二. pageToken:
- 请求第一页(不使用参数
pageToken
)。
- 从对第一个请求的响应中检索 属性
nextPageToken
。
- 启动一个
while
循环来检查 nextPageToken
是否存在。
- 在
while
循环中使用上次响应中检索到的 nextPageToken
请求连续页面。
- 如果没有下一页,
nextPageToken
将不会被填充,因此循环将结束。
def listUsers(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(u'{0} ({1})'.format(user['primaryEmail'],user['name']['fullName']))
注:
- 在这两种方法中,使用 extend.
将当前迭代中的用户添加到主 users
列表中
参考:
我需要列出我域中的所有用户,但我不能,因为我的域有超过 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 循环。
有两种不同的方法可以做到这一点。
方法一list_next:
- 请求第一页。
- 启动一个
while
循环来检查request
是否存在。 - 使用
list_next
方法调用连续页面。此方法可用于根据上一页的request
和response
检索连续的页面。有了这个,你不需要使用pageToken
. - 如果下一页不存在,
request
将 returnNone
,因此循环将结束。
def listUsers(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(u'{0} ({1})'.format(user['primaryEmail'],user['name']['fullName']))
方法二. pageToken:
- 请求第一页(不使用参数
pageToken
)。 - 从对第一个请求的响应中检索 属性
nextPageToken
。 - 启动一个
while
循环来检查nextPageToken
是否存在。 - 在
while
循环中使用上次响应中检索到的nextPageToken
请求连续页面。 - 如果没有下一页,
nextPageToken
将不会被填充,因此循环将结束。
def listUsers(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(u'{0} ({1})'.format(user['primaryEmail'],user['name']['fullName']))
注:
- 在这两种方法中,使用 extend. 将当前迭代中的用户添加到主
users
列表中