读取R中的原始数据,使用dropbox api保存为.RData文件

时间:2013-01-29 10:32:13

标签: r dropbox-api rcurl httr

制定了oauth签名审批系统,对于d​​ropbox,我想使用API​​和httr的{​​{1}}函数下载我在那里保存的.RData文件。

请求已成功并返回数据,但它采用原始格式,并且想知道如何在本地驱动器上再次将其转换为RData文件。

这是我到目前为止所做的:...

GET

基本上我想以某种方式将require(httr) db.file.name <- "test.RData" db.app <- oauth_app("db",key="xxxxx", secret="xxxxxxx") db.sig <- sign_oauth1.0(db.app, token="xxxxxxx", token_secret="xxxxxx") response <- GET(url=paste0("https://api-content.dropbox.com/1/files/dropbox/",db.file.name),config=c(db.sig,add_headers(Accept="x-dropbox-metadata"))) str(response) List of 8 $ url : chr "https://api-content.dropbox.com/1/files/dropbox/test.RData" $ handle :List of 2 ..$ handle:Formal class 'CURLHandle' [package "RCurl"] with 1 slots .. .. ..@ ref:<externalptr> ..$ url :List of 8 .. ..$ scheme : chr "https" .. ..$ hostname: chr "api-content.dropbox.com" .. ..$ port : NULL .. ..$ path : chr "" .. ..$ query : NULL .. ..$ params : NULL .. ..$ username: NULL .. ..$ password: NULL .. ..- attr(*, "class")= chr "url" ..- attr(*, "class")= chr "handle" $ status_code: num 200 $ headers :List of 14 ..$ server : chr "nginx/1.2.6" ..$ date : chr "Tue, 29 Jan 2013 10:18:58 GMT" ..$ content-type : chr "application/octet-stream" ..$ content-length : chr "1142953" ..$ connection : chr "keep-alive" ..$ access-control-expose-headers: chr "X-Dropbox-Metadata, Accept-Ranges, Content-Range" ..$ accept-ranges : chr "bytes" ..$ x-dropbox-metadata : chr "{\"revision\": 8398, \"rev\": \"20ce0573b0e8\", \"thumb_exists\": false, \"bytes\": 1142953, \"modified\": \"Thu, 24 Jan 2013 2"| __truncated__ ..$ etag : chr "8398n" ..$ pragma : chr "public" ..$ cache-control : chr "max-age=0" ..$ access-control-allow-origin : chr "*" ..$ status : chr "200" ..$ statusmessage : chr "OK" ..- attr(*, "class")= chr [1:2] "insensitive" "list" $ cookies : list() $ content : raw [1:1142953] 1f 8b 08 00 ... $ times : Named num [1:6] 0 0.4 0.518 0.879 1.898 ... ..- attr(*, "names")= chr [1:6] "redirect" "namelookup" "connect" "pretransfer" ... $ config :List of 1 ..$ httpheader: Named chr [1:2] "x-dropbox-metadata" "OAuth oauth_consumer_key=\"xxxxxx\", oauth_nonce=\"xxxxxxxx\", oauth_signature=\"xxxxxxxxxxxxxx\", o"| __truncated__ .. ..- attr(*, "names")= chr [1:2] "Accept" "Authorization" ..- attr(*, "class")= chr "config" - attr(*, "class")= chr "response" raw.content.of.file <- content(response) head(raw.content.of.file) [1] 1f 8b 08 00 00 00 对象保存到名为raw.content.of.file的文件中,该文件应该与downloaded.RData相同,或者至少能够加载其中的对象test.RData进入我的全球环境。

1 个答案:

答案 0 :(得分:5)

您可以使用writeBin将二进制响应内容写入Rda文件。这是一个完整的工作示例:

library(httr)
test <- 1:10
save(test, file="~/Dropbox/test.Rda")
response <- GET(url="https://dl.dropbox.com/s/9rjbjwqxid7yj53/test.Rda?dl=1")
writeBin(response$content, "test2.Rda")
rm(test)
load("test2.Rda")
test
 [1]  1  2  3  4  5  6  7  8  9 10

如果您不想将二进制数据保存到文件中,还有一种更简单的方法。你可以直接做:

rm(test)
load(rawConnection(response$content))
test
 [1]  1  2  3  4  5  6  7  8  9 10