Integrando o R com o seu Facebook

Fala galera! A ideia deste post é mostrar como interagir com o Facebook através do R usando o pacote RFacebook.

O pacote permite a interação do R com o Facebook usando uma chave de autenticação, chamada Token, que é fornecida ao criar um aplicativo do Facebook. Esta chave tem duração de 2 horas e pode ser renovada sempre que precisar. É importante lembrar que este Token é para usar em tempo de desenvolvimento, quando quiser colocar o aplicativo para produção, você deve buscar outra forma de autenticação do seu aplicativo no Facebook, uma que não expire em 2 horas. Neste post, como tem o objetivo de mostrar a integração, o Token de desenvolvimento é suficiente.

Criando o aplicativo no Facebook

Você precisa de uma conta válida no Facebook. Ao se conectar ao Facebook, vá até o link: https://developers.facebook.com/apps

Ao acessar o link de desenvolvimento do Facebook, clique no botão para adicionar um novo aplicativo.

Vai abrir uma tela perguntando o nome do App, informe um nome do seu app.

Após, clique no botão para gerar o ID do aplicativo. Para questões de segurança você deve informar o captcha e pronto.

Algumas vezes é necessário que a extensão de login do facebook seja habilitada.

Para garantir, habilite esta extensão. Neste nosso exemplo, informe que será um login por WWW. Ao abrir a soliticação de qual endereço do site, informe: http://localhost:1410/. Para este nosso exemplo muitas vezes não pede esta autenticação, mas já deixe habilitado para caso precise. Pode salvar esta alteração.

Em seguida, acesse a URL: https://developers.facebook.com/tools/explorer/ para pegar o Token temporário (aquele de 2h de duração).

Caso você mantenha esta tela aberta por mais de 2hs, uma mensagem informando que o Token expirou é apresentada.

Pronto, com isso, seu aplicativo do Facebook está disponível.

Começando o desenvolvimento com o R

Para integrar, será usado o pacote RFacebook criado por Pablo Barbera (pablo.barbera@nyu.edu).

Instale e inicie o pacote, para isso, pode usar os códigos abaixo:

#Instalação do pacote

install.packages("Rfacebook")

#Carregamento do pacote

library(Rfacebook)

Também faça o armazenamento do token de acesso em uma variável. Volte até o aplicativo que você criou, vá até a URL que gera o Token, e copie o valor. Para colocar em uma variável, faça a atribuição como a linha de código abaixo:

appToken <- 'SEU_TOKEN_DE_ACESSO'

Para garantir que o acesso está funcionando, pode-se testar o retorno de alguma função. Neste caso, usaremos a função GetUsers que retorna os dados de perfil de um usuário específico. Praticamente todas funções exige que seja passado o token de acesso. Esta função não é diferente, veja abaixo como retornar os dados de um usuário.

eu <- getUsers("me", token = appToken)

eu$name

O resultado desta execução retorna o perfil de quem foi solicitado. O termo “me” retorna o perfil de quem está definido como criador do App no Facebook. Você pode passar outro ID de usuário e então os dados do perfil será retornado. Dentre a lista de atributos que retornaram, é possível retornar o nome utilizando o código $name.

Também é possível retornar a lista de páginas que foi curtida por um usuário. A função GetLikes permite isso. O código abaixo apresenta a lista de nomes das páginas que o perfil “me” curtiu.

meuslikes <- getLikes("me", token=appToken)

meuslikes$names

Uma forma de retornar as interações de uma página específica é usar a função GetPage. Esta função recebe alguns parâmetros para retornar os dados necessários, no exemplo passaremos três paramentos, sendo o nome da página que já foi armazenado na variável nomePagina; a quantidade de elementos a serem retornados, mantido na variável Quantidade e por fim o já utilizado token de acesso.

nomePagina <- "NGRSolutions"

Quantidade <- 10

pagina <- getPage(page = nomePagina, token = appToken, n = Quantidade)

Se observar a estrutura do objeto pagina, que armazena o retorno da função GetPage, é possível encontrar diversos atributos da página retornada. Para acessar esta estrutura, uma forma é chamar a função str() passando o objeto que quer consultar como parâmetro. Veja o código abaixo.

str(pagina)

Repare os atributos marcados em amarelo na imagem abaixo, cada um deles retorna uma lista de valores sobre aquela pagina retornada.

Para seguir com o experimento que estamos propondo, vamos retornar um valor do atributo id, que é responsável pelo id do post. Neste exato momento, o elemento número 5 do retorno é específico de um post que publicamos há alguns dias sobre uma promoção e gerou algumas interações. A escolha dele é justamente para podermos coletar retornos desta postagem. Para reutilizar o código desta publicação, ela será armazenada na variável codigoPost, como segue o código abaixo.

codigoPost <- pagina$id[5]

Um novo elemento que pode-se usar para interagir com o Facebook é o retorno de detalhes de um post, utilizando a função GetPost. Esta função recebe os parâmetros como o código do post que está interessado em ter os detalhes e também o token. O resultado será armazenado na variável postagem, e esta variável possui uma estrutura, seguindo a mesma linha que fizemos com o objeto pagina.

postagem <- getPost(post = codigoPost, token = appToken)

Inclusive é possível, também, saber a quantidade das reações de interação com o post. Para isso, use a função GetReactions, como o código abaixo.

reacoes <- getReactions(post = codigoPost, token = appToken)

Seguindo com o propósito inicial, vamos retornar o nome de todos as pessoas que curtiram o post. Assim pode-se pegar o nome e o id de todos os que curtiram. A partir do ID, pode-se retornar à primeira função que vimos lá em cima, e retornar os detalhes daquele perfil… Ao retornar o atributo likes do objeto postagem, todos os elementos que curtiram a postagem são retornados. Neste caso, para trabalhar em forma mais tranquila, converte-se a estrutura de likes em um dataframe. Para facilitar ainda mais, vamos atribuir os nomes das colunas do dataframe em Nome e ID, para ter o objeto todosNomes com duas colunas internas, sendo a Nome e a Id. Veja o código abaixo.

todosNomes <- as.data.frame(postagem$likes)

colnames(todosNomes) <- c('Nome','Id')

A função RunIF retorna valores aleatórios entre um intervalo mínimo e máximo, e utilizando esta função, é possível retornar um valor qualquer entre 1 e o número de pessoas que comentaram o post. Como também quero retornar apenas 1 nome deste retorno, vou usar a função head() que retorna os primeiros registros de um dataframe. Ao passar por parâmetro os dados para “sortear” e a quantidade de retorno sendo 1, a função head() devolve um único número aleatório válido. Ao buscar este número dentro do dataframe todosNomes criados no passo anterior, é possível saber o nome de quem foi escolhido. Para retornar o ID do sorteado, pode-se pesquisas pelo nome diretamente no dataframe. Veja o código abaixo:

nomeAleatorio <- todosNomes[head(as.integer(runif(todosNomes$Nome, 1, nrow(todosNomes))), 1), 'Nome']

idAleatorio <- todosNomes[(todosNomes$Nome == nomeAleatorio),'Id']

Para encerrar o experimento deste artigo, vamos usar o método updateStatus, que faz a postagem no Facebook. Este método recebe os parâmetros text, token e link. Sendo o text a mensagem a ser publicada, o token como já vimos e por fim, o link, como sendo uma URL para compartilhar junto ao post. Veja o código abaixo esta atualização no Facebook.

updateStatus(text = 'Postagem no Facebook através do R. Li em um post no blog Think Think SQL.', token = appToken, link = 'https://diegonogare.net/2017/07/integrando-o-r-com-o-seu-facebook/')

Agora abra o facebook e veja esta publicação em seu perfil. Parabéns e obrigado por compartilhar!

Hah, porque mostrei como retornar os nomes de quem curtiu e acabei não usando no post?? Usei o nome para fazer o sorteio, também usei para postar no facebook o nome do vencedor. Faça seus experimentos, inclusive subi no github o código com esta utilização. Caso queira, o código em R funcionando, e você pode ver aqui!

Por fim, caso não tenha visto o Github ainda, neste post falei como usar o Github.

Sobre Diego Nogare 350 Artigos
Diego Nogare é Gerente Técnico de Engenharia de Machine Learning no Itaú-Unibanco. Também é professor em programas de pós graduação no Mackenzie e na FIAP, em São Paulo. Foi nomeado como Microsoft MVP por 11 anos seguidos, e hoje faz parte do programa Microsoft Regional Director.