Skip to content

Commit

Permalink
Implement timeout in httr
Browse files Browse the repository at this point in the history
  • Loading branch information
raffaem committed Feb 4, 2025
1 parent 64dfd4b commit fbdd282
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 15 deletions.
24 changes: 15 additions & 9 deletions R/oa_fetch.R
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ oa_fetch <- function(entity = if (is.null(identifier)) NULL else id_type(shorten
count_only = FALSE,
mailto = oa_email(),
api_key = oa_apikey(),
verbose = FALSE) {
verbose = FALSE,
timeout = 30) {
output <- match.arg(output)
entity <- match.arg(entity, oa_entities())

Expand Down Expand Up @@ -142,7 +143,8 @@ oa_fetch <- function(entity = if (is.null(identifier)) NULL else id_type(shorten
mailto = mailto,
api_key = api_key,
parse = output != "raw",
verbose = verbose
verbose = verbose,
timeout = timeout
)
}

Expand Down Expand Up @@ -197,6 +199,9 @@ oa_fetch <- function(entity = if (is.null(identifier)) NULL else id_type(shorten
#' If FALSE, returns the raw JSON response as string.
#' @param verbose Logical.
#' If TRUE, print information about the querying process. Defaults to TRUE.
#' @param timeout Numeric.
#' Number of seconds to wait for a response until giving up. Can not be less than 1 ms.
#' Defaults to 30.
#'
#' @return a data.frame or a list of bibliographic records.
#'
Expand Down Expand Up @@ -312,7 +317,8 @@ oa_request <- function(query_url,
mailto = oa_email(),
api_key = oa_apikey(),
parse = TRUE,
verbose = FALSE) {
verbose = FALSE,
timeout = 30) {
# https://httr.r-lib.org/articles/api-packages.html#set-a-user-agent
ua <- httr::user_agent("https://github.com/ropensci/openalexR/")

Expand All @@ -335,7 +341,7 @@ oa_request <- function(query_url,
}

# first, download info about n. of items returned by the query
res <- api_request(query_url, ua, query = query_ls, api_key = api_key, parse = FALSE)
res <- api_request(query_url, ua, query = query_ls, api_key = api_key, parse = FALSE, timeout = timeout)
res_parsed <- jsonlite::fromJSON(res, simplifyVector = FALSE)
res_meta <- res_parsed$meta
if (parse) {
Expand Down Expand Up @@ -364,7 +370,7 @@ oa_request <- function(query_url,
if (verbose) cat("=")
Sys.sleep(1 / 10)
query_ls[[paging]] <- next_page
res <- api_request(query_url, ua, query = query_ls)
res <- api_request(query_url, ua, query = query_ls, timeout = timeout)
data <- c(data, res[[result_name]])
i <- i + 1
next_page <- get_next_page("cursor", i, res)
Expand Down Expand Up @@ -412,10 +418,10 @@ oa_request <- function(query_url,
query_ls[[paging]] <- next_page

if (parse) {
res <- api_request(query_url, ua, query = query_ls, parse = TRUE)
res <- api_request(query_url, ua, query = query_ls, parse = TRUE, timeout = timeout)
if (!is.null(res[[result_name]])) data[[i]] <- res[[result_name]]
} else {
raw <- api_request(query_url, ua, query = query_ls, parse = FALSE)
raw <- api_request(query_url, ua, query = query_ls, parse = FALSE, timeout = timeout)
data[[i]] <- raw
}
}
Expand Down Expand Up @@ -707,8 +713,8 @@ oa_random <- function(entity = oa_entities(),
final_res
}

api_request <- function(query_url, ua, query, api_key = oa_apikey(), parse = TRUE) {
res <- httr::GET(query_url, ua, query = query, httr::add_headers(api_key = api_key))
api_request <- function(query_url, ua, query, api_key = oa_apikey(), parse = TRUE, timeout = 30) {
res <- httr::GET(query_url, ua, query = query, httr::add_headers(api_key = api_key), httr::timeout(timeout))

empty_res <- if (parse) list() else "{}"

Expand Down
7 changes: 6 additions & 1 deletion man/oa_fetch.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion man/oa_request.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 1 addition & 4 deletions man/snowball2df.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit fbdd282

Please sign in to comment.