Obtener datos de Twitter con R, usando su API

twitter logoPara 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
Credenciales Twitter

Credenciales Twitter

 

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