R如何将数据从内部Web数据库拉到闪亮的应用程序

时间:2018-11-27 12:15:29

标签: r shiny

我已经构建了一些ShinyApps,现在遇到了新的障碍。具体来说,我无法从托管在URL上的内部数据库中提取数据。到目前为止,我已经能够构建一个脚本来从JSON文件提取数据(从Firefox中的开发人员工具获取URL)。解析和清理后,我可以将所需的信息获取到“ renderPrint”。但是,我无法让反应部分正常工作。

我想让用户从下拉框(例如1-5)中选择一个输入,并使用户输入具有响应性,从而更新GET请求(httr)。我已经在其他站点(例如Wikipedia)上做到了这一点,但是,这是通过响应文本完成的。是否可以使用输入内容更新URL?我目前拥有的内容(请注意:无论输入什么,这都会提取相同的基本URL-但是,如果我手动更改数字,则会得到相关的页面(例如= 1 [pg.1],= 2 [pg.2])

开始R脚本

url<-GET('https://somewebsite.com/results_json /11111?page=1),add_headers("user-agent"-'Firefox/60.0')) 

url_content<-content(web3)

url_summary<-list(url_content[[2]])

results-capture.output(url_summary %>% modify_depth(2,'hostName') %>% str())

results<-as.data.frame(results)

results(as.data.frame(gsub("[[:punct:]]","",as.matrix(results))

results<-as.character(results$results)

results<-as.data.frame(results,stringAsFactors=FALSE)

END R脚本

就像我说的那样,这只是花花公子,但我想让userinput(下拉列表)更新URL。我已经进行了测试,并且无论页码如何,后续代码都可以工作。但是,无法更新...

BEGIN ShinyApp

ui<-pageWithSidebar(
  titlePanel("Data Pool"),

  sidebarPanel(
    selectInput(inputID="pg",
    label="page",
    choices=c("1"="1","2"="2","3"="3"),
    selected="1"),
  actionButton('submit','Submit')
),
mainPanel(
  verbatimTextOutput("data_ids")
) )

server<-(function(input,output) {
  observeEvent(input$submit,{
    x<-as.character(input$pg)
    url<-GET(paste0('https://somewebsite.com/results_json/11111?page=',x), add_headers("user-agent"="Firefox/60.0))})

其中“ x”是用户输入(例如“ 1”),这会将网址更新为... / 11111?page = 1

#here I run the same code as I did in the RScript above#

results<-as.data.frame(gsub("chr","",as.matrix(results)))
results<-as.data.frame(results[-1])

  output$data_ids<-renderPrint({
    as.matrix(results)})
})

shinyApp(ur=ur,server=server)

* END APP

1 个答案:

答案 0 :(得分:0)

您可以在服务器中使用以下内容

server<-function(input,output) {

  results <- reactive({
    x<-as.character(input$pg)
    address <- paste0('https://somewebsite.com/results_json/11111?page=',x)
    # url<-GET(address, add_headers("user-agent"="Firefox/60.0"))
    # results<-as.data.frame(gsub("chr","",as.matrix(results)))
    # results<-as.data.frame(results[-1])
    address
  })

  output$data_ids<-renderPrint({
    as.matrix(results())
  })
}

请注意,results-active的最后一行应该是您要作为结果传递的东西。我没有要测试的网站地址,所以我只打印该地址,该地址似乎是通缉的表格。