Преобразование команды cURL в запрос R GET - PullRequest
1 голос
/ 12 июля 2020

Кто-нибудь знает, как преобразовать более сложные команды cURL в запросы httr: GET (). Проблема, с которой я столкнулся, заключается в том, что для API требуется только ключ в виде имени пользователя. но не требует пароля.

$ curl https://api.goclimate.com/v1/flight_footprint \
  -u YOUR_API_KEY: \
  -d 'segments[0][origin]=ARN' \
  -d 'segments[0][destination]=BCN' \
  -d 'segments[1][origin]=BCN' \
  -d 'segments[1][destination]=ARN' \
  -d 'cabin_class=economy' \
  -d 'currencies[]=SEK' \
  -d 'currencies[]=USD' \
  -G

Возможно, другой пакет, например Rcurl, может быть более подходящим?

Спасибо!

1 Ответ

0 голосов
/ 12 июля 2020

Что ж, когда вы включаете ":" без ничего после него, вы указываете пароль как пустую строку. Таким образом, используя httr, это будет похоже на

GET("https://api.goclimate.com/v1/flight_footprint",
    authenticate("YOUR_API_KEY",""),
    query=list(
        "segments[0][origin]"="ARN",
        "segments[0][destination]"="BCN",
        "segments[1][origin]"="BCN",
        "segments[1][destination]"="ARN",
        "cabin_class"="ecomony",
        "currencies[0]"="SEK",
        "currencies[1]"="USD"))

Расширение индексов параметров немного беспорядочно, вы можете написать вспомогательную функцию

query_expand <- function(x) {
  expd <- function(name, value) {
    do.call("c", unname(Map(function(name, value) {
      if(is.list(value) && !is.null(names(value))) {
        xx <- expd(paste0("[", names(value), "]"), value)
        setNames(xx, paste0(name, names(xx)))
      } else if(is.list(value)) {
        xx <- expd(paste0("[",seq_along(value)-1,"]"), value)
        setNames(xx, paste0(name, names(xx)))
      } else if (length(value)>1) {
        setNames(as.list(value), paste0(name, "[", seq_along(value)-1,"]"))
      } else {
        setNames(list(value), name)
      }}, name, value)))
  }
  expd(names(x), x)
}

Затем, если у вас есть свои данные почти в объекте

params <- list("segments" = list(
    list(origin="ARN", destination="BCN"),
    list(origin="BCN", destination=c("ARN"))
  ),
  "cabin_class" = "ecomony",
  "currencies" = c("SEK","USD"))

Вы можете просто использовать

GET("https://api.goclimate.com/v1/flight_footprint",
    authenticate("YOUR_API_KEY",""),
    query = query_expand(params))
...