2016-03-11 2 views
0

Я использую httr пакет для получения данных из API данных:GET больше объектов с использованием HTTR пакета в R

request3 <- GET(url = "https://api.data-api.io/xxxxx/", add_headers('x-dataapi-key' = "xxxxx"), query = list(oib = "18527887472")) 

Как получить больше объектов в одной строке кода? Допустим, у меня есть вектор:

oibreq <- c("18527887472", "92680516748", "00045103869") 

и я хочу получить объекты для этого 3 «запросов». Долгий путь - вызвать функцию GET 3 раза:

request1 <- GET(url = "https://api.data-api.io/xxxx", add_headers('x-dataapi-key' = "xxxx"), query = list(oib = "18527887472")) 
request2 <- GET(url = "https://api.data-api.io/v1/eoglasna/", add_headers('x-dataapi-key' = "xxxx"), query = list(oib = "00045103869")) 
request2 <- GET(url = "https://api.data-api.io/v1/eoglasna/", add_headers('x-dataapi-key' = "xxxx"), query = list(oib = "92680516748")) 

Есть ли более быстрый способ сделать это? Это проблема, если у меня есть 100 oibreq элементов.

ответ

0

Вы можете написать свою собственную функцию, а затем передать свой вектор объектов ид функции через lapply():

my_get <- function(object) { 
    GET(url = "https://api.data-api.io/v1/eoglasna/", 
     add_headers('x-dataapi-key' = "xxxx"), 
     query = list(oib = object)) 
} 
lapply(oibreq, my_get) 
+0

я изменить код, чтобы включить Дополнительные функции: 'my_get <- function (object) { fromJSON (toJSON (содержимое (GET (url =" https://api.data-api.io/v1/eoglasna/ ", add_headers ('x-dataapi- key '= "59dd75a6525e"), query = list (oib = objec t)), type = "application/json"), null = "null"), flatten = TRUE) } req1 <- lapply (oibreq, my_get) 'и он создает списки списков списков ..., e , г. '[[2]] [[2]] [[1]] [[2]] [[1]] $ datum [1]" 2015-10-19T09: 03: 30 + 02: 00 "' – Mislav

+0

@Mislav Да ... это имело бы смысл. Но почему вы используете 'fromJSON (toJSON (...))' ... там не нужно 'toJSON()' там. – Thomas

+0

Потому что он возвращает ошибку, если я не использую 'toJSON()': 'Ошибка: Аргумент 'txt' должен быть строкой, URL-адресом или файлом JSON.' SO, я до сих пор не получаю желаемого результата. Я хотел бы получить data.frame, но вместо этого получаю тот же странный объект со списком списков ... – Mislav

0

Я нашел ответ на мой вопрос:

req <- list() 
my_get <- for (i in 1:length(oibreq)) { 
    reqOP <- rbind(fromJSON(toJSON(content(GET(url = "https://api.data-api.io/v1/eoglasna/", 
           add_headers('x-dataapi-key' = "xxx"), 
           query = list(oib = oibreq[i])), type = "application/json"), null = "null"), flatten = TRUE)) 
    req[[i]] <- reqOP 
} 
big_data <- do.call(rbind, req) 
Смежные вопросы