如何在shiny应用程序中保存Twitter身份验证凭据以供重复使用?

3

我是新手,对于R和Shiny还不熟悉。

我试图创建一个简单的shiny应用程序,从twitter api中提取与搜索词相关的推文。在R Studio中,为了访问推特api,我运行以下身份验证代码:

> consumer_key<-'value1'
>consumer_secret<-'value2'
> access_token<-'value3'
> access_secret<-'value4'
> setup_twitter_oauth(consumer_key, consumer_secret, access_token,access_secret)

只有在上面四行执行后,我才能执行下面所示的实际搜索

tweets<-searchTwitter(search_term,n=input_number, since=start_date, until=end_date, lang='en')

( 也就是说,searchTwitter() 函数中变量的所有值都来自用户)

是否有一种方法可以保存认证凭据,以便应用程序始终在线(运行),并在进行搜索时加载凭据。

谢谢。


setup_twitter_oauth() 函数返回什么?是 token 吗?如果是的话,你可以跨会话缓存它。请参考 httr 包中的 ?Token - sckott
1
谢谢你的回复。它打开了一个连接到应用程序并验证了身份凭据。在使用httr之前设置Twitter_oauth()之前,我曾经这样做。获取curl证书library(twitteR) library(ROAuth) library(RCurl) - kRazzy R
1
下载curl证书并保存。`download.file(url="http://curl.haxx.se/ca/cacert.pem",destfile="cacert.pem")为Twitter设置认证

设置常量requestURL

requestURL <- "https://api.twitter.com/oauth/request_token"

设置常量accessURL

accessURL <- "https://api.twitter.com/oauth/access_token"

设置常量authURL

authURL <- "https://api.twitter.com/oauth/authorize" consumerKey <- "xxxxxxxxxxxxxxxxxx" consumerSecret <- "xxxxxxxxxxxxxxxxxx"`
- kRazzy R
1
#在这里,我们通过调用OAuthFactory函数创建授权对象twitCred <- OAuthFactory$new(consumerKey=consumerKey, consumerSecret=consumerSecret, requestURL=requestURL, accessURL=accessURL, authURL=authURL)保存和使用证书连接到Twitter#请求访问 twitCred$handshake(cainfo="cacert.pem")为了启用连接,我会将浏览器指向: https://api.twitter.com/oauth/authorize?oauth_token=xxxx - kRazzy R
1
#完成后,我记录给定的PIN并提供它:xxxxxxregisterTwitterOAuth(twitCred)#将其保存以备将来使用,通过下载Cred文件到文件夹中save(list="twitCred", file="twitteR_credentials")#确保当前工作目录中有cacert.perm和twitteR_credentials文件。library (twitteR)

加载所需的包:ROAuth

加载所需的包:RCurl

加载所需的包:bitops

加载所需的包:digest

加载所需的包:rjson

load("twitteR_credentials") registerTwitterOAuth(twitCred)
- kRazzy R
这里我将凭据保存到文件中,并确保它们可以被重用。我想知道需要进行哪些更改,以便我可以通过当前的 setup_twitter_oauth() 方式实现与上一步相同的操作。 - kRazzy R
1个回答

3

这可能不是最好的方式,但是

setup_twitter_oauth(consumer_key = "yourkey", consumer_secret = "yoursecret")
token <- get("oauth_token", twitteR:::oauth_cache)
token

提供
<Token>
<oauth_endpoint>
 request:   https://api.twitter.com/oauth/request_token
 authorize: https://api.twitter.com/oauth/authenticate
 access:    https://api.twitter.com/oauth/access_token
<oauth_app> twitter
  key:    xxxx
  secret: <hidden>
<credentials> oauth_token, oauth_token_secret, user_id, screen_name, x_auth_expires
---

然后将其缓存。
token$cache()

2
嗨,斯科特。我按照你的建议保存了它们。我如何实际加载它们(凭据),以便R使用它们。除了您的回答之外, 我还执行了以下操作token$cache() save(token,file="oauth_cache.RData") 'load("oauth_cache.Rdata").onLoad<-function(libname,pkgname){ cachedToken<-new.env() dataFile <- system.file("data/oauth_cache.RData", package="packageName") load(dataFile, cachedToken) assign("oauth_token", cachedToken$local_cache, envir=twitteR:::oauth_cache) rm(cachedToken) } - kRazzy R
2
是的,没有出现任何错误,所以我认为按照你建议的方式保存身份验证凭据是有效的。那么我该如何在我的闪亮应用程序中加载它们/调用这些已保存的凭据,以便我可以查询 Twitter API 获取推文呢? - kRazzy R
我不太了解Shiny的具体情况,但是我想你可以用readRDS或load等函数来加载缓存文件,然后像你所做的那样使用 assign() - sckott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接