使用 twitteR 自动进行 httr 身份验证,以 "batch" 模式提供对交互式提示的响应

Automated httr authentication with twitteR , provide response to interactive prompt in "batch" mode

我正在使用 R 包 twitteR 将 post 项目发送到 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() 位于函数内部时,我无法使用这种方法。

如有任何关于如何在不需要用户输入的情况下将此设置为 运行 的建议,我将不胜感激。

=====

下面@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>
    }

我不是很了解

但如果是批量处理,也许可以试试这个:

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

下,也许它会起作用

这些只是建议,因为我对这个话题不是很了解,但它可能会有所帮助。

您可以尝试将 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.

这很好用。

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)