Facebook Manager [ Perl ]

Iniciado por leogtz, 31 Diciembre 2010, 00:45 AM

0 Miembros y 1 Visitante están viendo este tema.

leogtz

Antes que nada, no pretende distribuir este pequeño programa, solo lo pongo a su disposición porque para mi es muy útil, lo desarrollé hace unos días.

Otra de las razones por las que no lo pongo a distribución es porque se necesitan algunos módulos que deberán instalar ustedes. Si no saben instalar módulos yo les enseñaré.

Otra cosa, no corre en Windows, es solo para GNU/Linux, claro que se puede correr sobre Windows, pero es mucho más engorro.

Ah, otra cosa, necesitan instalar fbcmd.




¿Y por qué no hacer todo esto directamente desde facebook.com?
Lo hice porque a veces no quiero entrar a facebook, simplemente quiero poner un status, o ver el estado de alguien
o lo que sea. Aparte si entro a veces me agarran en el chat.

Para que funcione necesitan algunos módulos, Gtk2, Gtk2::GladeXML, entre otros, instalarlos es muy sencillo, yo les
enseñaré como.

INSTALAR MÓDULOS DESDE CPAN

CitarCPAN es el acrónimo de Comprehensive Perl Archive Network. Es un enorme archivo de software escrito en Perl, así como de
documentación sobre el mismo. Tiene presencia en la Web a través de su sitio www.cpan.org y sus 236 mirrors distribuidos
por todo el mundo.

Primero, ingresamos en:
http://search.cpan.org/

Ingresamos el nombre del módulo que queremos instalar. En este caso Gtk2, seleccionamos el primero que sale en la lista.
Al lado derecho sale la imagen del autor, debajo dice "Downloads", descargamos el módulo y lo descomprimimos:

Código (bash) [Seleccionar]
leo@leo-desktop:~/Escritorio/test$ ls -1
Gtk2-1.222.tar.gz
leo@leo-desktop:~/Escritorio/test$ tar zxvf Gtk2-1.222.tar.gz
...
...
...


Nos creará una carpeta:

Código (bash) [Seleccionar]
leo@leo-desktop:~/Escritorio/test$ ls -1
Gtk2-1.222
Gtk2-1.222.tar.gz


Entramos en ella e instalamos de la siguiente manera:

Código (bash) [Seleccionar]
cd Gtk2-1.222/
sudo perl Makefile.PL
sudo make
sudo make test
sudo make install


Y eso es básicamente la instalación de módulos, también podemos hacerlo através de la utilidad cpan:
Código (bash) [Seleccionar]
sudo cpan i /Gtk2-1.222/

Así continuamos con los demás modulos que nos pida instalar.

El programa está desarrollado con glade-e
Instalación:

Código (bash) [Seleccionar]
sudo apt-get install glade

Seguro que les pedirá instalar muchos módulos, así que ¡paciencia!.

Les dejo el código y los archivos necesarios para su funcionamiento:

Código (perl) [Seleccionar]
#!/usr/bin/perl -w
# Leo Gutiérrez R.
# leorocko13@hotmail.com
use strict;
use Gtk2 -init;
use Gtk2::GladeXML;
use 5.010;
use encoding ':locale';
use constant TRUE => 1;
use constant FALSE => !TRUE;

# Variables globales indispensables.
########################################################################

my($programa, $ventana_principal);
$programa = Gtk2::GladeXML->new('hola.glade');
$ventana_principal = $programa->get_widget('window1');
my $ventana_de_estado = $programa->get_widget('ventana_de_estado');
my $ventana_about = $programa->get_widget('about');

# Cargamos los componentes.
$programa->signal_autoconnect_from_package('main');

# La señal para que cuando cierre se CIERRE TODO.
$ventana_principal->signal_connect(destroy => sub
{
Gtk2->main_quit();
}
);

$ventana_de_estado->signal_connect(destroy => sub
{
$ventana_de_estado->hide();
}
);

$ventana_about->signal_connect(destroy => sub
{
$ventana_about->hide();
}
);

# Mostrar todo.
$ventana_principal->resize(520, 570);
$ventana_principal->show_all();
#$ventana_principal->set_resizable(FALSE);

my $user_selected;
my @friends;

########################################################################

# Agregar el combo.
my $combito = $programa->get_widget('combito');
&llenarComboAmigos;
$combito->signal_connect('changed' => \&on_combito_changed);
$combito->set_active(0);

# Agregar los TextBox
my $texto = $programa->get_widget('texto');
my $texto_2 = $programa->get_widget('texto_2');

# Agregar la barra de status
my $status = $programa->get_widget('status');
my $context_id = $status->get_context_id("");

# Agregar la imagen de perfil
my $imagen_perfil = $programa->get_widget('perfil_Image');

# Agregar texto salida de información
my $textoSalida = $programa->get_widget('textoSalida');
my $buffer = $textoSalida->get_buffer();

$ventana_principal->show_all();
Gtk2->main();

sub on_boton_cerrar_clicked
{
  Gtk2->main_quit();
}

sub on_salirFileItem_activate
{
Gtk2->main_quit();
}

sub llenarComboAmigos
{
for(qx|fbcmd friends|)
{
push(@friends, m/^\d+\s+(.*)/);
}
map($combito->append_text($_), sort @friends);
}

sub on_combito_changed
{
my ($cb) = @_;
if($cb->get_active())
{
$user_selected = $cb->get_active_text();
$status->push($context_id, sprintf("Usuario seleccionado : %s", $user_selected));
$buffer->set_text("");
}
}

sub on_texto_activate
{
unless ($user_selected)
{
$status->push($context_id, sprintf("Seleccione un usuario para enviar el mensaje."));
return;
}

my $mensaje = $texto->get_text();
$mensaje =~ s/"/\\"/g;
$mensaje =~ s/`/\\`/g;
$mensaje =~ s/\(/\\(/g;
qx|fbcmd wallpost "$user_selected" "${mensaje}"|;

$status->push($context_id, sprintf("Mensaje publicado en muro de usuario : %s", $user_selected));
}

sub on_texto_2_activate
{
my $mensaje = $texto_2->get_text();
$mensaje =~ s/"/\\"/g;
$mensaje =~ s/`/\\`/g;
$mensaje =~ s/\(/\\(/g;
qx|fbcmd status "${mensaje}"|;
$status->push($context_id, sprintf("Status cambiado"));
}

sub on_verImagenDePerfil_activate
{
unless ($user_selected)
{
$status->push($context_id, sprintf("Seleccione un usuario de la lista."));
return;
}

qx|fbcmd ppics "$user_selected" . "-pf=[tname].jpg" -ppsize=1|;
$imagen_perfil->set_from_file("$user_selected" . ".jpg");
unlink("$user_selected" . ".jpg") or warn("No se pudo borrar el archivo \"${user_selected}.jpg\"");

}

# Ventana de estado

sub on_verEstado_activate
{
unless ($user_selected)
{
$status->push($context_id, sprintf("Seleccione un usuario de la lista."));
return;
}

my $vbox = Gtk2::VBox->new(FALSE, 5);

my $frame = Gtk2::Frame->new("Amigo - Estado");
$frame->set_border_width(5);

my $sw = Gtk2::ScrolledWindow->new (undef, undef);
   $sw->set_shadow_type ('etched-out');
$sw->set_policy ('automatic', 'automatic');
$sw->set_size_request (600, 100);
$sw->set_border_width(5);

my $tview = Gtk2::TextView->new();
  my $buffer = $tview->get_buffer();
my $s = &getStatus();
$buffer->set_text($s);

$sw->add($tview);
$frame->add($sw);
$vbox->pack_start($frame,TRUE,TRUE,4);
$vbox->show_all();
$ventana_de_estado->add($vbox);

$ventana_de_estado->show();

}

sub getStatus
{
my $s = qx|fbcmd fstatus "$user_selected"|;

my($status) = $s =~ m/^$user_selected\s+(.*)/gims;
#$status =~ s/\s{22}(.*)/\n$1/gi;
#$status =~ s/^(\s+)(.*)/$2/gim;

return $s;

}

sub getPresence
{
my($s) = qx(fbcmd finfo online_presence "${user_selected}") =~ m/(active|offline)$/;
return $s;
}

sub on_verPresencia_activate
{
$buffer->set_text("Presencia : " . &getPresence());
}

sub on_aboutFileItem_activate
{
$ventana_about->run();
$ventana_about->hide();
}


Archivos:
http://rapidshare.com/files/440038591/facebook_manager.rar
http://www.megaupload.com/?d=BZQBNEVS

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com