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.
Eu já fiz bots para MSN, mas usando uma library em Python que ligava directamente ao MSN. Acabei por corrigir uma coisa ou outra para funcionar, mas era bem simples :) por Alcides a 25 Março 2008 - 20:02
bot
eu sou um desses 197, até agora estou a gostar muito desse serviço, parabens! por Bruno a 25 Março 2008 - 20:11
Jabber.. eu uso :)
Sim é certo que pouca a gente o usa, mas é porque desconhecem. Se calhar até uma questão de "moda". Quem é que não teve uma conta no ICQ muito antes do MSN?? por José Gaspar a 25 Março 2008 - 21:19
Blogmaster
Tem 32 anos, é natural de Vila Nova de Famalicão mas mora no Porto desde que veio para a universidade... bem, morou. Agora já casado, está pela Maia. Anda pela internet há já uns 12 anos tendo trabalhado em vários projectos como foram o caso do Mail.pt ou no Sapo. Nos tempos livres vai tendo tempo para fazer umas brincadeiras, entre as quais o ITJobs o Lusocast o Hispanocast ou o Destakes
De resto já bloga há uns 7 anos apesar de ter perdido parte da "vida" numa mudança de hosting provider. Algumas restias ainda por aí andam... ah, e o email de contacto está no footer. Btw... job offers are welcome!
android's app.store http://tinyurl.com/5qmxts 29, Aug - 03:08 lionel richie rulling at obama's thing 29, Aug - 02:08 @vd 7syntax blog rss feed is all screwd 29, Aug - 02:08 back from @godevel dinner... my throat hurts 29, Aug - 02:08 @alcides advice: never quote me on an argument with PQ. he will never agree no matter what. bonus points if the argument is about blogs ... 29, Aug - 02:08 Heading to @godevel dinner... 28, Aug - 21:08 headline of the day "Acidentes de tractor já mataram nove pessoas este ano" 28, Aug - 19:08 francesinha later :-> 28, Aug - 19:08
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 ou da empresa onde trabalho
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.