使用 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)
我正在使用 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)