Departamento de Informática Coleta de Informações do Twitter para Persistência em Banco de Dados: Pesquisas de Opinião e Análise Sentimental Aluno: Maria Beatriz Ribeiro Vaz Orientador: Sérgio Lifschitz Introdução Há uma grande quantidade de informação na internet, porém uma parte significativa desses dados não está em formatos bem estruturados de onde seria fácil extrair informações específicas. Entre os diversos serviços, websites e redes sociais, podemos destacar o Twitter como uma ótima ferramenta para as mais diversas pesquisas. Trata-se de um micro-blog onde as mensagens (tweets) são escritas de forma a passar o máximo de informação com o mínimo de caracteres – no máximo 140 caracteres de cada vez. São publicados cerca de 500.000.000 tweets por dia, ou seja, uma grande fonte de dados para buscas e avaliação qualitativas. Neste trabalho realizamos um estudo para capturar as mensagens publicadas no Twitter sobre um determinado assunto ou hashtag e transferi-las para um posterior processamento em sistema de banco de dados. A ideia é facilitar as pesquisas que se baseiam em informações do site, dada a amplitude de participação tanto popular como de mídias tradicionais. Já se admite utilizar o Twitter como ferramenta de pesquisa de opinião confiável e mais rápida. Em particular, este projeto é uma cooperação com um trabalho de pesquisa do Departamento de Comunicação da PUC-Rio que, por meio de uma análise sentimental de tweets que se referem a determinado assunto, pretende avaliar e qualificar os tweets quanto a serem pró ou contra tal assunto. Especificamente, foram coletados tweets do 2º turno das eleições 2014 que permitiram identificar claramente perfis pró-Dilma ou pró-Aécio a partir das mídias sociais. Objetivos Desenvolver um sistema de banco de dados que, através de um site colaborativo, permita ao usuário escolher um assunto para filtrar tweets em um período de tempo e, em seguida, acessar dados, relatórios e gráficos a partir de uma interface web. Também deseja-se obter planilhas com todos os tweets referentes às características fornecidas para posterior manipulação offline. Disponibilizar um programa baseado na web que colete as mensagens desejadas do twitter, atuais ou de períodos já passados, as transfira para um banco de dados devidamente estruturado e facilitar o acesso de usuários especialistas ou leigos na interpretação das informações exibidas. Metodologia Utilizando a API do Twitter Com o objetivo de incentivar o desenvolvimento de aplicativos que utilizem o Twitter, incentivando ainda mais seu uso e abrangência, existe uma interface de programação de aplicações (API - Application Programming Interface) própria para desenvolvedores interessados nesta rede social. Uma API é composta por uma série de funções acessíveis somente por códigos de programas ou aplicativos que não precisam envolver-se em detalhes da implementação do software, mas apenas usar seus serviços. API do Twitter é composta por um conjunto de Web Services, uma solução de software utilizada na integração de sistemas e na comunicação entre aplicações diferentes, baseados na arquitetura REST [1]. Através da API do Twitter realizamos consultas para obter tweets com a Departamento de Informática hashtag #eleicoes2014 de até 1 semana antes da data corrente e obtemos a resposta em um formato específico (JSON), útil para troca de dados [2]. Através desta API foi possível coletar e armazenar em um banco de dados gerenciado pelo PostgreSQL diversos tweets, em uma taxa de aproximadamente 2 tweets por segundo. No caso, os dados capturados de cada tweet para esta pesquisa específica foram: nome do usuário que publicou o tweet e o texto publicado, a data no formato timestamp (dia e hora) e o número de retweets daquele tweet (dado este que não pôde ser validado). Outros dados importantes como número de pessoas que consideraram aquele tweet como favorito, a quantidade de seguidores da pessoa que publicou o tweet ou mesmo se a conta é verificada (por exemplo, se é de alguma pessoa conhecida ou famosa), também poderiam ter sido obtidos de maneira similar. Diversos serviços são fornecidos pela API, entre eles escrever e ler um tweet (o que usamos para a captura dos tweets com #eleicoes2014). Muitos desses serviços necessitam de autenticação e autorização por parte do usuário. Em ambas as etapas, é utilizado o protocolo OAuth. Trata-se de um padrão aberto que permite aos usuários de um site garantirem acesso, por uma aplicação externa, aos seus recursos privados sem a necessidade de compartilhar suas senhas e logins. Para isso, o protocolo OAuth estipula um fluxo de comunicação entre a aplicação solicitante (no caso a desenvolvida para coleta de tweets) e a aplicação servidora (no caso o Twitter). O fluxo de comunicação ocorre em três etapas básicas: obtenção do token de requisição; autenticação e autorização pelo usuário e obtenção do token de acesso. Os tokens são únicos para cada sessão e expiram se não forem usados após um determinado tempo. Em nosso caso particular, o programa que utiliza a API foi escrito na linguagem Python, devido à facilidade de comunicação com a mesma, e possui apenas 56 linhas de código. Na programação foi implementada a biblioteca TWEEPY para a conexão com a referida API [3]. Podem ser realizadas pesquisas avançadas através das consultas, definindo exatamente o que se deseja obter como resultado (por exemplo, tweets contendo uma certa palavra ou uma dada hashtag, data, etc.). Para isso, a consulta é realizada com o método API.search que possui vários parâmetros de acordo com o que desejamos extrair de cada tweet [4]. Foi utilizado como ambiente de execução dos nossos programas uma máquina com processador Intel Core i7 com 8GB de memória RAM, 500GB de disco e sistema operacional Windows 8. O programa se conecta com um banco de dados PostgreSQL e todo os resultados obtidos nas consultas são nele armazenados. Assim criamos nossa coleção de dados ou tweets interessantes. O SGBD (Sistema Gerenciador de Bancos de Dados) PostgreSQL implementa um modelo de dados relacional estendido. Na cooperação com o Departamento de Comunicação, temos no banco de dados para esta pesquisa específica algo como 200 mil tuplas distintas referenciando os dados filtrados pelo tag das eleições no período escolhido. Os resultados obtidos pelas ferramentas computacionais desenvolvidas neste projeto foram publicados no trabalho "Opinião pública e comunicação política em #Eleições2014: Uma análise preliminar” onde participamos como autores junto ao autor principal, o Professor Arthur Ituassu do Departamento de Comunicação Social da PUC-Rio [5], apresentado ao Grupo de Trabalho (GT) Comunicação e Política no XXIV Encontro Anual da Associação Nacional dos Programas de Pós-Graduação em Comunicação (Compós), na Universidade de Brasília (UnB), de 9 a 12 de junho de 2015. Além deste evento importante na área, uma versão estendida do artigo está aceita e será publicada na Revista E-Compós (Qualis B1). Também foram estudados modelos de bancos de dados alternativos ao banco de dados relacional, que implementam o modelo NoSQL (Not Only SQL). A ideia foi analisar o armazenamento dos tweets de forma a otimizar o sistema. O objetivo seria implementar e persistir os dados também em um banco NoSQL e comparar os resultados obtidos com os já obtidos com o modelo relacional. Esta parte do trabalho não foi implementada. Departamento de Informática Utilizando um programa do tipo WebCrawler Cabe observar que, para a coleta de dados mais antigos, a API do Twitter não permite o acesso. Assim, optou-se por um método complementar para a coleta destes outros tweets. Particularmente, foi desenvolvido também em Python um código que funciona como um crawler para navegação de páginas web. WebCrawler pode ser denifido em português como rastreador web. É um programa de computador que navega pela World Wide Web de uma forma metódica e automatizada, ou seja, basicamente captura toda a informação contida em uma url especificada para poder filtrarmos os dados desejados em nosso programa posteriormente. No nosso caso, passamos como parâmetro para o crawler uma página do Twitter resultado da pesquisa que queremos, gerada através da busca avançada (Advanced Search) do próprio site [6]. Utilizando a biblioteca de programas BeautifulSoup específica para Python [7], transferem-se todos seus dados para o programa, onde é feita uma filtragem das informações desejadas para posterior transferência para o banco de dados optado por nós, o PostgreSQL. Assim, torna-se viável a coleta de tweets antigos (há mais de uma semana da data corrente) já que, embora não liberados via API, estas informações são visíveis se pesquisarmos no site do Twitter através de uma busca avançada, mencionada anteriormente, definindo o intervalo de tempo entre outras informações. Para o maior aproveitamento das informações devemos nos adaptar ao formato de disponibilização das informações da url desejada. No caso do Twitter, quando acessamos o resultado da busca avançada devemos descer a página até o final para carregarmos mais tweets, até chegar ao fim da pesquisa. Assim, foi necessário usar a biblioteca Selenium [8] que possui uma ferramenta Scroller que justamente realiza essa tarefa de descer uma url até o final e assim garantirmos total aproveitamento dos tweets fornecidos. O programa WebCrawler é mais complexo que o programa de coletas via API, contando com 4 módulos que interagem entre si [8]. A princípio o programa foi rodado em uma máquina com processador Intel Core i7 com 8GB de memória RAM, 500GB de disco e sistema operacional Windows 8 e foi usado como webdriver para o crawler o Firefox. Porém, para planos futuros de criar um site colaborativo que executasse o programa foi preciso realizar algumas adaptações para o programa rodar no servidor como, por exemplo, trocar o webdriver Firefox por um webdriver Headless, ou seja, que execute sem uma interface gráfica com o usuário. Assim, escolhemos utilizar o PhantomJS [9], um headless webdriver para Windows. Felizmente, a troca do webdriver resultou em uma melhoria exponencial do desempenho do programa em relação tempo total de execução. Implementação do site colaborativo Para total autonomia do cliente, foi pensado em desenvolver um site colaborativo tal que pudesse ser definido uma busca de intervalo recomendável de até uma semana e fosse lhe devolvido por e-mail uma planilha com as seguintes informações de cada tweet recolhido: nome, usuário, texto do tweet, data e hora. O site se baseia na busca avançada do Twitter para começar a pesquisa e, a partir da url gerada, executa o WebCrawler obtendo os dados desejados. Para acessá-lo basta entrar no link http://104.237.129.216/twitter_crawler_web/, acessar a aba “Contate-nos” e pedir um cadastro que permite iniciar o agendamento das buscas. Departamento de Informática É importante observar que a data definida na busca avançada deve ser a mesma definida no site colaborativo para perfeito funcionamento do programa. Conclusões O estudo teórico para implementação do projeto permitiu que fosse desenvolvido um programa que executasse o objetivo com sucesso e, consequentemente, um site colaborativo para interação com usuário e automatização do processo. Foram estudadas diversas formas de coletar os dados da web, novas linguagens de programação e distintos bancos de dados, tanto os relacionais, como os não relacionais. Referências 1 - http://pt.wikipedia.org/wiki/REST 2 - http://json.org/ 3 - http://www.tweepy.org/ 4 - https://dev.twitter.com/rest/reference/get/search/tweets 5 - http://compos.org.br/biblioteca/final_comautoria_2782.pdf 6 - https://twitter.com/search-advanced 7 - https://pypi.python.org/pypi/BeautifulSoup 8 - https://github.com/biavaz/webcrawler_twitter 9 - http://phantomjs.org/