Неинтерактивное автоматическое обновление устаревшего токена OAuth с пакетом Googlesheets

Я пытаюсь автоматически запускать r-скрипт для загрузки частного листа Google каждый час. Он всегда работает нормально, когда я использую R в интерактивном режиме. Он также отлично работает в течение первого часа после того, как я автоматизировал сценарий с помощью launchd.

Он перестает работать через час после того, как я начал автоматизировать его с помощью launchd. Я думаю, проблема в том, что через час токен доступа меняется, а неинтерактивная версия не ждет автоматического обновления токена OAuth. Вот ошибка, которую я получаю из отчета об ошибке:

Автоматическое обновление устаревшего токена OAuth. Ошибка в gzfile (файл, режим): невозможно открыть соединение Вызовы: gs_auth ... -> -> cache_token -> saveRDS -> gzfile Кроме того: Предупреждающее сообщение: В gzfile (файл, режим): невозможно открыть сжатый файл '. httr-oauth», вероятная причина «Отказано в доступе» Выполнение остановлено

Я использую пакет googlesheets Дженни Брайан. Вот код, который я сначала использую для регистрации листа, а затем сохраняю токен 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?


person Ron Guymon    schedule 21.07.2016    source источник


Ответы (1)


Я не знаю о launchd, но у меня была такая же проблема, когда я хотел автоматически запустить R-скрипт из планировщика задач Windows. Изменение значения атрибута 'cache' на FALSE помогло мне [1]: https://i.stack.imgur.com/pprlC.png

Решение можно найти здесь: 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)
person Thomas Koller    schedule 31.07.2017