2014-09-26 53 views
0

我正在运行中的R Twitter的情绪分析,并遵循从Twitter的包的例子在建立像这样的OAuth参数:与Twitter的包装自动化认证

library(ROAuth) 
library(twitteR) 
library(RCurl) 
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))) 


reqURL <- "https://api.twitter.com/oauth/request_token" 
accessURL <- "https://api.twitter.com/oauth/access_token" 
authURL <- "https://api.twitter.com/oauth/authorize" 
consumerKey <- "xxxxxxxxxxxxxxxxxxxxxxx" 
consumerSecret <- "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 

twitCred <- OAuthFactory$new(consumerKey=consumerKey, 
          consumerSecret=consumerSecret, 
          requestURL=reqURL, 
          accessURL=accessURL, 
          authURL=authURL) 
twitCred$handshake() 
registerTwitterOAuth(twitCred) 

我也想保持认证在R环境中,每次启动并加载此脚本时,我都不需要进行握手。例如,我运行这段代码并保存环境。然后在重启R运行功能,如searchTwitter,我得到这个错误:

Error in twInterfaceObj$doAPICall(cmd, params, "GET", ...) : 
    OAuth authentication is required with Twitter's API v1.1 

我认为registerTwitterOAuth(twitCred)就是在R环境中保存我的验证的细节,但我想我错了。如果我手动执行所有操作,身份验证以及我的twitter抓取工作正常,但我希望最终可以在Linux服务器上自动执行此脚本。

我必须做些什么才能使认证保留在R环境中,以便我可以运行自动脚本?

我在Windows 7 x64机器上运行R v.3.1.1 x64。

回答

1

喜欢的东西:

save(twitCred, file="~/.twitteR_creds") 

然后把它找回来以备将来使用:

load(""~/.twitteR_creds") 
registerTwitterOAuth(twitCred) 

(我用在Linux/OS X ~/.twitteR_creds,但尽量做到在Windows类似的东西所以你的API密钥/信誉说出你可能最终与其他人分享的代码区域

+0

谢谢,hrbrmstr - 它的工作。 – Jason 2014-09-30 09:47:19

0

另外你可能会看到这个:https://stackoverflow.com/a/29505711

除了hrbrmstr建议您在自己的用户文件夹中保存凭据以外的脚本执行工作! ...认为这是'无头'认证:

library(httr) 
options("httr_oauth_cache"=FALSE) 

# 1. Find OAuth settings for twitter: 
# https://dev.twitter.com/docs/auth/oauth 
oauth_endpoints("twitter") 

# 2. Register an application at https://apps.twitter.com/ 
# Make sure to set callback url to "http://127.0.0.1:1410" 
# 
# Replace key and secret below 
myapp <- oauth_app("twitter", 
    key = "fookey", 
    secret = "foosecret" 
) 

# 3. Get OAuth credentials 
access_token="footoken" 
access_secret="footokensecret" 

twitter_token <- 
    Token1.0$new(
    endpoint  = NULL, 
    params  = list(as_header = TRUE), 
    app   = myapp, 
    credentials = list(
     oauth_token = access_token, 
     oauth_token_secret = access_secret 
    ) 
) 


# 4. Use API 
req <- GET("https://api.twitter.com/1.1/statuses/home_timeline.json", 
    config(token = twitter_token)) 
stop_for_status(req) 
content(req)