我正在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。
答案 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)