Python Google Sheets API Limit 429 Ошибка с циклом - PullRequest
0 голосов
/ 13 декабря 2018

Я запускаю скрипт на python, который переносит определенные столбцы из одного Google Sheet в другой Google Sheet через API Google Sheets и пакет Gspread, но я сталкиваюсь с 429 Error, когда я перемещаю список в новую электронную таблицу,Эта ошибка связана со слишком большим количеством запросов, но я не уверен, что заставляет мой запуск выполняться несколько раз, а не один раз.Возможно ли, чтобы мой worksheet.update_cells(updated_values) был включен в цикл?

Ошибка:

APIError: {
  "error": {
    "code": 429,
    "message": "Quota exceeded for quota group 'WriteGroup' and limit 'USER-100s' of service 'sheets.googleapis.com' for consumer 'project_number:*id*'.",
    "status": "RESOURCE_EXHAUSTED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.Help",
        "links": [
          {
            "description": "Google developer console API key",
            "url": "https://console.developers.google.com/project/*id*/apiui/credential"
          }
        ]
      }
    ]
  }
}

Код:

# column names
print(columns) # ['date', 'b_clicks', 'b_cpc']

# store count of column names
gs_columns = []

# count columns
for i in range(0,len(columns)):
    gs_columns.append(i+1)

print(gs_columns) # [1,2,3]

updated_values = []

for col_val, col_name in zip(gs_columns, columns):
    worksheet_range = worksheet.range(1, col_val, 500, col_val); # [row_start, col_start, row_end, col_end]
    print(type(worksheet_range))
    column_data = df_full[col_name].values.tolist();
    for cell, data in zip(worksheet_range, column_data):
        cell.value = data
        updated_values.append(cell)

worksheet.update_cells(updated_values)
print(updated_values)
print(type(updated_values))
print(len(updated_values))

Печать:

['date', 'b_clicks', 'b_cpc']
[1, 2, 3]
<class 'list'>
<class 'list'>
<class 'list'>
[<Cell R1C1 1514764800000000000>, <Cell R2C1 1514851200000000000>, <Cell R3C1 1514937600000000000>....<Cell R345C3 3.21>, <Cell R346C3 3.92>]
<class 'list'>
1038

1 Ответ

0 голосов
/ 02 февраля 2019

Обнаружив ту же проблему, мы можем ограничить программу в соответствии со следующими критериями, например, приведенными ниже в цикле for, в котором мы можем ограничить число запрашиваемых api и соответствовать следующим критериям

time.sleep(10)

О developers.google.com :

Google Sheets API имеет ограничение в 500 запросов на 100 секунд на проект и 100 запросов на 100 секунд на пользователя.Пределы для чтения и записи отслеживаются отдельно.Нет дневного лимита использования.

...