Автоматическая аутентификация httr с помощью twitteR, обеспечивает ответ на интерактивное приглашение в режиме "пакетного"
Я использую пакет 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:
Я могу предоставить эту информацию непосредственно в script, когда функция setup_twitter_oauth() находится вне функции, введя мой ответ в следующей строке, что также можно сделать для других пользовательских функций ввода, таких как readline() или сканирование().
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>
}
Ответы
Ответ 1
Вы можете попробовать установить для параметра 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.
Ответ 2
Это прекрасно работает.
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)
Ответ 3
Я не знаю много об этом.
Но если он в пакетном режиме, попробуйте это:
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
Это просто предложения, потому что я не очень разбираюсь в этой теме, но это может помочь.