У меня есть файл Rmd
, который использует httr
для доступа к Github-API. Локально, я могу пройти аутентификацию с помощью Github, если я выполню следующее в консоли R
перед рендерингом Rmd
:
myapp <- oauth_app("APP", key = "xyz", secret = "pqr")
github_token <- oauth2.0_token(oauth_endpoints("github"), myapp)
Ключ и секрет были созданы в Github и существуют в моей рабочей области. когда я выполняю рендеринг, получается github_token
, и я могу получить доступ к Github-API, не превышая ограничения доступа при локальном рендеринге.
Теперь тот же Rmd
также автоматически создается в Travis-CI и затем развернут на gh-pages, когда я пу sh мастер ветвь. У меня есть эта рабочая без аутентификации, но она ограничивает мой лимит запросов к Githhub-API до 60 в час, и мне нужен более высокий лимит, который можно получить при аутентификации. Поэтому для этого у меня есть персональный токен доступа (PAT), также настроенный в Github; на странице, на которой установлен PAT, написано: «Персональные токены доступа работают как обычные токены доступа OAuth. Их можно использовать вместо пароля для Git через HTTPS или для аутентификации в API через Basi c Authentication» .
Вот часть моего Rmd
, где я пытаюсь определить, является ли рендеринг локальным или удаленным, и получить соответствующий токен. Однако, когда это выполняется в Travis-CI, токен не распознается, поэтому я не думаю, что использую его правильно.
# Figure out the build location, and get the needed token
at_home <- FALSE
at_TCI <- FALSE
token_found <- FALSE
token_OK <- FALSE # not used now/yet
# Check to see if we are at TRAVIS-CI
# This next variable is in the Travis build environment & is a character string
token_value <- Sys.getenv("TRAVIS_CI")
if (token_value != "") {
token_found <- TRUE
at_TCI <- TRUE
}
# Check to see if we are on the local/home machine
# This token is generated interactively via "Web Application Flow",
# and is deposited in the local workspace
# See developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow
# This token has classes 'Token2.0', 'Token', 'R6' <Token2.0>
if (!at_TCI) {
token_found <- exists("github_token")
if (token_found) {
token_value <- github_token
at_home <- TRUE
}
}
# See where we stand and act accordingly
if (!token_found) {
message("Could not retrieve token - GET calls will be rate-limited by Github")
# TEMPORARY: just use a few lines for faster testing & not blasting GH limits
DF <- DF[1:5,]
}
if (token_found) {
set_config(config(token = token_value)) # applies to all GET requests below
}
Я не думаю, что set_config
вызов работает правильно, когда я нахожусь в Travis-CI, потому что я получаю ошибку, которая, кажется, приходит от вызова GET
, который происходит позже (действительно трудно устранить неполадки на T-CI, но Rmd
работает хорошо локально). Вот пример GET
вызова, который завершается неудачно после запуска приведенного выше фрагмента, но работает локально:
repoOK[i] <- identical(status_code(GET(DF$repo[i])), 200L)
, где DF$repo[i]
- это URL.
Я новичок в httr
и Github-API, но я провел много времени, экспериментируя с заклинаниями, найденными здесь на SO, и с документацией Github, но пока что безуспешно с удаленной сборкой. Поэтому я призываю милости сообщества SO!
РЕДАКТИРОВАТЬ: GH репо с полным кодом.
РЕДАКТИРОВАТЬ 2: Никто не ответил в течение периода щедрости (!). Так что я буду работать над основной веткой. Эта ветка имеет код, который работает локально, но не работает в Travis-CI. Кроме того, в этой ветке устранено все Python, чтобы избежать других проблем и сохранить вещи в чистоте. Эта ветка выдает следующую ошибку на Travis-CI:
Ошибка в getGHdates (DF $ repo [i], "commitits"): превышена скорость доступа к Github, повторите попытку позже