2014-09-26 32 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)