rDrop dropbox api非过期令牌/无缝令牌问题

时间:2012-09-13 08:47:48

标签: r token dropbox dropbox-api

我正在使用https://github.com/karthikram/rDrop提供的rDrop包,经过一些调整(因为所有功能都没有像你期望的那样完全正常工作)我得到了它最终以我想要的方式工作,但是一旦你每次获得令牌,它仍然需要授权验证以允许使用应用程序,因为我认为令牌会随着时间的推移而过期...(如果这不是我可以在我的令牌中硬编码,请告诉我,因为这也是一个很好的解决方案......)

基本上我想要一种近乎无缝的方式从R中的命令行从我的Dropbox文件夹中下载一行代码中的csv文件,这样我就不需要在令牌请求后点击允许按钮。

这可能吗?

这是我用来包装dropbox csv下载的代码。

db.csv.download <- function(dropbox.path, ...){

cKey <- getOption('DropboxKey')
cSecret <- getOption('DropboxSecret')
reqURL <- "https://api.dropbox.com/1/oauth/request_token"
authURL <- "https://www.dropbox.com/1/oauth/authorize"
accessURL <- "https://api.dropbox.com/1/oauth/access_token/"

require(devtools)
install_github("ROAuth", "ropensci")
install_github("rDrop", "karthikram")
require(rDrop)
dropbox_oa <- oauth(cKey, cSecret, reqURL, authURL, accessURL, obj = new("DropboxCredentials"))
cred <- handshake(dropbox_oa, post = TRUE)
raw.data <- dropbox_get(cred,dropbox.path)
data <- read.csv(textConnection(raw.data), ...)
data
}

哦,如果它不明显,我把我的Dropbox密钥和秘密放在我的.Rprofile文件中,这就是getOption部分所指的。

提前感谢您提供的任何帮助。 (对于奖励积分......如果有人知道如何摆脱所有加载消息,即使安装会很棒......)

1 个答案:

答案 0 :(得分:1)

library(rDrop) 
# my keys are in my .rprofile, otherwise specifiy inline
db_token <- dropbox_auth()
# Hit ok to authorize once through the browser and hit enter back at the R prompt.
save(db_token, file="my_dropbox_token.rdata")

Dropbox令牌未过期,可以随时从Dropbox web panel撤消。

供将来使用:

library(rDrop)
load('~/Desktop/my_dropbox_token.rdata')
df <- data.frame(x=1:10, y=rnorm(10))
> df
    x          y
1   1 -0.6135835
2   2  0.3624928
3   3  0.5138807
4   4 -0.2824156
5   5  0.9230591
6   6  0.6759700
7   7 -1.9744624
8   8 -1.2061920
9   9  0.9481213
10 10 -0.5997218
dropbox_save(db_token, list(df), file="foo", ext=".rda")
rm(df)
df2 <- db.read.csv(db_token, file='foo.rda')
> df2
    x          y
1   1 -0.6135835
2   2  0.3624928
3   3  0.5138807
4   4 -0.2824156
5   5  0.9230591
6   6  0.6759700
7   7 -1.9744624
8   8 -1.2061920
9   9  0.9481213
10 10 -0.5997218

如果您还有其他问题,请提交issue