![]() |
|
Março, 25 2008
How-to: Criar um bot MSN/Jabber Isto não é de todo um how-to, nem entra nos detalhes de como lidar com autorizações, remoções mensagens, roster, etc e tal. É apenas um mini relato (como prometido e para guardar links) de como implementar um bot para MSN (baseada na experiência do serviço de alertas IM do Destakes). Para Jabber não tem muito que saber, é um protocolo aberto e o que não faltam são libs para o fazer. MSN é outro filme... aqui fica a experiência por ordem de tentativas. POE::Component::Client::MSN Nesta caso valeu a pena para rever o POE. A última vez que lhe tinha tocado foi quando o Pedro Melo me "obrigou" a usar-lo para uma coisa no Mail.pt (já nem sei para que foi). Desta maneira ligamo-nos directamente aos servidores do MSN, funcionou tudo muito bem, mas morreu na praia. Se bem me lembro, não conseguia ver quem no roster (lista contactos) estava online, o que deita todo o resto por terra. A certa altura, se bem me lembro, já andava a ler páginas com a descrição do protocolo MSN. E depois, quem pegar neste módulo tem sempre de ultrapassar a learning curve do POE. :-/ Openfre IM Gateway Esta deveria ter sido a primeira escolha. Era óbvia, mas passou-me ao lado. Ao fim ao cabo, o servidor de Jabber do Destakes corre em cima de Openfire. Era instalar o plug-in, ligar lá o bot Jabber e ele passava a falar no MSN. Mesmo código, mesmas features. E foi, point and click... mas morreu na praia também. As autorizações de adição de contacto não chegavam ao outro lado e como é típico nestas "cenas open-source", o developer não tinha tempo para o remendar. PyMSNt Terceira tentativa, sugestão do Pedro Melo. Este gateway encaixa no Openfire, mas tem algumas dependências e foi aí que falhou. Mesmo fazendo upgrade para as últimas versões, inclusive ao Python, o gajo rebentava com uma excepção no Twisted quando tentava ligar-se aos servidores MSN. Foi azar (ou falta de jeito) porque o SAPO usa isto e não parece ter problemas de maior. Como a coisa é Python e nem com as últimas releases ia ao sítio, não lhe dei muito tempo, inclusive porque em conversa com o Delfim, ele saiu-se com uma solução menos trabalhosa (mal sabia eu). Outsourcing (e re-escrever o bot com o Net::XMPP2) A ideia passava por usar o servidor Jabber do SAPO (mais concretamente o transporte) para me ligar ao MSN. Na prática o que faria na solução anterior, mas usando um "servidor alheio" (acho que não se importam). :-> O problema foi quando me tentei ligar lá. O bot funcionava com o Openfire mas não com o servidor do SAPO. Resumia-se a parâmetros na ligação... mas que não tinham solução porque a lib que usei (a primeira que aparece quando se procura por XMPP no CPAN) é outdated e não acompanhou o protocolo, coisa que só descobri depois de lançar o serviço. Como funcionava, nunca liguei. Long story short, toca a re-escrever o bot com a Net::XMPP2. A maioria do código aproveitou-se, grande parte desapareceu (o script foi para metade das linhas) e... ligou-se. Na prática, é uma só instância que se liga aos dois servidores, e apesar do MSN o bot só fala XMPP(jabber), o gateway faz o resto. Para já tem corrido bem. Alguns soluços no início, mas agora parece estabilizado. Esta semana deverá chegar aos 200 contactos (tem 197 contactos com 352 alertas configurados). Hoje, se voltasse a fazer o mesmo, talvez tivesse experimentado a libpurple (descobri-a hoje). What is libpurple? libpurple is intended to be the core of an IM program. When using libpurple, you'll basically be writing a UI for this core chunk of code. Pidgin is a GTK+ frontend to libpurple, Finch is an ncurses frontend, and Adium is a Cocoa frontend. Para quem conhece, é a base do Adium, do Pidgin e do Meebo por exemplo. É escrita em C mas existem bindings para PHP e Perl por exemplo. Have fun. ps: btw, se vão criar um serviço de IM façam-no em Jabber, mas criem um MSN também. Jabber é aberto e tal, mas really... "ninguém o usa" e a diferença no volume de clientela nota-se.
|
|
|||||||||||||||||||||||||||||||
|
não chateiem com os erros de Português... "the bad spelling is part of the charm". ;-) escusado será dizer que as opiniões aqui expressas são minhas e só minhas, e não de outros qualquer outro bitaite... ramblings at karlus.net não, não é powered by MovableType ou Wordpress, é powered by código meu em PHP O conteúdo deste site não poderá ser utilizado sem a sua autorização expressa. As imagens nele contidas são propriedade dos respectivos autores. |