Как бороться с превышенной квотой, ошибка 429 - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь записать материал на лист, но получаю

gspread.exceptions.APIError: {'code': 429, 'message': "Quota exceeded for quota group 'WriteGroup' and limit 'Write requests per user per 100 seconds'....

Как можно отредактировать мой код так, чтобы не доходил ли предел квоты ИЛИ продолжить через некоторое время после достижения квоты ? Пробовал time.sleep(), но это не сработало, или я не смог поместить это в нужное место.

Вот мой код для gspread

class CpfSearch(object):
    def __init__(self, spreadsheet_name):
        self.cpf_col = 1
        self.nome_col = 2
        self.age_col = 3
        self.beneficio_col = 4
        self.concessao_col = 5
        self.salario_col = 6
        self.bancos_col = 7
        self.bancocard_col = 8
        self.consig_col = 9
        self.card_col = 15

        scope = ['https://www.googleapis.com/auth/spreadsheets',
                 'https://www.googleapis.com/auth/drive.readonly']

        creds = ServiceAccountCredentials.from_json_keyfile_name('CONSULTAS.json', scope)

        client = gspread.authorize(creds)

        self.sheet = client.open(spreadsheet_name).sheet1

    def process_cpf_list(self):

        # SKIP OVER COLUMN HEADING IN THE SPREADSHEET
        cpfs = self.sheet.col_values(self.cpf_col)[1:]

        bot_url = BOT(cpfs)
        nomes, idades, beneficios, concessoes, salarios, bancoss, bancoscard, consigs, cards = bot_url.search_cpfs()

        # UPDATE THE SHEET
        print("Atualizando...")

        for cpfs in range(len(nomes)):
            time.sleep(1)
            self.sheet.update_cell(cpfs + 2, self.nome_col, nomes[cpfs])
            self.sheet.update_cell(cpfs + 2, self.age_col, idades[cpfs])
            self.sheet.update_cell(cpfs + 2, self.beneficio_col, beneficios[cpfs])
            self.sheet.update_cell(cpfs + 2, self.concessao_col, concessoes[cpfs])
            self.sheet.update_cell(cpfs + 2, self.salario_col, salarios[cpfs])
            self.sheet.update_cell(cpfs + 2, self.bancos_col, bancoss[cpfs])
            self.sheet.update_cell(cpfs + 2, self.bancocard_col, bancoscard[cpfs])
            self.sheet.update_cell(cpfs + 2, self.consig_col, consigs[cpfs])
            self.sheet.update_cell(cpfs + 2, self.card_col, cards[cpfs])


cpf_updater = CpfSearch('TESTE')
cpf_updater.process_cpf_list()

1 Ответ

1 голос
/ 14 апреля 2020

Как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

В этом ответе я хотел бы предложить создать массив, включающий значения, и поместить массив в электронную таблицу, используя метод values_update. Значения могут быть введены одним вызовом API. Таким образом, я подумал, что ваша проблема может быть решена.

Модифицированный скрипт:

Когда ваш скрипт модифицирован, пожалуйста, измените его следующим образом.

От:

self.sheet = client.open(spreadsheet_name).sheet1

Кому:

self.spreadsheet = client.open(spreadsheet_name)
self.sheet = self.spreadsheet.sheet1

И

От:

for cpfs in range(len(nomes)):
    time.sleep(1)
    self.sheet.update_cell(cpfs + 2, self.nome_col, nomes[cpfs])
    self.sheet.update_cell(cpfs + 2, self.age_col, idades[cpfs])
    self.sheet.update_cell(cpfs + 2, self.beneficio_col, beneficios[cpfs])
    self.sheet.update_cell(cpfs + 2, self.concessao_col, concessoes[cpfs])
    self.sheet.update_cell(cpfs + 2, self.salario_col, salarios[cpfs])
    self.sheet.update_cell(cpfs + 2, self.bancos_col, bancoss[cpfs])
    self.sheet.update_cell(cpfs + 2, self.bancocard_col, bancoscard[cpfs])
    self.sheet.update_cell(cpfs + 2, self.consig_col, consigs[cpfs])
    self.sheet.update_cell(cpfs + 2, self.card_col, cards[cpfs])

К:

values = []
for cpfs in range(len(nomes)):
    values.append([nomes[cpfs], idades[cpfs], beneficios[cpfs], concessoes[cpfs], salarios[cpfs], bancoss[cpfs], bancoscard[cpfs], consigs[cpfs], "", "", "", "", "", cards[cpfs]])
rng = "'" + self.sheet._properties['title'] + "'!B2"
self.spreadsheet.values_update(rng, params={'valueInputOption': 'USER_ENTERED'}, body={'values': values})

Ссылка:

Если я неправильно понял ваш вопрос и это не то направление, которое вы хотите, я приношу свои извинения.

...