Обработка пакетных запросов Google API для токенов следующей страницы - PullRequest
1 голос
/ 21 июня 2020

Возникла проблема с обработкой nextpagetoken и тем, как добавить их в пакетные запросы.

Любые идеи приветствуются. текущий код проходит через токены страницы один за другим, если есть токен страницы, но резко замедляет его!

def iftoken(nextPageToken, requestId):
    while True:
        studentSubmissions = service_two.courses().courseWork().studentSubmissions().list(pageToken=nextPageToken,
                                                                                          courseId=requestId,
                                                                                          courseWorkId='-').execute()
        assignments.extend(studentSubmissions.get('studentSubmissions', []))
        nextPageToken = studentSubmissions.get('nextPageToken', None)
        if not nextPageToken:
            break
def makeRequestWithExponentialBackoff(analytics):
    for n in range(0, 5):
        try:
            response = service_two.courses().courseWork().studentSubmissions().list(pageToken=None, courseId=v['id'],
                                                                                    courseWorkId='-', pageSize=100000)
            print(response.get("studentSubmissions", []))
            return assignments.extend(response.get("nextPageToken", []))

        except:
            time.sleep((2 ** n) + random.random())
            continue
    print("There has been an error, the request never succeeded.")


def callback(request_id, response, exception):
    if exception is not None:
        print('Error getting assignments "{0}" for course: "{1}"'.format(request_id, exception))
        makeRequestWithExponentialBackoff(request_id)
    else:
        assignments.extend(response.get("studentSubmissions", []))
        nextPageToken = response.get("nextPageToken", None)
        if nextPageToken:
            iftoken(nextPageToken, request_id)
        else:
            pass


for k, v in filtered.iterrows():
    if count % 1000 == 0:
        submit = batch.execute(http=http)
        batch_count += 1
        print(batch_count)
        time.sleep(30)
        batch_array.append({'batchSent {}'.format(v['id'])})
        batch = None
        batch = service_two.new_batch_http_request(callback=callback)
        response = service_two.courses().courseWork().studentSubmissions().list(pageToken=None, courseId=v['id'],
                                                                                courseWorkId='-', pageSize=100000)
        batch.add(response, request_id=v['id'])
        array.append({'email': v['primaryEmail'], 'count': count, 'classid': v['id']})
        count = 1
    elif count % 1000 != 0 and batch == None:
        batch = service_two.new_batch_http_request(callback=callback)
        response = service_two.courses().courseWork().studentSubmissions().list(pageToken=None, courseId=v['id'],
                                                                                courseWorkId='-', pageSize=100000)
        batch.add(response, request_id=v['id'])
        array.append({'email': v['primaryEmail'], 'count': count, 'classid': v['id']})
        count += 1
    else:
        response = service_two.courses().courseWork().studentSubmissions().list(pageToken=None, courseId=v['id'],
                                                                                courseWorkId='-', pageSize=100000)
        batch.add(response, request_id=v['id'])
        array.append({'email': v['primaryEmail'], 'count': count, 'classid': v['id']})
        count += 1

где отфильтрованный - это фрейм данных идентификаторов класса. Однако возникла проблема с токенами nextpagetoken и как добавить их в фрейм данных?

...