Mostrando entradas con la etiqueta PERL. Mostrar todas las entradas
Mostrando entradas con la etiqueta PERL. Mostrar todas las entradas

jueves, 5 de julio de 2012

Enviando Correos con PERL usando SMTP de Gmail (Windows & LINUX)

Dejando un poco de lado a Twitter, buscábamos agregar un modulo para un proyecto para enviar correos, ya tenemos uno, pero al utilizarlo para conectarse al servidor SMTP de gmail, simplemente no funcionaba. Tan fácil como buscar en google, hay muchas bibliotecas para hacerlo, el problema es que para el servidor que se va a utilizar la versión de PERL es la 5.8 o 5.10, y para estas versiones las bibliotecas de ActivePerl para windows solo soportan las versiones 5.14 >
Por eso este post menciona la forma de hacerlo en Windows con un PERL 5.8 y con LINUX usando PERL 5.14.

Vamos con la primera forma de hacerlo con LINUX:

Para esto podemos usar la biblioteca Email::Send::Gmail
en su página de CPAN podemos encontrar un ejemplo de como usarlo.

=======================================================================


#!/usr/bin/perl

use strict;
use Email::Simple;
use Email::Simple::Creator;
use Email::Send;
use Email::Send::Gmail;

send_mail();
print "mensaje enviado";

sub send_mail {

my $usuario = 'tucorreo@gmail.com';
my $password = 'tupassword';

#Creamos el correo, a quien va dirigido, de quien, el asunto y el mensaje
my $email = Email::Simple->create(
    header => [
        To => 'JuanPerez@gmail.com',
        From => $usuario,
        Subject => 'Probando 123',
        ],
    body => "Prueba desde LINUX",
    );

#Aquí especificamos que usara a Gmail como servidor SMTP
my $sender = Email::Send->new(
{    mailer => 'Gmail',
    mailer_args =>[
        username => $usuario,
        password => $password,
        ]
}
);
$sender->send($email);


}

=========================================================================

Hasta aquí todo bien, pero en windows usando PERL 5.8 no está la biblioteca, entonces hurgando un poco en su código, podemos ver como funciona esta, nos podemos dar cuenta que usa la biblioteca Net::SMTP::SSL, y esta si la podemos encontrar para PERL 5.8.

y así quedaría el código para enviarlo en windows:



#!/usr/bin/perl

use strict;
use Net::SMTP::SSL;
  
send_mail('juanPerez@gmail.com','Prueba desde windows', 'probando el correo desde windows ;D');  
print "mensaje enviado";
    
sub send_mail {
  
  my $username = 'tucorreo@gmail.com';
  my $password = '123456';
  my $dest = shift; #'destinatario@algomail.com'
  my $asunto = shift;  
  my $body_mail = shift;

  #creamos la conexión con el servidor SMTP de Gmail
  my $smtp = Net::SMTP::SSL->new(
       'smtp.gmail.com',
       Port  => 465,
       Debug => 0,
       )
        || print 'Email::Send::Gmail: error connecting to server smtp.gmail.com';
    #se realiza al autentificación 
    $smtp->auth( $username, $password )
        or
        print "Email::Send::Gmail: error authenticating username $username";
        
  $smtp->mail($username);        
  $smtp->to($dest);
  #Se envía el correo
  $smtp->data();
  $smtp->datasend("From: ". $username );
  $smtp->datasend("\n");
  $smtp->datasend("To: ". $dest );
  $smtp->datasend("\n");
  $smtp->datasend("Subject: ". $asunto. "\n");
  $smtp->datasend("\n");
  $smtp->datasend($body_mail ."\n");
  
  $smtp->dataend();
  $smtp->quit();
  
  
}
Y así podemos enviar correos usando nuestras cuentas de Gmail a traves de PERL en LINUX y Windows.

lunes, 25 de junio de 2012

Usando la API de twitter con PERL y NET::Twitter parte 2 "Home TimeLine"

Continuando con el uso de la API de Twitter usando PERL ahora veremos como obtener tu Timeline.

Continuando con el script anterior, vamos a agregar un metodo para llamar e imprimir el time line (los ultimos 20 tuits de nuestro timeline)

Nota: elimine los comentarios del script anterior, se pueden revisar en el código del post anterior.

y recuerden en la página de cpan, esta la documentación de la biblioteca y sus metodos: http://search.cpan.org/dist/Net-Twitter/lib/Net/Twitter.pod


!#/usr/bin/perl
use strict;
use Data::Dumper;
use Net::Twitter;

my $youraccesstoken='';    
my $youraccesstokensecret='';   

my $twitterconsumer = 'SdXKgscRc82fcWkzKn3IA';
my $twitterconsumersecret = 'ZLZyzIVaTgXqdMmvszBRI64zWIzIRRa525y8gzaIBA';

my $nt = Net::Twitter->new(
 traits          => ['API::REST', 'OAuth'],
 consumer_key    => $twitterconsumer,
 consumer_secret => $twitterconsumersecret,
);

if ($youraccesstoken && $youraccesstokensecret) {
 $nt->access_token($twitteraccesstoken);
 $nt->access_token_secret($twitteraccesstokensecret);
}

unless ( $nt->authorized ) {
 print "Authorize this app at ", $nt->get_authorization_url, " and enter the PIN#\n";
 
 my $pin =; # wait for input
 chomp $pin;
 
 my($access_token, $access_token_secret, $user_id, $screen_name) = $nt->request_access_token(verifier => $pin);

 print 'Id Usuario: '.$user_id'."\r\n".'Screen name: '.$screen_name."\r\n";
print 'Access token: '.$access_token."\r\n".'Access Token Secret: '.$access_token_secret."\r\n";

}

get_timeline();

sub get_timeline {

my $timeline = $nt->home_timeline();#Este metodo regresa un arrayref

my ($x,$y);

# recorremos el array
    foreach $x(0..@{$timeline-1}){
        foreach $y(0..@{$timeline[$x]}-1)
        {
            print $timeline[$x][$y]->{user}->{screen_name}.":"."\n";
            print $timeline[$x][$y]->{text}."\n";
            print "====================================\n";
        }

        }
#para ver el objeto "timeline" y comprender un poco mas como es que esta armado
#podemos usar Dumper para verlo.

print Dumper($timeline);


}

miércoles, 20 de junio de 2012

Usando la API de twitter con PERL y NET::Twitter parte 1 "Autentificación"

Por curiosidad hace poco comencé a jugar con la API de twitter y lo hice con JAVA y la biblioteca twitter4j, pero solo es para sacarme el polvo en JAVA y ver como funciona twitter.

En mi trabajo comenzamos un proyecto web, que incluye a twitter, y algo de lo que ya hice en java me funcionó para el proyecto, solo que estamos utilizando PERL para ello. Tan fácil como desde CPAN instalar la biblioteca Net::Twitter.
En CPAN esta documentada, los métodos que usa pero a diferencia de  JAVA hay menos ayuda  ejemplos en la web de como usarla. Así que voy a estar subiendo algunos ejemplos básicos de su uso.
Cabe aclarar que no soy un "guru" en perl, de hecho soy bastante nuevo así que me ha servido de practica. Son libres de corregir, criticar y mejorar y compartir la mejora ;D

Lo primero, la autentificación, hay un ejemplo en la pagina de cpan:

!#/usr/bin/perl


use strict;
use Data::Dumper;
use Net::Twitter;

my $youraccesstoken='';     #esta variable contendra el Token Access para autentificarte en twitter, primero la declaramos vacía, después de autentificar tendrá un valor y lo mejor es guardarlo para su uso posterior
my $youraccesstokensecret='';     #esta variable como la anterior una vez obtenido su valor, lo mejor es guardarla

my $twitterconsumer = 'SdXKgscRc82fcWkzKn3IA'; #Estos valores los obtienes al registrar tu aplicación en la página de http://dev.twitter.com
my $twitterconsumersecret = 'ZLZyzIVaTgXqdMmvszBRI64zWIzIRRa525y8gzaIBA';

my $nt = Net::Twitter->new(
 traits          => ['API::REST', 'OAuth'],
 consumer_key    => $twitterconsumer,
 consumer_secret => $twitterconsumersecret,
);

#validamos si el Token acces y el Token Access Secret tienen valores

if ($youraccesstoken && $youraccesstokensecret) {
 $nt->access_token($twitteraccesstoken);
 $nt->access_token_secret($twitteraccesstokensecret);
}

#validamos si los datos de acceso son correctos si no lo son imprime la URl para autorizar la aplicación

unless ( $nt->authorized ) {
 print "Authorize this app at ", $nt->get_authorization_url, " and enter the PIN#\n";
 #esperamos por entrada el PIN que dio la página
 my $pin =; # wait for input
 chomp $pin;
 
        #Aquí obtenemos verificamos el PIN y si todo esta bien, nos regresa una lista con el Access token, el access token secret, el id del usuario y su screen name
 my($access_token, $access_token_secret, $user_id, $screen_name) = $nt->request_access_token(verifier => $pin);

        print 'Id Usuario: '.$user_id'."\r\n".'Screen name: '.$screen_name."\r\n";
 print 'Access token: '.$access_token."\r\n".'Access Token Secret: '.$access_token_secret."\r\n";

 exit();

}
Nota: Si usan UBUNTU, las librerías también las pueden encontrar en los repositorios de Ubuntu, como "libnet-twitter-perl" e instalarla desde synaptic  o un "apt-get install".