Неинтерактивное автоматическое обновление устаревшего токена OAuth с пакетом Googlesheets
Я пытаюсь автоматически запускать скрипт r, чтобы каждый час загружать личный лист Google. Он всегда работает нормально, когда я в интерактивном режиме использую R. Он также отлично работает в течение первого часа после того, как я автоматизировал скрипт с помощью launchd
,
Он перестает работать через час после того, как я начну автоматизировать его с launchd
, Я думаю, проблема в том, что через час токен доступа меняется, и неинтерактивная версия не ожидает автоматического обновления токена OAuth. Вот ошибка, которую я получаю из сообщения об ошибке:
Автообновление устаревшего токена OAuth. Ошибка в gzfile(файл, режим): не удается открыть соединение Вызовы: gs_auth ... -> -> cache_token -> saveRDS -> gzfile Дополнительно: Предупреждение: в gzfile(файл, режим): невозможно открыть сжатый файл '.httr-oauth', вероятная причина' В доступе отказано 'Выполнение приостановлено
Я пользуюсь пакетом с гугл листами Дженни Брайан. Вот код, который я изначально использую для регистрации листа, а затем сохраняю токен oAuth:
gToken <- gs_auth() # Run this the first time to get the oAuth information
saveRDS(gToken, "/Users/…/gToken.rds") # Save the oAuth information for non-interactive use
Затем я использую следующий скрипт в файле, с которым я автоматизирую launchd
:
gs_auth(token = "/Users/…/gToken.rds")
Как я могу избежать этой ошибки при автоматическом запуске скрипта с launchd
?
1 ответ
Я не знаю о запуске, но у меня возникла та же проблема, когда я хотел запустить скрипт R автоматически из планировщика задач Windows. Изменение значения атрибута 'cache' на FALSE помогло мне [1]:
Вы можете найти решение здесь: https://github.com/jennybc/googlesheets/issues/262
Чтобы выполнить аутентификацию один раз в браузере, чтобы получить файл токена, я сделал это:
token_file <- gs_auth(new_user = TRUE, cache = FALSE)
saveRDS(token_file, "googlesheets_token.rds")
Автоматический вход после этого через:
gs_auth(token = paste0(path_scripts, "googlesheets_token.rds"),
verbose = TRUE, cache = FALSE)