
A nova versão do terrachat não tem nenhuma novidade em termos de funcionalidade. A única mudança é que agora estou utilizando o LWP::UserAgent para baixar a página ao invés de fazer chamada ao wget. Ou seja, se você conseguir instalar essa parafernália de módulos em outro Sistema Operacional, o terrachat agora tem ótimas chances de funcionar.
Ah, ele pode servir de base pra outros projetos similares também. De repente alguém aí quer um monitor de salas do chat do UOL ou um monitor de resultados das loterias, sei lá... :-P Não tem muitos comentários, mas o código é bem enxuto. E qualquer coisa, se quiserem mexer no código, podem colocar dúvidas por aqui no Cyaneus mesmo.

É realmente uma pena que só funcione de maneira simples em GNU/Linux...
Vocês se lembram do monitor de presenças nas salas de chat do Terra, que fiz em Perl há muuuuito tempo? Bem, hoje fiz algumas mudanças graças ao código de um software a que tive acesso e usei como exemplo.
O novo Terra Chat tem algumas novidades:
Tem alguns ajustes que ainda podem ser feitos, mas pra mim já está bem satisfatório.
O programa que usei como base foi o PerlGtk AdSense Checker, que infelizmente não funcionou aqui para o que se propunha.
Sobre o Terra Chat não funcionar em Windows, talvez não seja bem assim... O Khaoz comentou recentemente que existe o Strawberry Perl, uma versão Software Livre do Perl para Windows, que tem inclusive CPAN. Enfim, se alguém estiver disposto a testar o TerraChat nele, fico muito agradecido com qualquer feedback resultante.
CPAN é mesmo uma maravilha... Quem programa em Perl é abençoado com uma ótima ferramenta de instalação de recursos para usar em seus programas... Sempre me admiro com o CPAN.
Antes de mais nada, este artigo é um tanto técnico. Para quem programa soluções simples para o dia-a-dia. Programa no sentido de criação de código-fonte mesmo.
Comecei a frequentar sala do Chat do Terra. É legal, mas tem alguns problemas para quem acessa fazendo outras coisas.
Claro, isso não é um problema só do serviço de Chat do Terra, mas de todo webchat que eu conheço.
Resolvi o primeiro problema em algumas horas. O segundo é mais complicado...
A idéia é bem simples: sabe a bandeja? Também chamada de System Tray? Onde ficam o Gaim e outros programinhas quando abertos? Isso, a bandeja. Criar um programa que entre no Terra e veja quantas pessoas tem na sua sala favorita e então colocar na bandeja.
O projeto é o seguinte. No Chat do Terra tem uma página que lista as salas e diz quantas pessoas têm em cada sala naquele momento. Criamos um código que pegue essa página e extraia esse número dela.
Vamos supor que você goste de Astronomia. O chat de Astronomia fica na sessão Diversos.
Se você vir o código deste arquivo, notará que há um Select de onde podemos pegar facilmente esta informação.

Assim, a estratégia é fazer download desse arquivo, filtrar especificamente este select e então atualizar o ícone na bandeja. Isso deve ocorrer a cada 25s, por exemplo.
Para o código funcionar, você deve instalar o suporte a Gtk2::TrayIcon, Event e Glib::Event. Instalei isso tudo via CPAN, com o comando *cpan* para chamar o shell e comandos install para instalar isso efetivamente. Lembrando que usei Debian GNU/Linux, versão Sarge.
#!/usr/bin/perl
use Gtk2::TrayIcon;
use Glib::Event;
use Event;
# any order Gtk2->init;
Aqui você coloca a página onde está a sala de chat que te interessa.
my $terra_page = "diversos.htm";
Este código funciona só no Terra, mas para facilitar adaptações, uma variável com o endereço do servidor é um bom começo...
my $terra_server = "http://chat.terra.com.br:9781";
Aqui você coloca o nome exato da sala, com todos os espaços e maiúsculos que tem direito.
my $terra_room = "Arte";
my $icon= Gtk2::TrayIcon->new("test");
my $label= Gtk2::Label->new("#");
$icon->add($label);
$icon->show_all;
Este código é que faz o principal: pegar o arquivo e verificar quantas pessoas tem na sala de tempos em tempos. Aqui, a cada 25 segundos.
Event->timer (after => 1, interval => 25, cb => sub {
Se já houver arquivo, ele é apagado.
if ( -f $terra_page ) {
`rm $terra_page`;
}
Estou usando o wget para pegar o arquivo. Ele tem que estar instalado, portanto.
`wget $terra_server/$terra_page &> /dev/null`;
open(FILE, "< $terra_page");
$num = "#";
Esta é a sessão que pega mesmo o número de pessoas no arquivo. Parece complicado mas é bem simples. Nem usa tanta expressão regular quanto deveria... (daria pra fazer isso em bem menos linhas)
foreach $line() {
if ($line =~ /$terra_room\ \ \ /) {
@aux1 = split(/\(/, $line);
@aux2 = split(/\)/, $aux1[1]);
$num = int($aux2[0]);
}
}
close(FILE);
Aqui a gente atualiza o mostrador na bandeja.
$label->set_label($num);
});
Gtk2->main;
Pronto! E aqui está o resultado, no WindowMaker! Não é legal?!

P.S.: Este artigo foi publicado inicialmente em 5 de maio de 2006, no Bardo, e foi transferido para o Cyaneus. A única mudança que fiz foi trocar a sala de exemplo, já que a sala apresentada inicialmente simplesmente não existe mais. Claro que faltam algumas coisas: um dockicon, um menu de contexto, coisas do tipo. Como não tem mais utilidade para mim, se você souber implementar esses recursos e se interessar em fazê-lo, esteja à vontade para me enviar o resultado do trabalho, para que eu divulgue aqui. ;-)
Comentários recentes
5 semanas 4 dias atrás
20 semanas 1 dia atrás
20 semanas 6 dias atrás
21 semanas 3 dias atrás
29 semanas 5 dias atrás
34 semanas 6 dias atrás
37 semanas 3 dias atrás
37 semanas 5 dias atrás
37 semanas 5 dias atrás
42 semanas 6 dias atrás