Возвращает подмножество столбцов из списка фреймов данных в ответе API в R

#python #r #api #curl #httr

#python #r #API #curl #httr

Вопрос:

Я новичок в API, который сам учит, как взаимодействовать с API Planet Labs на R, но документация Planet предназначена для Python, с которым я не знаком (следовательно, работаю на R).

В одном из своих руководств они предоставляют некоторый код python / curl / jq, который возвращает столбец из фрейма данных в списке.

 ➜  curl -L -H "Authorization: api-key $PL_API_KEY" 
    'https://api.planet.com/data/v1/item-types' | jq '.item_types[].id'
"REOrthoTile" # This is the desired output
"PSOrthoTile" # Desired output
  

Мой вопрос заключается в следующем: как мне включить часть кода jq, приведенную выше, в мой запрос API в R, чтобы ответ содержал только соответствующий столбец, а не весь список и фрейм данных? Я могу добраться туда длинным путем, выбрав подмножество из большего списка и фрейма данных, но я стараюсь не запутывать ответ API всей этой ненужной информацией.

 library(httr)
library(jsonlite)

key = "my_Planet_API_key"
res = GET("https://api.planet.com/data/v1/item-types",
           authenticate(user = key, password = ""))
>res
Response [https://api.planet.com/data/v1/item-types]
  Date: 2020-09-11 17:29
  Status: 200
  Content-Type: application/json
  Size: 7.43 kB
{"_links":{"_self":"https://api.planet.com/data/v1/item-type...

data = fromJSON(rawToChar(res$content))

>summary(data)
           Length Class      Mode
_links     1      -none-     list
item_types 5      data.frame list

> str(data, vec.len = 1)
List of 2
 $ _links    :List of 1
  ..$ _self: chr "https://api.planet.com/data/v1/item-types/"
 $ item_types:'data.frame': 15 obs. of  5 variables:
  ..$ _links               :'data.frame':   15 obs. of  1 variable:
  .. ..$ _self: chr [1:15] "https://api.planet.com/data/v1/item-types/PSOrthoTile" ...
  ..$ display_description  : chr [1:15] "PlanetScope orthorectified 4-band imagery as 25km x 25km UTM tiles" ...
  ..$ display_name         : chr [1:15] "PlanetScope Ortho Tile" ...
  ..$ id                   : chr [1:15] "PSOrthoTile" ...
  ..$ supported_asset_types:List of 15
  .. ..$ : chr [1:11] "analytic" ...
  .. ..$ : chr [1:6] "analytic" ...
  .. ..$ : chr [1:16] "analytic" ...
  .. ..$ : chr [1:23] "analytic" ...
  .. ..$ : chr [1:16] "basic_analytic_b1" ...
  .. ..$ : chr [1:14] "analytic_b1" ...
  .. ..$ : chr [1:15] "analytic_b1" ...
  .. ..$ : chr [1:26] "analytic" ...
  .. ..$ : chr [1:12] "ortho_analytic" ...
  .. ..$ : chr [1:3] "video_file" ...
  .. ..$ : chr [1:4] "ortho_analytic_hh" ...
  .. ..$ : chr [1:22] "analytic_gflags" ...
  .. ..$ : chr [1:8] "analytic_granule_pnt" ...
  .. ..$ : chr [1:22] "analytic_gflags" ...
  .. ..$ : chr [1:8] "analytic_granule_pnt" ...

names(data$item_types)
[1] "_links"                "display_description"  
[3] "display_name"          "id"                   
[5] "supported_asset_types"

data$item_types$id # Desired output should be same as Python output above
  

Спасибо!

Ответ №1:

По сути, jq это отдельно установленный модуль командной строки, который может извлекать или преобразовывать данные JSON после curl извлечения или любого JSON, не ограниченного curl . Следовательно, он выполняет не больше работы, чем вызов R httr . Смотрите страницу приложения GitHub.

Чтобы избежать ненужной информации API, просто извлеките необходимый элемент из возвращаемого объекта по цепочке имен:

 data = fromJSON(rawToChar(res$content))$item_types$id

data = fromJSON(rawToChar(res[["content"]]))[["item_types"]][["id"]]
  

Ответ №2:

 as.data.frame(list.flatten(res[['']])) %>% select()
  

Комментарии:

1. Пожалуйста, всегда добавляйте объяснение при предоставлении ответов на код.