SOAP sobre Perl
SOAP::Lite es una implementación de SOAP para Perl. Se encuentra como módulo en el CPAN (Comprehensive Perl Archive Network). Con SOAP::Lite version 0.52 o superior podemos incorporar cualquier servicio SOAP a nuestros programas.
La instalación podemos llevarla a cabo de dos formas: bajando los módulos como ficheros comprimidos, compilándolos e instalándolos o bien de forma automática, mediante la interfaz del CPAN que posee Perl:
perl -MCPAN -e shell
install SOAP::Lite
quit
En cualquier caso, debemos instalar los siguientes módulos:
HeadParser
SOAP
SOAP::Lite
URI
Math::Random
Si no queremos instalarlos uno a uno, podemos bajar una "imagen" con los módulos instalados, descomprimirla en el directorio raiz de la cuenta propia, y después, en los programas en Perl, indicar dónde están las librerías que acabamos de instalar:
use lib '.../perl';
use lib '.../perl/lib';
use SOAP::Lite;
Veamos como ejemplo el Servicio Web de traducciones de BabelFish, programando en Perl un cliente SOAP, (usando SOAP::Lite) que acceda a este servicio remoto gratuito.
En primer lugar indicamos con el método proxy de la clase, cuál es el servidor y camino completo hasta el servicio. Con el método uri indicaremos el nombre del servicio invocado, y por último, utilizando el método de ese servicio, pasamos los parámetros (en este caso la cadena de texto a traducir y los idiomas origen y destino). El código que podría hacer esas peticiones sería:
#!/usr/bin/perl -w
use SOAP::Lite;
print SOAP::Lite
->proxy('http://services.xmethods.net/perl/soaplite.cgi')
->uri('urn:xmethodsBabelFish')
->BabelFish("es_en","Hola, mundo")
->result;
1;
Los idiomas origen y destino vienen indicados mediante abreviaturas:
Inglés, en
Francés, fr
Alemán, de
Español, es
Italiano, it
Portugués, pt
Ruso, ru
AVISO:Es posible que cuando ejecutemos estos scripts, nuestra máquina se encuentre detrás de un proxy. En ese caso, debemos indicarle a Linux cuál es la forma de salir al exterior. Lo configuramos usando la variable de entorno HTTP_proxy:
export HTTP_proxy="http://www.miproxy.com:3128"
setenv HTTP_proxy "http://www.miproxy.com:3128"
el primer caso se utilizará cuando nuestro Shell sea el bash, mientras que el segundo, cuando sea el tcsh.
La invocación del API de Google desde Perl sería similar.
Referencia: GoogleSearch.pl
#!/usr/bin/perl -w
use SOAP::Lite;
my $query = "linux+programacion";
my $googleSearch = SOAP::Lite -> service("http://api.google.com/GoogleSearch.wsdl");
my $result = $googleSearch -> doGoogleSearch(
"iwnUXUtHj3bteg5FWfBJDwui3SPeB+iy", # Clave de acceso al API de Google
$query, # Palabras clave de búsqueda
0, # Indice del primer resultado mostrado
10, # Numero de resultados obtenidos
"false", # Filtro
'', # Restricción
"false", # Búsqueda Segura
'', # lr
'latin1', # ie
'latin1' # oe
);
print $result->{resultElements}->[0]->{title};
print "\n";
print $result->{resultElements}->[0]->{URL};
print "\n";
1;