我正在使用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>
}
答案 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
这些只是建议,因为我对这个主题知之甚少,但它可能有所帮助。