Antes de mais nada, este post é dividido em duas partes. Até chegar na versão final da aplicação, passei por algumas alternativas interessantes e achei melhor mostrar como foi esse processo, ao invés de apenas mostrar como ficou a aplicação final.

Estimulado para desenvolver algum projeto que fosse diferente de um HelloWorld e que tivesse um uso, mesmo que de inutilidade, comecei a pensar em algumas possibilidades.

Em redes que acesso, e também no meu trabalho, não tenho acesso ao Twitter, uma das minhas redes sociais preferidas. Conheço pessoas que usam configurações de Proxy para acessar o conteúdo que normalmente seria bloqueado pela política da rede acessada, mas decidi seguir por outro caminho.

O acesso a e-mail é disseminado e liberado em todos os ambientes, seja trabalho, universidade ou colégio, e acessível a todas as pessoas. Pensando nisso decidi desenvolver uma aplicação que rodasse em uma rede com acesso ao Twitter, onde essa aplicação iria ler uma caixa de e-mails, iria ler o campo assunto de cada e-mail(que deveria possuir o perfil a ser acessado), listaria os Twetts e os retornariam na caixa de e-mail que solicitou.

A forma mais fácil de fazer isso seria usando a API do Twitter, que possui um conjunto de webservices definidos para utilização em aplicações de terceiros. Apesar dessa facilidade, decidi realizar uma primeira versão da aplicação lendo os dados diretamente da página HTML.

Iniciei a consulta aos dados da página HTML usando a biblioteca do Jsoup, onde realizava o acesso à página do perfil do twitter (Ex.: http://twitter.com/naosalvo) e a partir dela verificava quais tags compunham os posts dos tweets.

Usei a expressão abaixo para retornar os dados:

O que o Jsoup vai fazer é retornar o texto puro dentro das tags que forem retornadas usando as expressões passadas como parâmetro. Nesse contexto, consegui converter em objeto o texto do tweet e retornar as imagens visíveis em cada um deles. Mas ainda faltavam os vídeos e os Gifs (melhor parte aliás). Abaixo segue o mesmo Tweet, retornado por e-mail e logo em seguida o existente no site do Twitter.

Tweet enviado por e-mail

As imagens e o texto eram simples de serem retornados, porém os vídeos e gifs animados tinham um problema. A página do Twitter exibe os gifs animados como vídeos em formato MP4 (até aí tudo bem), mas eles só são carregados na página, assim como os vídeos, conforme o usuário vai usando o scrolldown, para economizar recursos de requisição à conteúdo e melhorar usabilidade.

A página possuía um javascript que é executado sempre que o trecho da página ficava em evidência, tornando o Jsoup inviável, pelo menos parcialmente, na construção da aplicação que iria fazer o harvesting destas informações. Pesquisa pra lá, pesquisa pra cá, voltei a uma alternativa um pouco grosseira, mas que na maioria dos casos funcionou. Usar o Selenium para realizar scrolldown na página do Twitter e capturar os videos e animações desejadas.

O selenium é uma biblioteca utilizada, entre outras coisas, para automatização de testes funcionais. A grosso modo o selenium Webdriver permite através de diretivas de código, a instanciação de sessões do navegador web, execução de operações na página como preencher campos e clicar em botões e além disso permitia ao desenvolvedor acessar os dados e metadados associados a essa operação. No meu caso eu desejava acessar as tags HTML com os dados dos vídeos preenchidos.

Colocando um pouco mais a mão na massa, adicionei as dependências do selenium no meu projeto usando o maven:

Em seguida, realizei a chamada para instânciar, executar as operações na página e em seguida passar o HTML final de volta para o Jsoup processar. É importante notar que o WebDriver está atuando como um usuário que abre uma janela do navegador, adiciona o endereço e realiza o scroll na página. A partir desse momento o Jsoup começa a agir coletando os vídeos existentes em cada Tweet.

Perceba também que ao final do processo, o WebDriver é chamado novamente com a operação ‘close()‘ que fecha a instância aberta do Browser.

Nesse momento eu tinha um leitor de Tweets analisando qualquer perfil desejado, que apesar do esforço, ainda não funcionava em sua totalidade para retornar os gifs e vídeos. Apesar da tentativa, eu deveria buscar uma luz na API do Twitter.

No próximo post irei compartilhar o projeto e explicar como funcionam o gerenciamento de e-mails (envio e recebimento) e as diretivas de acesso a API do Twitter, o que é preciso e como realizar o acesso usando o Java.
Até lá!

Share Button