reading raw data in R to be saved as .RData file using the dropbox api

Having worked out the oauth signature approval system, for dropbox, I wanted to download an .RData file that I had saved there, using the API, and httr 's GET function.

The request was sucessfull and comes back with data, but it is in a raw format, and was wondering how do I go about converting it into an RData file again on my local drive.

This is what I've done so far:...

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

basically I want to somehow save the raw.content.of.file object into a file called downloaded.RData , which should be identical to test.RData or failing that at least be able to load the objects that are in test.RData into my Global environment.


You can use writeBin to write the binary response content to a Rda file. Here is a complete working example :

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

And there is an even simpler way if you don't want to save your binary data to a file. You can just do directly :

rm(test)
load(rawConnection(response$content))
test
 [1]  1  2  3  4  5  6  7  8  9 10
链接地址: http://www.djcxy.com/p/38298.html

上一篇: 大多数可移植的方式将README消息嵌入到RData(R workspace)文件中

下一篇: 读取R中的原始数据以使用Dropbox API保存为.RData文件