Подтвердить что ты не робот

Автоматическая аутентификация 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>
    }
4b9b3361

Ответ 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

Это просто предложения, потому что я не очень разбираюсь в этой теме, но это может помочь.