Разница между откликом функции GET и getURI - PullRequest
0 голосов
/ 12 января 2019

Так что я хочу сделать несколько запросов к API, чтобы ускорить результаты, поскольку в последовательном режиме это просто слишком медленно. Поэтому я пытаюсь использовать GetURI среди других, однако API не возвращает никакого значения, в то время как запросы GET делают!

Итак, я попробовал различные решения, такие как GETURI, GETURL и getURIAsynchronous, однако ни одно из них не возвращает значение. Я предполагаю, что это потому, что API занимает много времени для обработки запроса. Я включу свой тестовый ключ, однако предполагается, что этим не будут злоупотреблять

links<- c("zalando.nl", "bol.com")
key <- "SILB-DBCA-4523"
APIcall <- paste0("http://www.siteprice.org/WorthApi.aspx?type=1&key=", key, "&url=", links)

#With GET, so serial
res <-GET(APIcall[1])
res1 <- rawToChar(res$content)
as.integer(unlist(xmlToList(xmlParse(res1)))[2])

#With GetURI
res <- getURIAsynchronous(APIcall)
res1 <- rawToChar(res$content)
as.integer(unlist(xmlToList(xmlParse(res1)))

getURIAsynchronous должен возвращать значения запросов GET, а не

1 Ответ

0 голосов
/ 13 января 2019

Взглянул на API SitePrice. Похоже, API использует https вместо http. И у вас будет исходный результат для getURL как Object Moved ...

Функция GET просто перейдет на вашу страницу перенаправления, которая является страницей https, но по умолчанию для getURI в пакете RCurl является получение необработанной страницы.

И у вас есть два решения:

  1. используйте параметр followlocation = TRUE, чтобы перенаправить http на https

    res <- getURIAsynchronous(APIcall, .opts=curlOptions(followlocation=TRUE))
    
  2. использовать https с асинхронной функцией getURIA

    APIcall <- paste0("https://www.siteprice.org/WorthApi.aspx?type=1&key=", key, "&url=", links)
    
...