Obtener datos de Twitter con R, usando su API

por | Nov 17, 2016 | R | 13 Comentarios

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

13 Comentarios

  1. leonardo gonzalez

    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.

    Responder
    • Diego Calvo

      Eso es, es necesario que tu te registres y metas las credenciales obtenidas en el shell

      Responder
  2. HAROLD RENE BARON FRANCO

    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

    Responder
    • Diego Calvo

      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

      Responder
      • Mika

        Hola Diego ¿Cómo se crea ese fichero de credenciales? Gracias

        Responder
        • Diego Calvo

          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

          Responder
  3. Froilan

    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.

    Responder
  4. Iñaki

    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?

    Responder
    • Laura

      Hola, a mí me sale el mismo error. Alguien ha podido solucionarlo?

      Responder
      • Pablo

        Yo también tengo el mismo problema. Saludos.

        Responder
        • David Ortiz Flores

          Me pasa lo mismo. Alguien que haya sabido solucionarlo. Gracias por colaborar

          Responder
          • Angela Josselyn Zambrano Cedeno

            Me pasa lo mismo, alguien que lo allá solucionado.

  5. Rosa Guevara

    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

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada.