Google 表格配额限制问题 - 可能无法使用 API 密钥
Googlesheets quota limit issues - possible failure to use API key
我们目前正在使用 google sheet 进行关于 crowd forecasts for Covid-19 case and death numbers 的研究项目。
Google 表格是为了方便起见,但我们经常 运行 遇到配额限制问题 - 即使我们拥有的用户数量应该远低于 Google 允许的数量.
我试图通过设置一个新的 google 帐户并创建一个 sheet 来阅读来创建一个稍微可重现的示例。
我尝试的第一件事(没有对 google 帐户进行任何更改)是这样的:
library(googledrive)
library(googlesheets4)
# Google sheets authentification -----------------------------------------------
options(gargle_oauth_cache = ".secrets")
drive_auth(cache = ".secrets", email = "iamatestotest@gmail.com")
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,创建了一个新的测试项目(不确定为什么需要这样做)并明确激活了 googlesheets API 并创建了一些凭据。我创建了一个 API 密钥以及一个 OAuth 2.0 客户端 ID(尽管我承认我有点迷失了它的作用以及如何使用它)。
接下来我尝试通过 运行ning
使用我的 api 密钥登录
drive_deauth()
drive_auth_configure(api_key = "thisismyapikey")
gs4_auth(token = drive_api_key())
但这也没有让我超过 33 岁。我还查看了 google 控制台,但也看不到任何流量 - 所以不确定我的 API 密钥是否真的被使用了?
我认为这是由于我无法按预期方式实际使用 API。任何帮助设置/增加配额的帮助将不胜感激。如果这对您有帮助,我很乐意授予测试帐户的访问权限 - 只需给我留言即可。
Google 表示这是一种安全措施。尝试通过添加他们的电子邮件来分享
对于一些 kind help from very friendly people 我想我基本上已经弄明白了,这确实是我没有正确使用 API。
为什么我的方法失败了
当您使用 googlesheets4 及其开箱即用的任何功能时,系统会要求您授权 tidyverse API OAuth 应用程序(您使用 Google 凭据并授予 OAuth 应用程序访问权限)。这意味着您通过 tidyverse OAuth 应用程序发出所有请求,世界上所有其他使用此功能的用户也是如此。这非常好,因为它开箱即用,但是 运行 如果其他人同时使用该软件包,则会受到限制。与其他人共享此配额意味着我 运行 非常难以预料地陷入限制。
如何更改设置以使其正常工作
有几件事有助于缓解/解决问题。
使用googlesheets4的devtools版本(devtools::install_github("tidyverse/googlesheets4")
。这个dev版本的googlesheets4 又依赖于 gargle
的 dev 版本,管理 google 身份验证的包。gargle
的 dev 版本具有重试功能,该功能会自动如果请求失败,请重试。这应该可以解决大部分问题。
获取您自己的 OAuth 应用程序/google 服务帐户。
这使您可以自己管理身份验证过程。因此,您不必与世界各地的其他用户共享您的配额。
要设置您自己的 OAuth 应用程序/google 服务帐户,您可以执行以下操作(我在这里专注于 google 服务帐户,因为这在实践中要容易得多)。
- 登录 https://console.cloud.google.com/. You will be asked to create a project. You can see your projects on the left next to "Google Cloud Platform".
- 在搜索栏中输入“APIs and Services”,按“启用APIs and services”并搜索sheets。启用此 API.
- 返回搜索栏并输入“凭据”
- 按“创建凭据”和select 服务帐户。服务帐户可让您以编程方式访问 API。给它一个名字和描述。您应该能够跳过可选部分。创建服务帐户并返回凭据概述。您可能需要刷新页面或稍等片刻。
- 单击您的服务帐户(它看起来像一个非常神秘的电子邮件地址)并转到“KEYS”选项卡。
- 单击“添加密钥”并创建一个新密钥。作为密钥类型,select JSON.
- 下载该密钥并将其存储在安全的地方。这应该被视为密码和用户名的组合!
- 现在要实际使用您的密钥
googlesheets4
,您可以 运行 `gs4_auth(path = "path-to-your-service-account.JSON")
- 为了能够访问您的 google sheet,您需要获得 运行 服务帐户权限。转到您的 google sheet,按共享(就像您与任何其他用户共享它一样)并输入这个神秘的服务帐户电子邮件(它应该类似于“1234@something.iam.gserviceaccount.com”。现在一切都应该可以正常工作,而无需在任何地方登录。如果您之前尝试过其他操作,我建议您重新启动 R 会话。
- 利润。
您现在应该还能够在 google 控制台仪表板中跟踪 API 请求。
请注意,每个用户每分钟仍然有 60 个请求的限制,因此您无法获得完整的 300 个请求,但也许可以创建多个服务帐户并平衡这些帐户之间的负载。但是没有其他人的要求干扰你的要求是一个很大的进步!
我们目前正在使用 google sheet 进行关于 crowd forecasts for Covid-19 case and death numbers 的研究项目。
Google 表格是为了方便起见,但我们经常 运行 遇到配额限制问题 - 即使我们拥有的用户数量应该远低于 Google 允许的数量.
我试图通过设置一个新的 google 帐户并创建一个 sheet 来阅读来创建一个稍微可重现的示例。
我尝试的第一件事(没有对 google 帐户进行任何更改)是这样的:
library(googledrive)
library(googlesheets4)
# Google sheets authentification -----------------------------------------------
options(gargle_oauth_cache = ".secrets")
drive_auth(cache = ".secrets", email = "iamatestotest@gmail.com")
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,创建了一个新的测试项目(不确定为什么需要这样做)并明确激活了 googlesheets API 并创建了一些凭据。我创建了一个 API 密钥以及一个 OAuth 2.0 客户端 ID(尽管我承认我有点迷失了它的作用以及如何使用它)。
接下来我尝试通过 运行ning
使用我的 api 密钥登录drive_deauth()
drive_auth_configure(api_key = "thisismyapikey")
gs4_auth(token = drive_api_key())
但这也没有让我超过 33 岁。我还查看了 google 控制台,但也看不到任何流量 - 所以不确定我的 API 密钥是否真的被使用了?
我认为这是由于我无法按预期方式实际使用 API。任何帮助设置/增加配额的帮助将不胜感激。如果这对您有帮助,我很乐意授予测试帐户的访问权限 - 只需给我留言即可。
Google 表示这是一种安全措施。尝试通过添加他们的电子邮件来分享
对于一些 kind help from very friendly people 我想我基本上已经弄明白了,这确实是我没有正确使用 API。
为什么我的方法失败了
当您使用 googlesheets4 及其开箱即用的任何功能时,系统会要求您授权 tidyverse API OAuth 应用程序(您使用 Google 凭据并授予 OAuth 应用程序访问权限)。这意味着您通过 tidyverse OAuth 应用程序发出所有请求,世界上所有其他使用此功能的用户也是如此。这非常好,因为它开箱即用,但是 运行 如果其他人同时使用该软件包,则会受到限制。与其他人共享此配额意味着我 运行 非常难以预料地陷入限制。
如何更改设置以使其正常工作
有几件事有助于缓解/解决问题。
使用googlesheets4的devtools版本(
devtools::install_github("tidyverse/googlesheets4")
。这个dev版本的googlesheets4 又依赖于gargle
的 dev 版本,管理 google 身份验证的包。gargle
的 dev 版本具有重试功能,该功能会自动如果请求失败,请重试。这应该可以解决大部分问题。获取您自己的 OAuth 应用程序/google 服务帐户。 这使您可以自己管理身份验证过程。因此,您不必与世界各地的其他用户共享您的配额。 要设置您自己的 OAuth 应用程序/google 服务帐户,您可以执行以下操作(我在这里专注于 google 服务帐户,因为这在实践中要容易得多)。
- 登录 https://console.cloud.google.com/. You will be asked to create a project. You can see your projects on the left next to "Google Cloud Platform".
- 在搜索栏中输入“APIs and Services”,按“启用APIs and services”并搜索sheets。启用此 API.
- 返回搜索栏并输入“凭据”
- 按“创建凭据”和select 服务帐户。服务帐户可让您以编程方式访问 API。给它一个名字和描述。您应该能够跳过可选部分。创建服务帐户并返回凭据概述。您可能需要刷新页面或稍等片刻。
- 单击您的服务帐户(它看起来像一个非常神秘的电子邮件地址)并转到“KEYS”选项卡。
- 单击“添加密钥”并创建一个新密钥。作为密钥类型,select JSON.
- 下载该密钥并将其存储在安全的地方。这应该被视为密码和用户名的组合!
- 现在要实际使用您的密钥
googlesheets4
,您可以 运行 `gs4_auth(path = "path-to-your-service-account.JSON") - 为了能够访问您的 google sheet,您需要获得 运行 服务帐户权限。转到您的 google sheet,按共享(就像您与任何其他用户共享它一样)并输入这个神秘的服务帐户电子邮件(它应该类似于“1234@something.iam.gserviceaccount.com”。现在一切都应该可以正常工作,而无需在任何地方登录。如果您之前尝试过其他操作,我建议您重新启动 R 会话。
- 利润。
您现在应该还能够在 google 控制台仪表板中跟踪 API 请求。
请注意,每个用户每分钟仍然有 60 个请求的限制,因此您无法获得完整的 300 个请求,但也许可以创建多个服务帐户并平衡这些帐户之间的负载。但是没有其他人的要求干扰你的要求是一个很大的进步!