

#' Para conectarse con la API de twitter, 
#' es necesario obtener las credenciales para acceder.
#' Se puede consultar cómo en
#' https://developer.twitter.com/en/apps
#' La cuenta gratuita tiene limitaciones en 
#' la información que se puede extraer.

# dependencias ------------------------------------------------------------

# Para la ejecución de los códigos, necesitamos instalar paquetes.
# En R, los paquetes son colecciones de funciones previamente programadas.

# Una vez instalados los paquetes es necesario cargarlos en memoria
# con la función library(). 
# Esto cargará todas las funciones del paquete en la memoria del ordenador.
# Si solamente se va a utilizar una función del paquete, 
# no es necesario cargar el paquete entero y se puede acceder 
# directamente a la función como nombrepaquete::nombrefuncion()
# Por ejemplo twitteR::searchTwitter()
# Tenemos que tener localizada previamente el directorio de nuestro PC en el que nos encontramos
getwd()
library(twitteR)
library(tidyverse)
library(tm)
library(stringr)

# api keys ----------------------------------------------------------------

# Se especifican las credenciales para iniciar la conexión
# con la API de twitter
consumer_key <- "taSf6mDb0aXmOJS6BFAj8SfK5"
consumer_secret <- "75ha6sZFQtf0veBaFrfddr50mPhUnaI23I1kdhN4UKLGNA0kd"

access_token <- "301077466-oSrzOyWJVHTkLPWCprjXe1l9zSTpMR0ynwANpYC"
access_secret <- "6RQUprWbeeEBwc7Za7SsryymN0y99ti7cgM7uAYD9gIx"


setup_twitter_oauth(consumer_key, 
                    consumer_secret,
                    access_token,
                    access_secret
)


# download data -----------------------------------------------------------

# Se descargan tweets especificando unos criterios de búsqueda
# Para ello se utiliza la función searchTwitter 
# del paquete twitteR

# Para conocer en detalle el funcionamiento de esta función
# puedes escribir ?searchTwitter en la consola
# para obtener la ayuda.

# spanish
tw_es <- twitteR::searchTwitter(
  # los términos de búsqueda se separan con +
  searchString = 'Andorra', 
  
  n = 6000, 
  
  since = '2021-01-28', 
  until = '2021-02-28',
  
  # idioma de los tweets
  lang = "es"
) 

# Por defecto, la función anterior
# devuelve los tweets como una lista.
# El manejo de la información se vuelve
# más sencillo si los datos están en 
# un formato tabla (en R se denomina data frame).
# El paquete twitteR tiene la función
# twListToDF para convertir los tweets a data frame.
tw_es <- twListToDF(tw_es)


# La función as_tibble convierte a un tipo de data frame especial
# que facilita la visualización de los datos en la consola.
tw_es <- as_tibble(tw_es)

# La extracción de los tweets contiene información que no es relevante
# para el estudio que queremos hacer. 
# Por ejemplo, los usuarios comparten enlaces a páginas web.
# En una limpieza básica de los datos, es necesario eliminar esta información.

# Algo muy útil es utilizar expresiones regulares 
# que permite encontrar patrones en cadenas de caracteres.
# https://en.wikipedia.org/wiki/Regular_expression
#
# Por ejemplo, la expresión regular "http\\S+\\s*"
# significa, encuentra la parte del texto que
# empieza por http, continuan caracteres 
# (a excepción de un espacio en blanco) 
# y termina con un espacio en blanco, /, o tabulador.
# Es decir, estamos buscando partes del texto que
# sean una url.

tw_es <- mutate(tw_es,
                text = stringr::str_remove(text, "[\n]"),
                text = stringr::str_remove(text, "http\\S+\\s*")
)




# english
# Repetimos el mismo procedimiento para tweets en inglés.
tw_en <- twitteR::searchTwitter('coronavirus', 
                                n = 6000, 
                                since = '2021-01-28', 
                                until = '2021-02-28',
                                lang = "en") %>% 
  twListToDF() %>% 
  as_tibble() %>% 
  mutate(text = stringr::str_remove(text, "[\n]"),
         text = stringr::str_remove(text, "http\\S+\\s*")
  )

# Nota:
# en las líneas anteriores, en vez de hacerlo paso a paso
# como hicimos en castellano, hemos utilizado %>% (operador pipe)
# que es capaz de encadenar varias sentencias en una sola.
# Es una forma más compacta de hacerlo y puede ayudar
# a hacer el código más conciso y expresivo.


# save data ---------------------------------------------------------------

# Dadas las limitaciones de la API,
# no podemos estar haciendo una nueva extracción
# cada vez que necesitamos utilizar los datos.
# Además, R trabaja en memoria, es decir que
# si cerramos la sesión, perderemos todo lo que 
# tengamos cargado en ese momento.
# 
# Así que, lo habitual es hacer la extracción,
# una limpieza básica de los tweets como la 
# que hemos hecho con la url 
# y almacenar la información en el disco duro
# para poder utilizarla cuando la necesitemos.

# Si vamos a trabajar posteriormente con R,
# lo ideal es guardarlo en .RDS un formato
# binario específico de R que es fácil de cargar.
saveRDS(tw_es, "coronavirus_es.RDS")

saveRDS(tw_en, "coronavirus_en.RDS")


