domingo, 28 de setembro de 2008

Twitando via Skype

Bem pessoal, apesar da utilidade deste projeto ser contestável, creio que é um bom momento para testarmos alguns conceitos.

Afinal de contas, do que estamos falando? Trata-se de um bot que permite fazer uma ponte entre o Skype e o Twitter, dando ao usuário a capacidade de "postar" twits e receber atualizações pelo Skype.

Assim como o Skype, o Twitter também tem suas APIs publicadas (pagina oficial da Twitter API), com boa documentação e alguns exemplos.

Então, para começarmos a brincar, do que nos vamos precisar mesmo?
  • Skype
  • Wrapper Java para Skype (Skype4Java)
  • Wrapper Java para Twitter (jtwitter)
  • JSDK 6+ (Obviamente)
  • Conhecimento prévio da plataforma Java (J2SE,J2EE, etc...)
  • Não é compulsório, mas recomendo a leitura de meu post anterior.
Dentre os várias disponíveis, escolhi o Wrapper jtwitter por sua simplicidade e por não requerer muitos componentes adicionais para ser utilizado.

A grosso modo o negocio funciona da seguinte maneira:




















Toda a sua comunicação ("Skype Cliente") com o Twitter passará por um intermediário ("Skype Servidor"). Ou seja, você (ABC) enviará seus status para um contato especial (XKY) e receberá os "replies" e "direct mensagens" atravez de seu Skype (ABC), originadas deste contato (XKY).

Disponibilizei para download um programa exemplo. Este encontra-se em um estágio "pré-beta", bastante cru, com redundâncias, construções equivocadas e talvez com alguns bugs. Sacrifiquei um pouco as melhores práticas em nome da simplicidade.

Por outro lado, utilizei algumas técnicas interessantes que podem auxiliar aos não iniciados em linguagens orientadas a objeto a entenderem alguns conceitos, como por exemplo, múltiplas linhas de execução (multithreading).


Entendendo o Exemplo


Não vou dissecar todo o programa exemplo, irei comentar somente alguns trechos do código que considero mais relevantes.

No ato da instanciação da classe Twitter, é feita a autenticação no Twitter (via método construtor):
Twitter twitter = new Twitter(sUserName,sPassword);
Este trecho de código é útil para gerar um delay (não vamos sobrecarregar mais ainda o já sobrecarregado Twitter!):
TimeUnit.SECONDS.sleep(iTempo);

O código abaixo serve para obter seu ultimo Status no Twitter:
sStatus = twitter.getStatus(sUserName).text;

Da mesma forma, o trecho abaixo serve para pegar seus "replies" e "direct messages":
lDirect.addAll(twitter.getRecentDirectMessages());
lReplies.addAll(twitter.getReplies());

Na outra thread (classe SkypeStatus) temos um trecho de código um pouco mais complexo:
Skype.addChatMessageListener(new ChatMessageAdapter() {
public void chatMessageReceived(ChatMessage received) throws SkypeException {
String sMsg = "";
Twitter twitter = new Twitter(sUserName,sPassword);

if (received.getType().equals(ChatMessage.Type.SAID)) {
received.getSender().send("Esta mensagem esta sendo Twitada!");
sMsg = received.getContent().toString();
twitter.updateStatus(sMsg);
}
}
});
In few words, este treco ai em cima, adiciona um Listener (grosseiramente traduzido por "escutador"). O dever do Listener é ficar aguardando por requisições do Skype. Neste caso o Listener espera por um "evento" do tipo SAID (o recebimento de uma mensagem de texto).

Como dito antes, talvez não seja fácil encontrar uma aplicação para esta solução. Talvez utiliza-la como uma ponte entre um device que possua um cliente Skype, mas não uma boa interface com o Twitter, ou então Twittar uma "conferencia via Skype". Fica à critério de cada um.

Bem pessoal é isto. Antes que alguém erga as bandeiras da segurança, performance, etc... Lembrem-se que estamos falando de uma prova de conceito com fins puramente didáticos, e não de um programa pronto para produção. Torna-lo melhor fica a cargo de cada um! Aguardo sugestões!

Abraços!

Download do código fonte completo aqui

Nenhum comentário:

Postar um comentário