Как правильно использовать «токен следующей страницы» в Google Directory API - PullRequest
0 голосов
/ 08 мая 2019

Следуя приведенному здесь примеру ...

https://developers.google.com/admin-sdk/directory/v1/guides/manage-mobile-devices

Я пытался захватывать устройства Chromeos из OU в каталоге только для бесконечного циклического перебора первых 100 устройств, зная, чтоУ меня есть 350+ устройств в этом подразделении.Все, что я могу вытащить, это первые 100 устройств, и они зацикливаются навсегда.

Я убедился, что «токен следующей страницы» всегда различен для каждого вызова excute и никогда не бывает «пустым» или «нет»."или" null "и т. д.

import pickle
import os.path
import json
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly']

def main():

## assume proper credentials at this poin in the aCreds variable

    aService = build('admin', 'directory_v1', credentials=aCreds)
    aRequest = aService.chromeosdevices().list(customerId='my_customer', orderBy='serialNumber', projection='FULL', pageToken=None, maxResults=500, sortOrder=None, query=None, fields='nextPageToken,chromeosdevices(macAddress, serialNumber, status, orgUnitPath)', orgUnitPath='/1/1030/Devices')

    aPageToken = "init"

    while aPageToken :
        aResults = aRequest.execute()        
        aRequest.pageToken = aResults['nextPageToken']
        aPageToken = aResults['nextPageToken']

        if aResults:
           aString = str(aResults['chromeosdevices']).replace("'", "\"")
           aDevices = json.loads(aString)
           for aRow in aDevices :
             print(aRow["serialNumber"],aRow["macAddress"],aRow["orgUnitPath"])
             aCount = aCount+1

if __name__ == '__main__':
    main()

Таким образом, он будет просто многократно распечатывать первые 100 устройств в качестве примера ниже

888LPN2 34415dee00e8 /1/1030/Devices.

Я ожидаю, что после печати 350 устройствПрограмма будет завершена, но она будет продолжаться вечно.

1 Ответ

0 голосов
/ 08 мая 2019

В этом примере объект запроса нужно каждый раз пересоздавать, поэтому цикл немного меняется на что-то вроде этого

SCOPES = ['https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly']

def main():

## assume proper credentials at this poin in the aCreds variable

    service = build('admin', 'directory_v1', credentials=aCreds)

## move request from here to inside of loop and change pagetoken for each creation

    aNextPageToken = "one"
    aPageToken = None

    while aNextPageToken :
        aRequest = service.chromeosdevices().list(customerId='my_customer', orderBy='serialNumber', projection='FULL', pageToken=aPageToken, maxResults=100, sortOrder=None, query=None, fields='nextPageToken,chromeosdevices(macAddress, serialNumber, status, orgUnitPath)', orgUnitPath='/1/1030/Devices')
        aResults = aRequest.execute() 
        aNextPageToken =  None
        if 'nextPageToken' in aResults :
           aPageToken = aResults['nextPageToken']
           aNextPageToken = aResults['nextPageToken']

        if aResults:            
           aString = str(aResults['chromeosdevices']).replace("'", "\"")
           aDevices = json.loads(aString)
           for aRow in aDevices :
             print(aRow["serialNumber"],aRow["macAddress"],aRow["orgUnitPath"])
             aCount = aCount+1

if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...