Para extraer información de los candidatos en Facebook vamos a usar el paquete Rfacebook. Además tenemos que activar nuestra API de Facebook, que podemos activar desde Facebook Developpers. Luego para autenticar la aplicación en R, la opción más fácil es usar un token temporal que podemos obtener desde el Graph API Explorer. Es importante, que este token dura tan solo dos horas, por lo que es necesario actualizarlo cuando se vence.
Lo primero es instalar y cargar los paquetes que vamos a utilizar, y guardar nuestro token en un objeto de R.
#instalar los paquetes
install.packages("Rfacebook")
install.packages("tidyr")
install.packages("dplyr")
install.packages("ggplot2")
#Cargar los paquetes
library(ggplot2)
library(tidyr)
library(dplyr)
library(Rfacebook)
#Guardar nuestro token en un objeto de R
token <- "NUESTRO TOKEN"
Primero vamos a extraer información de las páginas públicas de los candidatos. Para ello vamos a utilizar la función getPage(), que nos permite extraer la lista de posts de la página, la fecha en la que fueron publicados y la cantidad de likes, shares y comments que tuvieron. Los argumentos de la función serían:
"nombre de la página" , por ejemplo “FabricioAlvaradoPresidente”token, el token que guardamos anteriormente en un objeton, el número de posts que queremos extraer; lo ideal es poner un número alto, aunque Facebook tiene un límitesince y until, esto los usamos si queremos extraer datos de un periodo en específico. Si no los ponemos, se extraerán todos los posts hasta alcanzar el límite máximo.Por ejemplo, si queremos extraer los posts de la página de Fabricio Alvarado del 1 de enero del 2017 al 15 de enero de 2018, el comando sería así:
getPage("nombre de la página", token, n = 5000, since='2017/01/01', until='2018/12/15')
Ahora vamos a hacer esto para todos los candidatos, y guardar la información en objetos:
#Fabricio
fabriciop <- getPage("FabricioAlvaradoPresidente", token, n = 5000, since='2017/01/01', until='2018/12/15')
#Juan Diego
juandip <- getPage("juandiegocastrocr", token, n = 5000, since='2017/01/01', until='2018/12/15')
#Desanti
desantip<- getPage("alvarezdesanti", token, n = 5000, since='2017/01/01', until='2018/12/15')
#Carlos Alvarado
carlosp<- getPage("carlosalvaradoquesada", token, n = 5000, since='2017/01/01', until='2018/12/15')
#Piza
pizap<- getPage("RodolfoPizaR", token, n = 5000, since='2017/01/01', until='2018/12/15')
#Edgardo Araya
edgardop<- getPage("EdgardoArayaFA", token, n = 5000, since='2017/01/01', until='2018/12/15')
##Rodolfo Hernandez
hernandezp<- getPage("DrHernandez.CR", token, n = 5000, since='2017/01/01', until='2018/12/15')
Podemos explorar los datos, con la función glimpse. Todas las bases de datos tienen las mismas variables.
glimpse(juandip)
## Observations: 829
## Variables: 11
## $ from_id <chr> "105896236141807", "105896236141807", "10589623...
## $ from_name <chr> "Juan Diego Castro Fernández", "Juan Diego Cast...
## $ message <chr> "Por 30 años los gobernantes nos dijeron que sa...
## $ created_time <chr> "2018-01-15T20:54:05+0000", "2018-01-15T17:30:2...
## $ type <chr> "photo", "photo", "photo", "video", "photo", "p...
## $ link <chr> "https://www.facebook.com/juandiegocastrocr/pho...
## $ id <chr> "105896236141807_1653940424670706", "1058962361...
## $ story <chr> NA, NA, NA, NA, "Juan Diego Castro Fernández ad...
## $ likes_count <dbl> 50, 478, 230, 1320, 693, 600, 640, 564, 389, 55...
## $ comments_count <dbl> 6, 86, 41, 249, 160, 64, 178, 158, 50, 56, 108,...
## $ shares_count <dbl> 10, 113, 43, 458, 144, 159, 148, 189, 62, 71, 1...
Para extraer comentarios de un post, podemos usar la función getPost, y lo que tenemos que introducir como argumento es el id del post y seleccionar si queremos likes y comments (para ello ponemos TRUE o FALSE):
getPost(post_id, token, n = 1000, likes = TRUE, comments = TRUE)
Como ejemplo podemos extraer el post con más interacción de Fabricio Alvarado.
#Extraer comentarios: ejemplo, post más famoso de Fabricio
post<-getPost("167533350116993_848210418715946", token, n = 1000, likes = TRUE, comments = T)
#Lo convertimos en dataframe
post<-as.data.frame(post)