在Shiny App中使用下载/外部文件

时间:2014-09-12 21:17:19

标签: r shiny

我正在尝试创建一个闪亮的应用,该应用使用谷歌电子表格中外部可用的信息,我将其下载到临时的.csv文件中。该应用程序在我的本地计算机上正常运行,但当我尝试将其推送到shinyapps.io时,该应用程序失败。我尝试使用一个简单的示例重新创建下面的错误。闪亮的应用程序可以在这里找到:https://n8sty.shinyapps.io/test/。我已经复制了在本地工作的server.R和ui.R文件。

我认为问题在于服务器无法以与本地计算机相同的方式处理外部Google工作表文件的下载。有谁知道如何在闪亮的应用程序中使用谷歌文档?

ui.r

require(shiny)

shinyUI(fluidPage(

  mainPanel(
    tableOutput("table")
    )

  ))

server.r

require(shiny)

td <- tempdir()
tf <- tempfile(pattern = 'test', tmpdir = td, fileext = '.csv')
url <- 'https://docs.google.com/spreadsheets/d/1c1ZI0P0ydunm-wc1eb3-jYbWfwMZQc4eAyWlHJut2wY/export?usp=sharing&format=csv'
download.file(url, tf, method = 'auto', quiet = TRUE)
df <- read.csv(tf)

shinyServer(function(input, output) {

  output$table <- renderTable({
    df
    })

})

由于

1 个答案:

答案 0 :(得分:1)

经过深入搜索SO以及网络的其他广阔世界,我现在想出的是什么。一个快速的警告,它看起来像开发中的包更改和谷歌更改其文档的格式,几个月前工作的代码阅读谷歌表不再有效。

我从fetchGoogle(...)包的开发版本的mosaic函数中灵感定义了以下函数。

loadGoogSheet <- function(URL, key = NULL,
                          stringsAsFactors = default.stringsAsFactors(), na.strings = "NA",
                          colClasses = NA, blank.lines.skip = TRUE
                          ) 
{

  #.try_require("RCurl")
  if (missing(URL) & !is.null(key)) 
    URL = paste("https://docs.google.com/spreadsheet/pub?key=", 
                key, "&single=TRUE&gid=0", "&output=csv", sep = "")
  s = RCurl::getURLContent(URL)
  foo = textConnection(s)
  b = read.csv(foo,
               stringsAsFactors = stringsAsFactors,
               na.strings = na.strings,
               colClasses = colClasses,
               blank.lines.skip = blank.lines.skip
  )
  close(foo)
  return(b)

}

根据您的机器处理证书的方式,您可能需要在上述代码之前包含这段代码:

require(RCurl)
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))