automatically answer a selection in R [duplicate] - r

I am using the R package twitteR to post items to Twitter. I put everything inside of a function and it works fine. However, I would like to run the function without being prompted for a response, and I haven't figured out how to do that. Any suggestions?
Here are the bare bones of my function:
doit <- function(<snip>) {
<snip>
# connect to Twitter
setup_twitter_oauth(api_key, api_secret, access_token, access_token_secret)
<snip>
}
When I run the function from the command line, I am prompted for an interactive response.
[1] "Using direct authentication"
Use a local file to cache OAuth access credentials between R sessions?
1: Yes
2: No
Selection:
I can provide this information directly in a script when the setup_twitter_oauth() function is outside of a function, by entering my response in the following line, much like can be done for other user input functions like readline() or scan().
setup_twitter_oauth(api_key, api_secret, access_token, access_token_secret)
1
However, I haven't been able to get this approach to work when setup_twitter_oauth() is INSIDE of a function.
I would appreciate any suggestions on how to get this to run without requiring user input.
=====
The answer from #NicE below did the trick. I incorporated the options setting in my function as:
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>
}

You can try setting the httr_oauth_cache option to TRUE:
options(httr_oauth_cache=T)
The twitteR package uses the httr package, on the Token manual page for that package they give tips about caching:
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.

This works perfectly fine.
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)

I don't know much about it.
But if it's in batch, maybe try this:
doit <- function(<snip>) {
<snip>
# connect to Twitter
setup_twitter_oauth(api_key, api_secret, access_token, access_token_secret)
< echo 1
<snip>
}
Also have you tried posting the 1 outside the function to see if it does the same?
And maybe it will work if you put the 1 under the snip
These are just suggestions, cause i don't know very much about the topic, but it might help though.

Related

TwitteR scraping with R error, fixing ideas?

I'm a bit desperate with my problem as I checked all the existing sources and nothing worked for me.
The issue:
I'm trying to scrape twitter with R in Rstudio, I'm on the very first stage of auth with API keys:
library(twitteR)
library(ROAuth)
library(openssl)
library(httpuv)
library(devtools)
origop <- options("httr_oauth_cache")
options(httr_oauth_cache = TRUE)
api_key <- "*****"
api_secret <- "******"
access_token <- "*****"
access_secret <- "******"
setup_twitter_oauth(api_key, api_secret, access_token, access_secret)
I'm using keys with essential access, v2 access level (which in theory shouldn't be the reason for the bug, but who knows?..)
This code gives the error:
Error in check_twitter_oauth() : OAuth authentication error:
This most likely means that you have incorrectly called setup_twitter_oauth()'
What I tried:
1. Restarting the session after installing the packages
2. Fixing httr bug by running:
library(devtools)
devtools::install_version("httr", version="0.6.0", repos="http://cran.us.r-project.org")
3. Fixing possible compatibility issue by running:
devtools::install_github("jrowen/twitteR", ref = "oauth_httr_1_0")
4. running all of the above, restarting R and even restarting the laptop 3 times.
5. Checked my firewall - it's off.
6. Checked my default browser and being logged in in it into twitter - done.
7. Tried re-generating my access keys and re-running all of the above - didn't help.
I don't know what else to try, does anybody have any idea how to fix this issue?
Thanks a million in advance!
Aright, so after some checking here's the solution (if anybody ever needs it):
use library (rtweet)
apply and get approved for elevated access. That was definitely the problem that didn't let me go ahead.

rtweet - Warning: 32 - Could not authenticate you

I notice a few people have encountered issues with rtweet authorization. I followed this vignette which assumes people are familiar with authentication protocols. Newbies such as myself, struggle with this.
vignette("auth", package = "rtweet")`
I stored all keys and tokens in my .Renviron file. This is the code I use to access keys and tokens:
require(rtweet)
require(httpuv)
api_key <- Sys.getenv("TWITTER")
api_secret_key <- Sys.getenv("TWITTER_SECRET")
access_token <- Sys.getenv("ACCESS_TOKEN")
access_token_secret <- Sys.getenv("ACCESS_SECRET")
I then create a token using this code:
token <- create_token(
app = "my_app",
consumer_key = api_key,
consumer_secret = api_secret_key,
access_token = access_token,
access_secret = access_token_secret)
Next, I check if a token has been created:
get_token()
I get this response:
<Token>
<oauth_endpoint>
request: https://api.twitter.com/oauth/request_token
authorize: https://api.twitter.com/oauth/authenticate
access: https://api.twitter.com/oauth/access_token
<oauth_app> my_app
key: XXXXXXXXXXXXXXXXXXXX
secret: <hidden>
<credentials> oauth_token, oauth_token_secret
---
I restarted R and run a query as follows:
tweet_data <- search_tweets("#plasticrecycling",
n = 2000,
include_rts = F,
lang = "en")
And end up with this error:
Warning: 32 - Could not authenticate you.
Warning message:
Could not authenticate you.
Can someone please explain why this is happening? A similar issue was reported here https://github.com/ropensci/rtweet/issues/439 but it was closed without a clear answer. I am not sure if create_token() is a once-off thing or must be initiated each time I use R. I notice this added to my .Renviron file:
TWITTER_PAT=/Users/bob/.rtweet_token.rds
Thanks in advance.
Loading the latest development version of rtweet solves the problem I was encountering:
remotes::install_github("rOpenSci/rtweet")
packageVersion("rtweet")
[1] ‘0.7.0.9026’
This version makes it easier to authenticate things.
auth <- rtweet_app(bearer_token = Sys.getenv("BEARER_TOKEN"))
auth_save(auth, "my_app")
auth_list()
[1] "my_app"
auth_as(auth = "my_app")
tweets <- search_tweets("#plasticrecycling",
include_rts = F,
n = 1000,
lang = "en")
One only has to run the rtweet_app() once and then save the output. Every time one restarts R and loads a Twitter script, one simply has to execute auth_as(auth = "your_app")
I was confused by OAuth1.0 versus OAuth2.0 on the Twitter API page. It also did not help reading the wrong online manual pages for a different version of rtweet!
Kudos to llrs for helping me resolve my issue.

RTweet OAuth Error in Configuration

I know literally zero about the R programming language and have come to an impasse where I am truly and utterly stuck.
I've borrowed lots of other peoples code and have been busy debugging placing in additional libraries that are not contained within the help text of the packages to get to a point I feel is tantalisingly close.
That said I simply cannot get R to correctly authorise a twitter search or OAuth Connection.
I run my code, it throws up the following error screen.
Alongside that in the R-Compiler the error message of
twitCred$handshake() To enable the connection, please direct your web
browser to:
http://api.twitter.com/oauth/authorize?oauth_token=r4VjQQAAAAAA4-K7AAABYlMXEws
When complete, record the PIN given to you and provide it here:
registerTwitterOAuth(twitCred) Error: Forbidden
I read that there can be issues with the call back if the weblinks within the code do not read https:// and are left with http:// so that has been amended accordingly to no avail.
My twitter settings are as follows
I followed the advice laid down in this thread but it didn't seem to help or I did something I wasn't supposed to.... StackOverflow Support Article
So here is my code please shout if you can see the obvious to you not to me error or can offer some advice.
## install devtools package if it's not already
if (!requireNamespace("devtools", quietly = TRUE)) {
install.packages("devtools")
}
## install dev version of rtweet from github
devtools::install_github("mkearney/rtweet")
## load rtweet package
library(rtweet)
install.packages("rtweet")
install.packages("RCurl")
install.packages("tm")
install.packages("wordcloud")
install.packages("httpuv")
install.packages(c('ROAuth','RCurl'))
install.packages("rjson")
install.packages("bit64")
install.packages("httr")
require(twitteR)
require(RCurl)
require(tm)
require(wordcloud)
require(httpuv)
require(rtweet)
require(ROAuth)
require(RCurl)
require(rjson)
require(bit64)
require(httr)
## CURL LOGIC ##
reqURL <- "https://api.twitter.com/oauth/request_token"
accessURL <- "https://api.twitter.com/oauth/access_token"
authURL <- "https://api.twitter.com/oauth/authorize"
api_key <- "AAAAAAA"
consumer_key <- "AAAAAAA"
consumerKey <- "AAAAAAA"
consumerSecret <- "AAAAAAA"
twitCred <- OAuthFactory$new(consumerKey=consumerKey,
access_token <- "AAAAAAA"
access_token_secret <- "AAAAAAAAAA"
consumerSecret=consumerSecret,
requestURL=reqURL,
accessURL=accessURL,
authURL=authURL)
twitCred$handshake()
registerTwitterOAuth(twitCred)
##################
The duplications of API keys are meant to be there as I have tried so many connection advice threads and am lost now on the hows whys and wherefores...
You can use the twitteR package for data mining Twitter.
Please find the below code for your reference.
install.packages('twitteR')
install.packages('ROAuth')
install.packages("RCurl")
library(twitteR)
require("ROAuth")
require("RCurl")
download.file(url="http://curl.haxx.se/ca/cacert.pem",destfile="cacert.pem")
t_consumer_key<- 'YOUR CONSUMER KEY'
t_consumer_secret<- 'YOUR CONSUMER SECRET KEY'
t_access_token<- 'YOUR ACCESS TOKEN'
t_access_secret <- 'YOUR ACCESS SECRET'
setup_twitter_oauth(t_consumer_key,t_consumer_secret,t_access_token,t_access_secret)
list <- searchTwitter("iphone")
If you click on the link in below image you will get all the API keys

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

I am using the R package twitteR to post items to Twitter. I put everything inside of a function and it works fine. However, I would like to run the function without being prompted for a response, and I haven't figured out how to do that. Any suggestions?
Here are the bare bones of my function:
doit <- function(<snip>) {
<snip>
# connect to Twitter
setup_twitter_oauth(api_key, api_secret, access_token, access_token_secret)
<snip>
}
When I run the function from the command line, I am prompted for an interactive response.
[1] "Using direct authentication"
Use a local file to cache OAuth access credentials between R sessions?
1: Yes
2: No
Selection:
I can provide this information directly in a script when the setup_twitter_oauth() function is outside of a function, by entering my response in the following line, much like can be done for other user input functions like readline() or scan().
setup_twitter_oauth(api_key, api_secret, access_token, access_token_secret)
1
However, I haven't been able to get this approach to work when setup_twitter_oauth() is INSIDE of a function.
I would appreciate any suggestions on how to get this to run without requiring user input.
=====
The answer from #NicE below did the trick. I incorporated the options setting in my function as:
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>
}
You can try setting the httr_oauth_cache option to TRUE:
options(httr_oauth_cache=T)
The twitteR package uses the httr package, on the Token manual page for that package they give tips about caching:
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.
This works perfectly fine.
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)
I don't know much about it.
But if it's in batch, maybe try this:
doit <- function(<snip>) {
<snip>
# connect to Twitter
setup_twitter_oauth(api_key, api_secret, access_token, access_token_secret)
< echo 1
<snip>
}
Also have you tried posting the 1 outside the function to see if it does the same?
And maybe it will work if you put the 1 under the snip
These are just suggestions, cause i don't know very much about the topic, but it might help though.

OAUTH issues with twitteR package

I am using R and want to use the twitteR package available on CRAN.
I installed the twitteR package using:
install.packages(twitteR)
then loaded the package with:
library(twitteR)
after that I wanted to run the first command to get the latest trends on twitter with:
getTrends(period="weekly")
which showed following error:
Error in getTrends(period = "weekly") :
argument "woeid" is missing, with no default
Also the command:
searchTwitter("#orms")
showed an error, namely:
Error in twInterfaceObj$doAPICall(cmd, params, "GET", ...) :
OAuth authentication is required with Twitter's API v1.1
And also for the command:
userTimeline("informs")
there was an error output:
Error in twInterfaceObj$doAPICall(cmd, params, method, ...) :
OAuth authentication is required with Twitter's API v1.1
What is the reason for that? From my research so far I figured out, it has something to do with oauth. But actually I don't know, what oauth is, and how to configure it, so I can properly use the twitteR package.
Could please anybody provide me some help for this issue??
Thank you very much in advance for your support.
With best regards!!!
1/ You'll need to load ROAuth, which is a dependency of twitteR. See the twitter CRAN docs. http://cran.r-project.org/web/packages/twitteR/twitteR.pdf
Depends: ... ROAuth (>= 0.9.3) ...
2/ You'll need to authenticate as per the below. See pg12 of the twitteR CRAN docs:
## A real example, but using a fictitious consumerkey and consumer
## secret - you’ll need to supply your own
reqURL <- "https://api.twitter.com/oauth/request_token"
accessURL <- "http://api.twitter.com/oauth/access_token"
authURL <- "http://api.twitter.com/oauth/authorize"
consumerKey <- "12345pqrst6789ABCD"
consumerSecret <- "abcd1234EFGH5678ijkl0987MNOP6543qrst21"
twitCred <- OAuthFactory$new(consumerKey=consumerKey,
consumerSecret=consumerSecret,
requestURL=reqURL,
accessURL=accessURL,
authURL=authURL)
twitCred$handshake()
registerTwitterOAuth(twitCred)
In general, you should try to search error messages over the CRAN docs of your package - the answer will often be self-contained.

Resources