如何定期从RESTAPI获取数据?
背景 我目前正在使用R Shinny构建一个“数据记录器”应用程序。我有一个REST-API,它返回一个随时间变化的值。我的目标是创建一个Shinny应用程序,用户可以在其中单击actionbutton开始定期(例如每60秒)写入从API获取的值当用户单击另一个actionbutton时,数据的记录也应该停止 问题 我的问题是编写一个函数,该函数在按下一个按钮时开始执行,之后定期执行,在按下另一个按钮时停止执行 以前的想法 我以前尝试过使用invalidateLater(),但无法实现我的愿望 你们能帮我想出一个聪明的主意吗如何定期从RESTAPI获取数据?,r,api,shiny,reactive,R,Api,Shiny,Reactive,背景 我目前正在使用R Shinny构建一个“数据记录器”应用程序。我有一个REST-API,它返回一个随时间变化的值。我的目标是创建一个Shinny应用程序,用户可以在其中单击actionbutton开始定期(例如每60秒)写入从API获取的值当用户单击另一个actionbutton时,数据的记录也应该停止 问题 我的问题是编写一个函数,该函数在按下一个按钮时开始执行,之后定期执行,在按下另一个按钮时停止执行 以前的想法 我以前尝试过使用invalidateLater(),但无法实现我的愿望
提前感谢!这应该说明它是如何工作的。
invalidateLater()
是正确的选择。启动/停止按钮改变了一个确定轮询是打开还是关闭的反应式表达式。这样,反应式RestPoll
表达式在每次打开/关闭时都会收到通知,当然,只要Running()==TRUE
,500毫秒后就会收到通知
library(shiny)
ui <- fluidPage(
actionButton("btnStart", "Start"),
actionButton("btnStop", "Stop"),
textOutput("outTime")
)
server <- function(input, output, session) {
Running <- reactiveVal(FALSE)
observeEvent(input$btnStart, {
Running(TRUE)
})
observeEvent(input$btnStop, {
Running(FALSE)
})
RestPoll <- reactive({
if (Running()) # IS called every time `Running` changes
invalidateLater(500, session)
# Add any REST calls here, process the results
return(Sys.time()) # deliver results
})
output$outTime <- renderText({
req(RestPoll())
})
}
shinyApp(ui, server)
库(闪亮)
ui注意:此数据日志标记不是您要查找的数据日志标记[waves hand]en.wikipedia.org/wiki/datalog