【问题标题】:How to download an .xlsx file from a dropbox (https:) location如何从 Dropbox (https:) 位置下载 .xlsx 文件
【发布时间】:2014-05-22 23:05:11
【问题描述】:

我正在尝试采用 Reproducible Research 范式,但会遇到喜欢查看 Excel 而不是中途查看文本数据文件的人,方法是使用 Dropbox 托管 Excel 文件,然后我可以使用 .xlsx 包访问这些文件。

就像下载和解压缩压缩文件一样,我认为类似以下内容会起作用:

# Prerequisites
require("xlsx")
require("ggplot2")
require("repmis")
require("devtools")
require("RCurl") 
# Downloading data from Dropbox location


link <- paste0(
    "https://www.dropbox.com/s/",
    "{THE SHA-1 KEY}",
    "{THE FILE NAME}"
)

url <- getURL(link)

temp <- tempfile()
download.file(url, temp)

但是,我得到Error in download.file(url, temp) : unsupported URL scheme

是否存在可以接受此 URL 方案的 download.file 替代方案? 谢谢, 乔恩

【问题讨论】:

  • 我不熟悉 DropBox 如何处理这种特殊问题;是您没有进行身份验证的问题,还是由于某种原因,RCurl 对您的 URL 进行了抨击?您将使用的链接是否公开可用?
  • 另外...您是否检查过getURL() 在这种情况下是否确实有效,或者您是否遇到了证书问题?默认情况下,curl 不知道在哪里查找证书,因此会拒绝。您可以关闭 CA 验证,或将其指向证书。
  • 为 download.file 的方法参数尝试其他默认值。您也可以使用例如设置方法options(download.file.method="curl") 有效地改变默认值

标签: r excel dropbox


【解决方案1】:

您输入了错误的网址 - 您使用的网址只是转到了着陆页。我认为实际的下载 URL 是不同的,我设法使用下面的方法让它工作。

我实际上认为您不需要使用 RCurl 或 getURL() 函数,而且我认为您在之前的表述中遗漏了一些相对重要的 /

尝试以下方法:

link <- paste("https://dl.dropboxusercontent.com/s",
              "{THE SHA-1 KEY}",
              "{THE FILE NAME}",
               sep="/")

download.file(url=link,destfile="your.destination.xlsx")
closeAllConnections()

【讨论】:

  • 如果没有method=curlmethod=wget,这可能无法在非Windows 平台上运行,因为?download.file 表示“请注意,内部方法不支持https:// URL。”
  • 嗨。谢谢。 SHA 和文件名部分仅用于说明以避免广播 SHA-1 密钥。 '/' 就位。问题与以前完全相同:“不支持的 URL 方案”。我正在使用 OSX,因此它可能适用于 Windows。我会在一周后找到下次访问的时候。
【解决方案2】:

更新:

我刚刚意识到repmis package 中有一个source_XlsxData 函数,理论上它应该可以完美地完成这项工作。

此外,下面的函数在某些时候有效,但在其他时候无效,并且似乎卡在 GET 行。因此,我们非常欢迎更好的解决方案。


我决定尝试退后一步,弄清楚如何从安全 (https) 网址下载原始文件。我在 devtools 中调整(屠宰了?)source_url 函数以生成以下内容:

download_file_url <- function (

   url, 
   outfile,
   ..., sha1 = NULL) 
{
    require(RCurl)
    require(devtools)
    require(repmis)
    require(httr)
    require(digest)
    
    stopifnot(is.character(url), length(url) == 1)
    filetag <- file(outfile, "wb")
    request <- GET(url)
    stop_for_status(request)
    writeBin(content(request, type = "raw"), filetag)
    close(filetag)
}

这似乎适用于生成本地版本的二进制文件 - 包括 Excel。更好、更整洁、更智能的改进受到了欢迎。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    相关资源
    最近更新 更多