使用twitteR进行自动httr身份验证,在批量"中提供对交互式提示的响应。模式

时间:2015-01-29 17:56:58

标签: r twitter-oauth batch-processing

我正在使用R包twitteR将项目发布到Twitter。我把所有东西都放在一个函数中,它工作正常。但是,我想在没有提示响应的情况下运行该函数,我还没想出如何做到这一点。有什么建议吗?

以下是我职能的基本内容:

doit <- function(<snip>) {
    <snip>
    # connect to Twitter
    setup_twitter_oauth(api_key, api_secret, access_token, access_token_secret)
    <snip>
    }

当我从命令行运行该功能时,系统会提示我进行交互式响应。

[1] "Using direct authentication"
Use a local file to cache OAuth access credentials between R sessions?
1: Yes
2: No

Selection: 

当setup_twitter_oauth()函数在函数外部时,我可以直接在脚本中提供此信息,方法是在以下行中输入我的响应,这与其他用户输入函数(如readline()或scan)非常相似。 )。

setup_twitter_oauth(api_key, api_secret, access_token, access_token_secret)
1

然而,当setup_twitter_oauth()是函数的INSIDE时,我无法使用这种方法。

我很感激有关如何在不需要用户输入的情况下运行此建议的任何建议。

=====

来自@NicE的答案可以解决问题。我在我的函数中包含了选项设置:

doit <- function(<snip>) {
    <snip>
    # connect to Twitter
    origop <- options("httr_oauth_cache")
    options(httr_oauth_cache=TRUE)
    setup_twitter_oauth(api_key, api_secret, access_token, access_token_secret)
    options(httr_oauth_cache=origop)
    <snip>
    }

3 个答案:

答案 0 :(得分:13)

您可以尝试将httr_oauth_cache选项设置为TRUE:

options(httr_oauth_cache=T)

twitteR软件包使用httr软件包,在该软件包的Token手册页上提供了有关缓存的提示:

OAuth tokens are cached on disk in a file called .httr-oauth 
saved in the current working directory. Caching is enabled if:

The session is interactive, and the user agrees to it, OR

The .httr-oauth file is already present, OR

getOption("httr_oauth_cache") is TRUE

You can suppress caching by setting the httr_oauth_cache option to FALSE.

答案 1 :(得分:0)

这完全没问题。

install.packages("twitteR", dependencies = T)
install.packages(c('ROAuth','RCurl'))
install.packages("httr")
library(httr)
require('ROAuth')
require('RCurl')
library(twitteR)



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

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

authURL <- "https://api.twitter.com/oauth/authorize"

consumerKey <- "XXXXXXXXXXXXX"

consumerSecret <- "XXXXXXXXXXXXXXXXXXXXX"

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

download.file(url="https://curl.haxx.se/ca/cacert.pem", destfile="cacert.pem")

 twitCred$handshake(cainfo="cacert.pem")

  setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret)

答案 2 :(得分:-1)

我对此并不了解。

但如果它是批量的,也许试试这个:

doit <- function(<snip>) {
    <snip>
    # connect to Twitter
    setup_twitter_oauth(api_key, api_secret, access_token, access_token_secret)
    < echo 1
    <snip>
}

您是否尝试在函数外部发布1以查看它是否也一样?

如果你将1置于snip

之下,也许它会奏效

这些只是建议,因为我对这个主题知之甚少,但它可能有所帮助。