Clase 6 - APIs
Objetivos de Aprendizaje
Definir y explicar como funcionan las API.
Identificar al menos 3 formatos en los que las API devuelven su informacion.
Ejercitar el acceso y consumo de informacion de APIs de diferentes plataformas.
Slides
Programacion en vivo (Live Coding)
Accediendo a la API de Twitter
Esta clase fue realizada previo a la venta de Twitter y su rebranding a X. Me retire de esa red social debido a lo que esta ocurriendo. X es un lugar hostil. Recomiendo NO usarla para dar clases de ningun tipo.
Existe un paquete llamado rtoot que permite acceder a Mastodon y se podria realizar una clase similar. Dejo el ejemplo con rtweet porque las ideas son aplicables a cualquier red social.
Este live coding utiliza el paquete rtweet
y como ejemplo la cuenta de la docente. Se puede seleccionar cualquier cuenta de esa red social para poder realizar el ejercicio.
Cargamos los paquetes que vamos a necesitar.
library(tidyverse)
library(tidytext)
library(rtweet)
Autenticandonos
auth_setup_default()
Obteniendo info de un usuario
<- get_followers("yabellini")
seguidores
<- lookup_users(c(seguidores$from_id))
data_usuario
<- get_friends("yabellini") amigues
Obtener los ultimos tweets
<- get_timeline("yabellini", n = 500)
tweets
<- get_favorites("yabellini", n = 20) tweets_favoritos
Uniendo los conceptos APIs y Textminig
<- tweets %>%
solo_texto select(text) %>%
unnest_tokens(palabras, text)
<- tibble(palabras = tm::stopwords(kind = "es"))
stopwords_es
<- tibble(palabras = tm::stopwords(kind = "en"))
stopwords_en
<- solo_texto %>%
st_sinsw anti_join(stopwords_es) %>%
anti_join(stopwords_en)
<- st_sinsw %>%
resumen count(palabras) %>%
filter(palabras !%in% c("rt", "https")
Accediendo a la API de Conftool
Usamos la plataforma ConfTool para useR!2021, una de las grandes ventajas fue la API con la cual podiamos acceder a todos los datos almacenados en la plataforma.
Este ejemplo nos permite generar un mapa con el pais de todas las personas que se registraron a la conferencia.
Antes de iniciar con el live coding, se hace una desmotracion de la plataforma y como se ve la misma como un administrador y como se llaman las diferentes vistas, consultas y conjuntos de datos diponibles y que se pueden acceder desde la API.
Cargamos todos los paquetes que necesitamos
library(tidyverse)
library(rnaturalearth)
library(viridis)
library(ggthemes)
Definimos funciones y variables para acceder a la plataforma
<- "Aca va el password"
pph
<- function(nonce) {
pass <- as.integer(Sys.time())
nonce <- digest::digest(paste0(nonce, pph), algo = "sha256", serialize = FALSE)
passhash list(nonce = nonce,
passhash = passhash)
}
<- function(query) {
query_conftool <- c(pass(), as.list(query))
query <- "https://www.conftool.org/user2021/rest.php"
url <- tempfile(fileext = ".csv")
file <- httr::GET(url,
r query = query,
::write_disk(file))
httr
file }
Ahora consultamos los datos
<- list(page = "adminExport",
by_event export_select = "event_participants",
form_include_deleted = 0,
cmd_create_export = "true",
form_export_format = "csv_comma",
form_export_header = "default",
form_export_events_options = "extended") %>%
query_conftool() %>%
::fread() data.table
Contamos por país
<- by_event %>%
countries select(personID, country) %>%
unique() %>%
as_tibble() %>%
group_by(country) %>%
count()
Generamos el Mapa y guardamos los datos
<- countries %>%
countries drop_na() %>%
mutate(country = case_when(
== 'Palestinian Territories' ~ 'Palestine',
country == 'Dominican Republic' ~ 'Dominican Rep.',
country == 'Czech Republic' ~ 'Czech Rep.',
country == 'South Korea' ~ 'Republic of Korea',
country == "Côte d'Ivoire" ~ "Côte d'Ivoire",
country TRUE ~ country))
<- ne_countries(scale = "medium", returnclass = "sf")
mapa
<- mapa %>%
mapa left_join(countries, by = c("brk_name" = "country"))
ggplot() +
geom_sf(data = mapa, alpha = 1, aes(fill = n), color = "gray88", size = 0.01) +
scale_fill_viridis(
trans = "log",
breaks = scales::log_breaks(),
direction = 1,
name="Registered")+
labs(
title = "People registered to useR! 2021",
subtitle = paste0("We reached ", nrow(countries)-1, " countries - ", Sys.Date()),
caption = "Data: useR! Conftool | Made with <3 by Yani Bellini Saibene | https://user2021.r-project.org/"
+
) theme_map() +
theme(legend.position = "bottom") +
coord_sf(ylim = c(-55, 90), expand = FALSE)
ggsave("countries.png", dpi = 300, width = 10, height = 6)
write_csv(countries, "countries.csv")
Ejercicios
Ejercicio 1. Obteniendo API Keys
Duración: ~20 minutos
Miren el siguiente video sobre API y contesten en grupo las preguntas:
Video 1: https://www.youtube.com/watch?v=YzAm7hGCxZY
1) Pregunta: ¿Los pasos para obtener el acceso a la API son complejos?
2) Pregunta: Durante las materias de esta primera parte de la diplomatura ¿habían usado APIs?, ¿cuáles?, ¿habían sacado API Keys? ¿Cuáles?
3) Pregunta: googlen como sacar una api key de facebook y seleccionen de los resultados algún video, ¿qué pasa si cambian de aplicación, por ejemplo: spotify o instagram o alguna otra aplicación que ustedes quieran ver. ¿Es difícil conseguir instrucciones?
Ejercicio 2. Accediendo a la API de Twitter desde R
Completa los espacios en blanco para poder resolver los siguientes ejercicios en R utilizando la API de Twitter.
library(_________) #para poder usar el pipe y filtrar y graficar
library(_________) #para poder hacer text mining
library(_________) #para poder usar twitter
Autenticarse
Utilizar el siguiente código para autenticarte en twitter y poder utilizar la API. Necesitas tener una cuenta en twitter.
auth_setup_default()
Recuperar los datos
Obtener los seguidores de la cuenta y a que usuarios la cuenta sigue.
<- get________("____________")
seguidores
<- get________("____________") amigues
Recuperar tweets
Recuperar los últimos 1000 tweets
<- get___________("___________", n = _____________) tmls
Recuperar los últimos 1000 favoritos
<- get_________(__________, ____________) favs
Hacer text minig sobre los tweets
Primero obtener solo el texto de los tweet del timeline
<- tmls %>%
texto_tweets select(full_text) %>%
______________(palabras, full_text)
Ahora hacer lo mismo pero con los favoritos
<- ________ %>%
texto_favoritos __________(____________) %>%
______________(palabras, __________)
Tenemos que remover las stopwords. Revisar bien que idiomas trabaja la cuenta para filtrar todas las stopwords necesarias
<- tibble(palabras = tm::stopwords(kind = "es"))
stopwords <- tibble(palabras = tm::stopwords(kind = "en"))
stopwords_en
<- texto_tweets %>%
texto_sin_stopwords anti_join(___________) %>%
anti_join(___________)
Ahora hay que hacer lo mismo para los favoritos
<- ____________ %>%
favoritos_sin_stopwords ____________(___________) %>%
____________(___________)
Ahora calculamos las frecuencias
<- texto_sin_stopwords %>%
resumen_tw _________(palabras) %>%
summarise(cantidad = n()) %>%
_________(desc(cantidad))
Y hacemos el mismo cálculo para favoritos
<- _____________ %>%
resumen_favoritos _________(palabras) %>%
_________(cantidad = n()) %>%
_________(________(cantidad))
Gráficos
Hacemos un gráfico de barras para el texto de los tweets
# Aqui tu codigo para realizar el gráfico de barras
Hacemos una nube de palabras para el texto de los favoritos
# Aqui tu codigo para hacer la nnube de palabras
Ejercicio 3. Analizando un ejemplo de la API de Meetup
Lee este articulo de blog explicando como se accede a la API de Meetup para obtener los datos de los titulos de los eventos de R-Ladies.
Replica el codigo con los datos actualizados.