У меня есть доступ к некоторым данным телеметрии в Azure (в частности, ко всем вызовам API для клиентов, использующих мобильное приложение). Я использовал пакет httr в R для запроса данных за 3-минутный период и оценки ответа следующим образом (очевидно, у меня есть собственный идентификатор приложения и ключ, которые я не указал ниже):
install.packages("httr")
library(httr)
r1 <- GET("https://api.applicationinsights.io/v1/apps/application-ID/query?timespan=PT0.05H&query=requests", add_headers("X-Api-Key" = "my-unique-key"))
r1
####### response object ########
# Response [https://api.applicationinsights.io/v1/apps/application-ID/query?timespan=PT0.05H&query=requests]
# Date: 2018-01-11 15:55
# Status: 200
# Content-Type: application/json; charset=utf-8
# Size: 84.7 kB
В окне среды я вижу, что r1 — это список из 10 и 84 652 необработанных значения:
Я также могу использовать функцию содержимого, чтобы увидеть, что у меня есть список из 1:
r2 <- content(r1)
У меня два вопроса на самом деле:
1) Как понять эти выходные данные в окне среды? Что они говорят мне о структуре моих данных (думаю, это JSON на основе описания типа контента)
2) Есть ли способ получить данные и преобразовать их в табличный формат (фрейм данных)? Я не понимаю, как запросить данные. Я прочитал эту статью, но не смог применить ее к своим данным: https://tclavelle.github.io/blog/r_and_apis/
Любая помощь будет оценена по достоинству.
ОБНОВЛЕНИЕ 19 января 2018 г.
Я воспользовался предложением Джалинда. См. ниже код и выходные данные:
library(httr)
library(jsonlite)
r1 <- GET("https://api.applicationinsights.io/v1/apps/application-ID/query?timespan=PT0.05H&query=requests", add_headers("X-Api-Key" = "my-unique-key"))
#convert to a character string
r2 <- rawtoChar(r1$content)
#check the class is character
class(r2)
# now extract JSON from string object
r3 <- fromJSON(r2)
# convert to a data frame - this returns a data frame with columns called name, columns and rows
x <- as.data.frame(r3[[1]])
# column headings data frame (there are 37 columns - see example of first 3 columns below):
c <- as.data.frame(x$columns)
# name type
# timestamp datetime
# id string
# source string
# data frame with 37 columns and all rows of telemetry data (only showing first 4 columns of this data frame):
r <- as.data.frame(x$rows)
# X1 X2 X3 X4
# 1 2018-01-19T10:29:25.4Z |aticCNxxxx=.f83assss_ <NA> GET /Cards/Cardtype1
# 2 2018-01-19T10:29:30.226Z |tX6Xz0xxxxx=.27cxcxae_ <NA> GET /AddressLookup/Address
# 3 2018-01-19T10:29:45.327Z |OgfPbicLues=.f83a9a1f_ <NA> POST /Account/MobileDevice
# 4 2018-01-19T10:29:46.078Z |V5MwpXXxxxxx=.f83axxxx_ <NA> GET /Cards/Cardtype1
# 5 2018-01-19T10:30:00.427Z |Jok8wxxxxxx=.7be33aaa_ <NA> GET /cards/Cardtype1
jsonlite
- person p0bs   schedule 11.01.2018is.data.frame(r3)
- person Richard   schedule 28.08.2018