【问题标题】:R: download all files in a Google Drive public folderR:下载 Google Drive 公共文件夹中的所有文件
【发布时间】:2014-10-01 20:08:29
【问题描述】:

我正在尝试获取使用 Google 云端硬盘公共文件夹共享的 RAIS(巴西员工注册表数据集)的数据。这是地址: https://drive.google.com/folderview?id=0ByKsqUnItyBhZmNwaXpnNXBHMzQ&usp=sharing&tid=0ByKsqUnItyBhU2RmdUloTnJGRGM#list

数据每年被划分到一个文件夹中,每个文件夹中的每个州都有一个文件可供下载。我想自动化 R 中的下载过程,所有年份,如果不是至少在每年的文件夹中。下载的文件名应遵循手动下载时出现的文件名。

A 会一点 R,但不会 Web 编程或 Web 抓取。这就是我到目前为止得到的: 通过手动下载 2012 文件的第一个文件,我可以看到我的浏览器用来下载的 URL: https://drive.google.com/uc?id=0ByKsqUnItyBhS2RQdFJ2Q0RrN0k&export=download

因此,我想文件 id 是:0ByKsqUnItyBhS2RQdFJ2Q0RrN0k

搜索 2012 页面的 html 代码,我找到了该 ID 和与之关联的文件名:AC2012.7z。 所有其他 id 和文件名都在 html 代码的该部分中。所以,假设我可以正确下载文件,我想我至少可以概括其他文件。

在 R 中,我尝试了流式代码来下载文件:

url <- "https://drive.google.com/uc?id=0ByKsqUnItyBhS2RQdFJ2Q0RrN0k&export=download"
download.file(url,"AC2012.7z")
unzip("AC2012.7z")

它确实下载了,但尝试解压缩文件时出现错误(在 R 中和使用 7.zip 手动解压) 在 R 中下载的文件一定有问题,因为文件大小 (3.412Kb) 没有匹配我从手动下载文件中得到的 (3.399Kb)

【问题讨论】:

  • @jdharrison:tks。这里有点不同,因为主文件夹是公共的,而 RGoogleDocs 上的文档没有提到这一点。不过我会看代码来看看。
  • 为什么不将整个文件夹复制到自己的驱动器中,然后批量下载文件?
  • @user3616725:不,我正在尝试将其包装在一个函数中,以便轻松下载和使用这些数据。所以我不能假设用户有谷歌帐户
  • @LucasMation 你找到解决办法了吗?

标签: r download google-drive-api


【解决方案1】:

对于今天尝试解决此问题的任何人,您可以使用googledrive package

library(googledrive)
ls_tibble <- googledrive::drive_ls(GOOGLE_DRIVE_URL_FOR_THE_TARGET_FOLDER)
for (file_id in ls_tibble$id) {
  googledrive::drive_download(as_id(file_id))
}

这将 (1) 触发身份验证页面在您的浏览器中打开,以授权 Tidyverse 库使用 gargle 代表您的帐户访问 Google Drive,并 (2) 下载该 URL 文件夹中的所有文件到当前 R 会话的当前工作目录。

【讨论】:

  • 我发现 googledrive 想要我的 Google 驱动器上的写权限只是为了下载公共文件有点令人担忧。我运行此代码以使其具有只读访问权限:googledrive::drive_auth(scopes = "https://www.googleapis.com/auth/drive.readonly", email="&lt;youremail@gmail.com&gt;")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多