使用twitteR软件包自动进行身份验证

时间:2014-09-26 18:25:17

标签: r twitter

我正在R中运行Twitter情绪分析,并按照twitteR包中的示例设置OAuth参数,如下所示:

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。

2 个答案:

答案 0 :(得分:1)

类似的东西:

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

然后将其取回以备将来使用:

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

(我在linux / OS X上使用~/.twitteR_creds,但尝试在Windows上执行类似操作,因此您的API密钥/信用证说明了您可能最终与其他人共享的代码区域。

答案 1 :(得分: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)