Tick History REST API: Error in handle_url(handle, url, ...) :can't find object 'location'

ziucqea
ziucqea Newcomer

Hi. I'm following this tutorial (https://developers.refinitiv.com/en/article-catalog/article/using-tick-history-in-r-language-part-3) to use Refinitiv REST API in R. But I think the question should be general and apply to other languages (Python/C etc).

So I'm not able to get results within 30s time-out period so I'm polling the 'get' method. When running:


url <- "https://selectapi.datascope.refinitiv.com/RestApi/v1/Extractions/ExtractRaw&quot;
r <- httr::GET(location,add_headers(prefer = "respond-async",Authorization = token))


I get the error:

Error in handle_url(handle, url, ...) : ccan't find object 'location'


But nowhere in the tutorial mentions how to define 'location'. So can I get some help on this issue? Thank you.

Best Answer

  • Jirapongse
    Jirapongse ✭✭✭✭✭
    Answer ✓

    @ziucqea

    Refer to the source code in GitHub, the Location is in the HTTP's headers when the HTTP status code is 202.

    RTHExtractRaw <- function(b,path,overwrite = FALSE) {
      url <- "https://selectapi.datascope.refinitiv.com/RestApi/v1/Extractions/ExtractRaw&quot;
      token <- get("token",envir = cacheEnv)
      r <- httr::POST(url,add_headers(prefer = "respond-async",Authorization = token),content_type_json(),body = b,encode = "json")
      if (status_code(r) == 202) {
        message("The request has been accepted but has not yet completed executing asynchronously.\r\nReturn monitor URL\r\n",r$headers$location)
    return(invisible(r$headers$location))

      } else if(status_code(r) == 200) {
        a<-content(r, "parsed", "application/json", encoding="UTF-8")
        message(a$Notes)
        return(RTHRawExtractionResults(a$JobId,path,overwrite))
      } else {
        warn_for_status(r)
        a<-content(r, "parsed", "application/json", encoding="UTF-8")
        return(a)
      }
    }

    1629689021730.png

    Then, the URL in the Location is used with the HTTP get method to check the request status.

    RTHCheckRequestStatus <- function(location,path,overwrite = FALSE) {
      token <- get("token",envir = cacheEnv)
      r <- GET(location,add_headers(prefer = "respond-async",Authorization = token))
      if (status_code(r) == 202) {
        message("The request has not yet completed executing asynchronously.\r\nPlease wait a bit and check the request status again.\r\n")
        return(invisible(r$headers$location))
      } else if(status_code(r) == 200) {
        a<-content(r, "parsed", "application/json", encoding="UTF-8")
        message(a$Notes)
        return(RTHRawExtractionResults(a$JobId,path,overwrite))
      } else {
        warn_for_status(r)
        a<-content(r, "parsed", "application/json", encoding="UTF-8")
        return(a)
      }
    }

Answers