Terra Chat Monitor

Terrachat 0.3

Terrachat 0.3

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.

Terra Chat 0.2

Terra Chat Monitor 0.2

É 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:

  • Mostra um ícone sob o número de pessoas na sala, o que melhora um pouquinho seu visual;
  • Recebe a sala e o grupo como parâmetros por linha de comando, ou seja, sem essa de ter que editar o código pra configurar qual a sala desejada;
  • Tem um menu com o botão direito, com a opção de Sair (antes só saia com kill);
  • Se você passa o mouse sobre o ícone na bandeja, ele mostra a sala que está sendo monitorada e quando foi queele atualizou as informações pela útlima vez.

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.

Terra Chat Monitor

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.

O Problema

Comecei a frequentar sala do Chat do Terra. É legal, mas tem alguns problemas para quem acessa fazendo outras coisas.

  • Você não sabe quando alguém entrou no chat, se você estiver em outra janela;
  • Você não sabe quando alguém no chat falou com você.

Claro, isso não é um problema só do serviço de Chat do Terra, mas de todo webchat que eu conheço.

A Idéia

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.

Teoria

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.

Código

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. ;-)

Syndicate content