Как ускорить использование httr с помощью нескольких запросов GET? - PullRequest
1 голос
/ 06 мая 2020

Моя проблема

У меня большой набор данных (> 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))

Есть ли способ чтобы ускорить эту задачу?

...