Проблемы с ограничением квот в Googlesheets - возможный отказ от использования ключа API

В настоящее время мы используем таблицы Google для исследовательского проекта по прогнозам массовых случаев заболевания и смертности от COVID-19..

Таблицы Google используются для удобства, но мы часто сталкиваемся с проблемами ограничения квот - даже несмотря на то, что количество пользователей, которые у нас есть, должно быть намного меньше, чем позволяет Google.

Я попытался создать несколько воспроизводимый пример, настроив новую учетную запись Google и создав лист для чтения.

Первое, что я попробовал (не внося никаких изменений в учетную запись Google), так это:

library(googledrive)
library(googlesheets4)

# Google sheets authentification -----------------------------------------------
options(gargle_oauth_cache = ".secrets")
drive_auth(cache = ".secrets", email = "[email protected]")
gs4_auth(token = drive_token())

sheet_id <- "1Z2O5Mce_haceWfduLenJQP-hddXF9biY_4Ydob_psyQ"

n_tries <- 50

for (i in 1:n_tries) {
  data <- read_sheet(ss = sheet_id)
  Sys.sleep(0.5)
  print(i)
}

Насколько я понимаю, я должен иметь возможность выполнять около 300 запросов на чтение в минуту, но обычно я не могу заставить цикл работать за пределами 30-34.

Поскольку я не был уверен, что эти 300 запросов легко доступны, я перешел на https://console.cloud.google.com, создал новый тестовый проект (не уверен, зачем это нужно), явно активировал API googlesheets и создал некоторые учетные данные. Я создал ключ API, а также идентификатор клиента OAuth 2.0 (хотя, по общему признанию, я несколько потерял, что он делает и как его использовать).

Квоты API

Затем я попытался войти в систему с моим ключом api, запустив

drive_deauth()
drive_auth_configure(api_key = "thisismyapikey")
gs4_auth(token = drive_api_key())

но это также не помогло мне выйти за рамки 33-х лет. Я также заглянул в консоль Google, но также не увидел никакого трафика - так что не уверен, что мой ключ API действительно использовался?

Графики использования API

Я предполагаю, что это связано с моей неспособностью использовать API по назначению. Мы будем очень благодарны за любую помощь в настройке / увеличении квоты. Если это поможет, я с радостью предоставлю доступ к тестовой учетной записи - просто напишите мне сообщение.


person Nikos Bosse    schedule 13.02.2021    source источник
comment
Просто несколько вопросов @Nikos Bosse, сколько строк содержат ваши данные? Это всего один лист или несколько?   -  person Manu    schedule 25.02.2021
comment
1. Используйте эту ссылку: cloud.google.com/compute/docs/api -rate-limits 2. Вы запускаете приложение на локальном хосте или на облачной панели консоли? Может есть ограничения, когда запросы приходят с localhost? @Nikos Bosse   -  person Jerry Ben    schedule 26.02.2021
comment
Как указано в ответе, это действительно была моя неспособность правильно использовать API. Я думаю, что теперь я использую облачную панель консоли, поскольку я использую учетную запись службы и получаю доступ к ней через блестящую.   -  person Nikos Bosse    schedule 26.02.2021
comment
Лист @Manu в настоящее время имеет около 100 строк, но он растет   -  person Nikos Bosse    schedule 26.02.2021


Ответы (2)


С некоторой доброй помощью очень дружелюбных людей, я думаю, что в основном понял это, и это было действительно, моя неспособность правильно использовать API.

Почему мой подход не удался

когда вы используете googlesheets4 и любую его функцию из коробки, вам будет предложено авторизовать приложение OAuth tidyverse API (вы входите в систему со своими учетными данными Google и даете приложению OAuth права доступа). Это означает, что вы делаете все запросы через приложение tidyverse OAuth, как и все другие пользователи в мире, которые используют эту функцию. Это очень хорошо, так как работает «из коробки», но сталкивается с ограничениями, если другие люди используют пакет одновременно. Разделение этой квоты с другими людьми означало, что я неожиданно столкнулся с ограничениями.

Как изменить настройку, чтобы она работала

Есть несколько вещей, которые помогают облегчить / решить проблему.

  1. используйте версию googlesheets4 для разработчиков (devtools::install_github("tidyverse/googlesheets4"). Эта версия googlesheets4 для разработчиков, в свою очередь, полагается на версию gargle для разработчиков, пакет, который управляет аутентификацией Google. Версия для разработчиков gargle имеет функцию повтора, которая автоматически повторяет ваши запросы, если они терпят неудачу. Это должно решить большинство проблем.

  2. Получите собственную учетную запись приложения OAuth / службы Google. Это позволяет вам самостоятельно управлять процессом аутентификации. Поэтому вам не нужно делиться своей квотой с другими пользователями по всему миру. Чтобы настроить собственную учетную запись приложения OAuth / службы Google, вы можете сделать следующее (здесь я сосредоточусь на учетной записи службы Google, так как это намного проще на практике).

  • Войдите в https://console.cloud.google.com/. Вам будет предложено создать проект. Вы можете увидеть свои проекты слева рядом с Google Cloud Platform. введите описание изображения здесь
  • Введите API и службы в строку поиска, нажмите включить API и службы и выполните поиск листов. Включите этот API.
  • Вернитесь в панель поиска и введите учетные данные  введите описание изображения здесь
  • Нажмите Создать учетные данные и выберите учетную запись службы. Учетная запись службы дает вам программный доступ к API. Дайте ему имя и описание. Вы должны иметь возможность пропустить необязательные части. Создайте учетную запись службы и вернитесь к обзору учетных данных. Возможно, вам придется обновить страницу или подождать минуту.
  • Нажмите на свою учетную запись службы (это выглядит как очень загадочный адрес электронной почты) и перейдите на вкладку КЛЮЧИ.
  • Щелкните ДОБАВИТЬ КЛЮЧ и создайте новый ключ. В качестве типа ключа выберите JSON.
  • Загрузите этот ключ и храните его в надежном месте. Это следует рассматривать как комбинацию пароля и имени пользователя!
  • Теперь, чтобы на самом деле использовать свой ключ с googlesheets4, вы можете запустить `gs4_auth (path = path-to-your-service-account.JSON) введите описание изображения здесь
  • Чтобы иметь доступ к вашим таблицам Google, вам необходимо предоставить разрешения вашей учетной записи службы. Перейдите в свою таблицу Google, нажмите "Поделиться" (как если бы вы сделали, чтобы поделиться им с любым другим пользователем) и введите этот загадочный адрес электронной почты учетной записи службы (он должен выглядеть примерно как [email protected]. Теперь все должно работать без вам нужно войти в систему где угодно. Если вы ранее пробовали другие вещи, я бы посоветовал перезапустить сеанс R.
  • выгода.

Теперь вы также должны иметь возможность отслеживать запросы API на панели инструментов консоли Google.

Обратите внимание, что по-прежнему существует ограничение в 60 запросов на пользователя в минуту, поэтому вы не получите полные 300 запросов, но, возможно, можно создать несколько учетных записей служб и сбалансировать нагрузку между ними. Но если просьбы других людей не будут мешать вам, - это большое улучшение!

person Nikos Bosse    schedule 26.02.2021

Google говорит, что это мера безопасности. Попробуйте поделиться, добавив свои электронные письма

person shamnad sherief    schedule 26.02.2021