Skip to content

Commit

Permalink
fix #123
Browse files Browse the repository at this point in the history
  • Loading branch information
eblondel committed Jun 23, 2023
1 parent 3cba4ae commit 573295f
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 11 deletions.
1 change: 1 addition & 0 deletions NEWS.md
Expand Up @@ -6,6 +6,7 @@

* [#121](https://github.com/eblondel/zen4R/issues/121) Get Zenodo record views/downloads statistics
* [#122](https://github.com/eblondel/zen4R/issues/122) Support `get_zenodo` shortcut method to get a Zenodo Record
* [#123](https://github.com/eblondel/zen4R/issues/123) Support curl fetch for Zenodo records to inherit stats directly

**Enhancements**

Expand Down
4 changes: 2 additions & 2 deletions R/ZenodoManager.R
Expand Up @@ -979,7 +979,7 @@ ZenodoManager <- R6Class("ZenodoManager",
page <- 1
req <- sprintf("records/?q=%s&size=%s&page=%s", URLencode(q), size, page)
if(all_versions) req <- paste0(req, "&all_versions=1")
zenReq <- ZenodoRequest$new(private$url, "GET", req,
zenReq <- ZenodoRequest$new(private$url, "GET_WITH_CURL", req,
token = self$getToken(),
logger = self$loggerType)
zenReq$execute()
Expand All @@ -998,7 +998,7 @@ ZenodoManager <- R6Class("ZenodoManager",
page <- page+1
nextreq <- sprintf("records/?q=%s&size=%s&page=%s", URLencode(q), size, page)
if(all_versions) nextreq <- paste0(nextreq, "&all_versions=1")
zenReq <- ZenodoRequest$new(private$url, "GET", nextreq,
zenReq <- ZenodoRequest$new(private$url, "GET_WITH_CURL", nextreq,
token = self$getToken(),
logger = self$loggerType)
zenReq$execute()
Expand Down
2 changes: 1 addition & 1 deletion R/ZenodoRecord.R
Expand Up @@ -52,7 +52,7 @@ ZenodoRecord <- R6Class("ZenodoRecord",
self$submitted = obj$submitted
self$title = obj$title
self$version = obj$version
self$stats = data.frame(jsonlite::read_json(obj$links$self)$stats)
self$stats = data.frame(obj$stats)
}
),
public = list(
Expand Down
28 changes: 20 additions & 8 deletions R/ZenodoRequest.R
Expand Up @@ -56,23 +56,34 @@ ZenodoRequest <- R6Class("ZenodoRequest",
return(data)
},

GET = function(url, request, progress){
GET = function(url, request, progress, use_curl = FALSE){
req <- paste(url, request, sep="/")
self$INFO(sprintf("Fetching %s", req))
headers <- c(
"User-Agent" = private$agent,
"Authorization" = paste("Bearer",private$token)
)

r <- NULL
if(self$verbose.debug){
r <- with_verbose(GET(req, add_headers(headers), if(progress) httr::progress(type = "up")))
responseContent <- NULL
response <- NULL
if(use_curl){
response <- curl::curl_fetch_memory(req)
responseContent = jsonlite::parse_json(rawToChar(response$content))
response <- list(
request = request, requestHeaders = rawToChar(response$headers),
status = response$status_code, response = responseContent$hits[[1]]
)
}else{
r <- GET(req, add_headers(headers), if(progress) httr::progress(type = "up"))
r <- NULL
if(self$verbose.debug){
r <- with_verbose(GET(req, add_headers(headers), if(progress) httr::progress(type = "up")))
}else{
r <- GET(req, add_headers(headers), if(progress) httr::progress(type = "up"))
}
responseContent <- content(r, type = "application/json", encoding = "UTF-8")
response <- list(request = request, requestHeaders = headers(r),
status = status_code(r), response = responseContent)
}
responseContent <- content(r, type = "application/json", encoding = "UTF-8")
response <- list(request = request, requestHeaders = headers(r),
status = status_code(r), response = responseContent)
return(response)
},

Expand Down Expand Up @@ -208,6 +219,7 @@ ZenodoRequest <- R6Class("ZenodoRequest",

req <- switch(private$type,
"GET" = private$GET(private$url, private$request, private$progress),
"GET_WITH_CURL" = private$GET(private$url, private$request, private$progress, use_curl = TRUE),
"POST" = private$POST(private$url, private$request, private$data, private$file, private$progress),
"PUT" = private$PUT(private$url, private$request, private$data, private$progress),
"DELETE" = private$DELETE(private$url, private$request, private$data)
Expand Down

0 comments on commit 573295f

Please sign in to comment.