如何使用 HTTR 在 R 中自动执行 YouTube OAuth Authentication/Reauthentication

How to do YouTube OAuth Authentication/Reauthentication in R Automatically Using HTTR

我一直在使用 HTTR 包向 YouTube 数据发出请求 API。我有两个正在获取统计信息的频道。第一次使用时,在请求访问令牌时,我进行了整个 OAuth 舞蹈,我按预期被重定向到 Google。但是,我将令牌保存在 .httr-oauth 文件中。我开发了一个类似于下面的 for 循环来获取我的统计信息:

channelOneFile <- ".httr-oauth-channel1"
channelTwoFile <- ".httr-oauth-channel2"

myData <- list()
for(i in 1:2){
    token <- try(suppressWarnings(readRDS(tokenFile)), silent = TRUE)[[1]]
    # And Then I get stats with a GET Request
    url <- paste0("https://youtube.googleapis.com/youtube/v3/videospart=contentDetails%2Csnippet",
                  "&id=",videoId)
    request <- GET(url, token)
    myData[[i]] <- request
}

有一段时间效果很好。然而,在 运行 这段代码大约 20 倍之后(由于一些测试和调整参数,其中一个获取请求返回

Auto-refreshing stale OAuth token.
Warning: Unable to refresh token: invalid_grant
Token has been expired or revoked.

此时我只删除“.httr-oauth”文件,重新验证,保存新文件,然后我的代码再次运行。但是,我希望在本地服务器上自动执行此代码,如果令牌不起作用,服务器(我认为)无法执行 OAuth 舞蹈。

当我发出请求时,我知道 HTTR 会自动使用刷新令牌来获取新的访问令牌,并且我知道 Google APIs 有刷新次数的限制可以使用令牌。我 认为 也许当它获得新令牌时它不会更新“.httr-oauth”文件?我怎样才能做到这一点?如果那不是一个选项,我该怎么做才能进行一次身份验证,将凭据和访问令牌等保存在一个文件中,然后在发出服务器请求时引用该文件?

更新:这是我的 OAuth 流程:

if (file.exists(tokenFile)) {
   token <- try(suppressWarnings(readRDS(tokenFile)), silent = TRUE)[[1]]
} else if (is.null(appId) | is.null(appSecret)) {
    stop("Missing App Credentials")
} else {
  token <- httr::oauth2.0_token(httr::oauth_endpoints("google"), 
                                httr::oauth_app("google", appId, appSecret), 
                                scope = c("https://www.googleapis.com/auth/youtube.readonly", 
                                                        "https://www.googleapis.com/auth/yt-analytics.readonly"))
}

您需要刷新访问令牌,因为这种 OAuth 令牌的有效期很短(通常一小时有效)。使用 httrs 函数 refresh_oauth2.0.

离线处理刷新令牌的过程见我的这个回答:

请注意,刷新令牌可以根据需要多次使用以更新 expiring access token. The refresh tokens usually do not expire (they do when one's app is in testing stage),但可以撤销。