Я работаю с источником данных, который транслирует json через веб-сокет.
Я хотел бы захватить это и сохранить где-нибудь, в конце концов в db (возможно, mongodb fwiw).
Пакеты websocket и jsonlite выглядят как естественные решения, первый для обработки настройки сокета, а второй для анализа / агрегирования json.
Наиболее естественным было быфункция jsonlite::stream_in()
, которая ожидает объекта подключения R , поставляющего json.Однако, объект, возвращаемый websocket::WebSocket()
, не тот.
Мой вопрос: как мне лучше всего захватить поток json?
library("websocket")
library("jsonlite")
# ws is an R6 object of class 'WebSocket'
ws <- websocket::WebSocket$new("ws://echo.websocket.org/", autoConnect = FALSE)
ws$onMessage(function(event) {
cat(event$data)
## instead of cat'ing to console, I want to stream the json somewhere usefull
## my sense is that this should happen within this event handler
})
ws$connect()
# ping some json that will be caught by the onMessage event handler defined above
for (i in 1:10) {
ws$send(jsonlite::toJSON(data.frame(msg = i)))
}
#> Error in wsSend(private$wsObj, msg): invalid state
# tidy up
ws$close()
Создан в 2018-10-25 пакетом Представить (v0.2.1)
devtools::session_info()
#> Session info -------------------------------------------------------------
#> setting value
#> version R version 3.5.1 (2018-07-02)
#> system x86_64, darwin15.6.0
#> ui X11
#> language (EN)
#> collate en_US.UTF-8
#> tz America/Chicago
#> date 2018-10-25
#> Packages -----------------------------------------------------------------
#> package * version date source
#> backports 1.1.2 2017-12-13 CRAN (R 3.5.0)
#> base * 3.5.1 2018-07-05 local
#> compiler 3.5.1 2018-07-05 local
#> datasets * 3.5.1 2018-07-05 local
#> devtools 1.13.6 2018-06-27 CRAN (R 3.5.0)
#> digest 0.6.15 2018-01-28 CRAN (R 3.5.0)
#> evaluate 0.10.1 2017-06-24 CRAN (R 3.5.0)
#> graphics * 3.5.1 2018-07-05 local
#> grDevices * 3.5.1 2018-07-05 local
#> htmltools 0.3.6 2017-04-28 CRAN (R 3.5.0)
#> jsonlite * 1.5 2017-06-01 CRAN (R 3.5.0)
#> knitr 1.20 2018-02-20 CRAN (R 3.5.0)
#> later 0.7.5 2018-09-18 cran (@0.7.5)
#> magrittr 1.5 2014-11-22 CRAN (R 3.5.0)
#> memoise 1.1.0 2017-04-21 CRAN (R 3.5.0)
#> methods * 3.5.1 2018-07-05 local
#> R6 2.2.2 2017-06-17 CRAN (R 3.5.0)
#> Rcpp 0.12.19 2018-10-01 cran (@0.12.19)
#> rlang 0.2.2 2018-08-16 cran (@0.2.2)
#> rmarkdown 1.9 2018-03-01 CRAN (R 3.5.0)
#> rprojroot 1.3-2 2018-01-03 CRAN (R 3.5.0)
#> stats * 3.5.1 2018-07-05 local
#> stringi 1.2.2 2018-05-02 CRAN (R 3.5.0)
#> stringr 1.3.1 2018-05-10 CRAN (R 3.5.0)
#> tools 3.5.1 2018-07-05 local
#> utils * 3.5.1 2018-07-05 local
#> websocket * 0.0.0.9001 2018-09-21 Github (rstudio/websocket@ef78ced)
#> withr 2.1.2 2018-03-15 CRAN (R 3.5.0)
#> yaml 2.1.19 2018-05-01 CRAN (R 3.5.0)