Para poder obtener datos de Twitter mediante R, se deben seguir una serie de pasos que se detallarán a continuación:
Creación / acceso a Twitter
Es necesario acceder a una cuenta de Twitter en caso de no disponer de ninguna acceder a http://www.twitter.com para crearla.
Una vez dentro, será necesario registrar una aplicación en Twitter, para ello acceder a https://dev.twitter.com/apps y pulsar en «Create new app».
Una vez allí cumplimentar los campos que te solicita. Tener en cuenta que el «Callback URL» puede quedarse vacío y que el «Website» debe ser válido, por ejemplo poner la url de la cuenta personal de twitter.
Una vez finalizado solo queda entrar en la pestaña «keys and Access Tokens» pulsar en el botón de «Generate My Access Token and Token Secret» y copiar los credenciales siguientes:
- consumer_key
- consumer_secret
- access_token
- access_secret
Autenticación de Twitter en R
Ejecutar el siguiente código en R y guardar en un fichero credenciales.R para su posterior utilización
# Instalar las librerías siguientes:
install.packages("ROAuth"); install.packages("base64enc"); install.packages("twitteR"); install.packages("streamR");
# Cargar las librerias:
library("ROAuth"); library("base64enc"); library("twitteR"); library("streamR"); # Cargar parámetros de configuración reqURL <- "https://api.twitter.com/oauth/request_token" accessURL <- "https://api.twitter.com/oauth/access_token" authURL <- "https://api.twitter.com/oauth/authorize" options(httr_oauth_cache=T) # Cargar las credenciales obtenidas del paso anterior consumer_key <- "pegar aquí la credencial" consumer_secret <-"pegar aquí la credencial" access_token <-"pegar aquí la credencial" access_secret <-"pegar aquí la credencial"
# Ejecutar la autenticación de TwitteR setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret) # streamR authentication credentials_file <- "my_oauth.Rdata" if (file.exists(credentials_file)){ load(credentials_file) } else { cred <- OAuthFactory$new(consumerKey = consumer_key, consumerSecret = consumer_secret, requestURL = reqURL, accessURL = accessURL, authURL = authURL) cred$handshake(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")) save(cred, file = credentials_file) }
Extracción de datos de Twitter en R
Las principales formas de obtención de datos que proporciona Twitter son:
REST API
https://dev.twitter.com/rest/public
Realiza búsquedas sobre los tweets, usuarios, timelines y otros muchos objetos.
Responde entregando al usuario el conjunto de tweets u otros objetos que cumplen las condiciones de la pregunta planteada.
Proporciona acceso a tweets de los últimos 6 a 9 días.
# Cargar la librería específica de TwitterR library(twitteR); # Leer el fichero de credenciales creado anteriormente, ¡cuidado con la ruta del fichero!. source('credenciales.R') # Función que permite buscar: #hastag, @usuarios, palabras tweets <- searchTwitter("love", n=10, lang="es") # Quedarse solo con el primer tweet para datos concretos del mismo tweet <- tweets[[1]]; # Mostrar la estructura del tweet str(tweet) # Obtener el texto del tweet: tweet$getText() # Obtener información acerca del usuario: usuario <- getUser(tweet$getScreenName()); # Mostrar la estructura del usuario str(usuario) # Obtener el nombre del usuario usuario$getName()
Streaming API
https://dev.twitter.com/streaming/overview
Permite conectar y filtrar los tweets que se están publicando en tiempo real (en el mismo momento)
Generalmente se deja el proceso funcionando durante un cierto período de tiempo.
# Cargar las librerías específicas library(twitteR); library(streamR); # Leer el fichero de credenciales creado anteriormente source('credenciales.R') # Capturar tweets en el fichero "tweets.json" de los tags "love" y "#data" durante 60 segundos filterStream("tweets.json", track = c("love", "#data"), timeout = 60, oauth = cred); # Cargar el fichero el objeto para poder manipularlo posteriormente tweets <- parseTweets("tweets.json", simplify = TRUE); # Mostrar número de tweets obtenidos de cada tag buscado. show(paste("Numero de tweets con love:", length(grep("love", tweets$text, ignore.case = TRUE)))); show(paste("Numero de tweets con #data:", length(grep("#data", tweets$text, ignore.case = TRUE))));
Fuente: cran.r-project.org
Diego muchas gracias por el articulo. seguí paso a paso pero al correr el proceso de autenticaicon me redirecciona a la pagina de twiter idicandome que debo terminar el proceso de registro y en elcodigo de R me genera el siguiente mensage:
To enable the connection, please direct your web browser to:
https://api.twitter.com/oauth/authorize?oauth_token=LxgubgAAAAAA1qbOAAABXXY79bI
When complete, record the PIN given to you and provide it here:
Error: Authorization Required
te agradezco la colaboracion que me puedas prestar.
Eso es, es necesario que tu te registres y metas las credenciales obtenidas en el shell
Hola no se a que te refieres con credenciales.R me aparece el error
source(‘credenciales.R’)
Error in file(filename, «r», encoding = encoding) :
cannot open the connection
In addition: Warning message:
In file(filename, «r», encoding = encoding) :
cannot open file ‘credenciales.R’: No such file or directory
Hola buenas,
Lo que me refiero con credenciales.R es un fichero que planteo crear con la primera parte del código y que posteriormente se le llama desde source(‘credenciales.R’).
Si te fijas el error que te da es simplemente que no te encuentra ese fichero.
Un saludo
Hola Diego ¿Cómo se crea ese fichero de credenciales? Gracias
Buenas Mika, para crear el fichero de credenciales te recomiendo abrir RStudio, crear un fichero nuevo, copiar el código que te indico y guardarlo con el nombre de «credenciales.R»
Un saludo
Hola! tengo problemas con lookup_users ya que necesito usarla con un usuario que tiene mas de 90000 seguidores(550000 y me sale el siguiente mensaje: Error in twInterfaceObj$doAPICall(paste(«users», «lookup», sep = «/»), :
Forbidden (HTTP 403).
creo que el problema es por el limite de solicitudes que tiene Twitter, como podría solucionarlo, además te comento que ya tengo los los usuarios (es decir los 550000).
Un saludo.
Hola, muchas gracias por la información. Estoy intentando entender el programa pero al seguir tus pasos me sale este mensaje:
«Error in function (type, msg, asError = TRUE) :
Unknown SSL protocol error in connection to api.twitter.com:443 »
Podrías ayudarme a solucionarlo?
Hola, a mí me sale el mismo error. Alguien ha podido solucionarlo?
Yo también tengo el mismo problema. Saludos.
Me pasa lo mismo. Alguien que haya sabido solucionarlo. Gracias por colaborar
Me pasa lo mismo, alguien que lo allá solucionado.
Hola deseo sacar datos de un periodo de 20019 y solo he sacado de los últimos 9 días como lo puedo hacer:gracias de antemano