Моя проблема
У меня большой набор данных (> 40 000 строк), и я хочу использовать API, чтобы получить код для каждой строки, отправив запросы с 2 аргументами.
Все работает, но это довольно медленно (~ 1,5 секунды на строку), и я получаю сообщение об ошибке при достижении строки 3401:
Error in curl::curl_fetch_memory(url, handle = handle) :
Timeout was reached: Operation timed out after 10969 milliseconds with 0 out of 0 bytes received
Мой воспроизводимый код
library(tidyverse)
library(jsonlite)
library(httr)
# example dataset ---------------------------------------------------------
data_example = tibble(ADRESSE = c("20 Rue de la Tour d'Auvergne",
"21 Rue Lucien Sampaix",
"1 Parvis Notre-Dame"),
CP = c("75009",
"75010",
"75004"))
# function ----------------------------------------------------------------
get_my_iris = function(adresse , cp ) {
print(Sys.time())
tt = httr::VERB(
verb = "GET", url = "https://pyris.datajazz.io/api/search/",
httr::add_headers(accept = "application/json"),
query = list(
geojson = "false",
q = adresse, postcode = cp
)
)
text = content(tt,as="text",encoding = "UTF-8")
df = fromJSON(text, flatten = TRUE) %>% data.frame()
if(length(df) > 0){
return(as.character(df$complete_code))
} else {
return("NO CODE")
}
}
# purrr -------------------------------------------------------------------
map2_chr(data_example$ADRESSE,data_example$CP, ~get_my_iris(adresse = .x, cp =.y))
Есть ли способ чтобы ускорить эту задачу?