Ya hemos visto como funciona XML-RPC sobre PHP. El otro protocolo de Servicios Web es SOAP. SOAP tambi�n puede ser utilizado desde PHP. Aunque XML-RPC es m�s sencillo y m�s "Unix-Friendly", hay que reconocer que la mayor�a de los Servicios Web p�blicos e interesantes de hoy en d�a, est�n definidos bajo el est�ndar SOAP. Es por eso, especialmente interesante saber como invocar uno de estos servicios desde SOAP.
Como hemos podido ver con XML-RPC, crear un Servicio Web es m�s complicado que invocarlo. En SOAP pasa lo mismo. Veamos la parte sencilla, y la m�s �til, o sea, su invocaci�n.
La implementaci�n de SOAP sobre PHP m�s recomendable es NuSOAP, que podemos
descargar.
Est� desarrollada por la empresa NuSphere y licenciada bajo LGPL.
Ponerla en marcha es tan sencillo como teclear este simple script en PHP de ejemplo:
#!/usr/local/bin/php -q
<?php
require_once('nusoap-0.6.1/nusoap.php');
$soapclient = new soapclient(
'http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl', 'wsdl');
echo $soapclient->call('getQuote',array('symbol'=>'ibm'));
?>
As� de sencillo es obterner la cotizaci�n en bolsa de las acciones de IBM en un programa en PHP utilizando un Servicio Web SOAP. Viendo este c�digo, nos preguntaremos qu� es eso de WSDL que sale en un sitio y en otro cada vez que hablamos de SOAP. Tal como se hace en CORBA o en COM, SOAP usa un lenguaje de definici�n de servicios para Web (WSDL = Web Services Definition Language), en donde se definen los servicios a publicar, los tipos de datos a retornar, as� como otras caracter�sticas de los servicios. El WSDL es un borrador (no est� completamente aprobado por el W3C), aunque ya se usa en fase de explotaci�n de forma extensiva.
Resumiendo, WSDL es equivalente a la URL en los servicios XML-RPC. Es la direcci�n de Internet donde hay que invocar el proceso que nos interesa.
Referencias:
Ahora un ejemplo un poco m�s sofisticado. Veamos c�mo implementar en PHP una llamada al generador de gr�ficas en Flash:
#!/usr/local/bin/php -q
<?php
require_once('nusoap-0.6.1/nusoap.php');
// Definimos los parametros de entrada
$parameters = array(
"mainTitle" =>"My Bar Chart Title",
"subTitle" =>"Example SubTitle",
"xAxisTitle" =>"x Axis Title",
"yAxisTitle" =>"y Axis Title",
"sourceTitle" =>"Source: Example Output from Service",
"minValue" =>"0",
"maxValue" =>"100",
"unitType" =>" %",
"drawGrid" =>"1",
"animate" =>"1",
"show3D" =>"1",
"dataArray" =>"Apples:78.5,Oranges:34.8,Peaches:23.7,Pears:12.9"
);
// Se indica la URL del servicio SOAP mediante WSDL
$soapclient = new soapclient('http://www.flash-db.com/services/ws/flashBarChart.wsdl',
'wsdl');
// Se invoca al Servicio Web SOAP
$result = $soapclient->call('doFlashBarChart',$parameters);
// El resultado viene en formato binario base64 ...
$binary = base64_decode($result);
// Grabamos el fichero flash en el filesystem
$movieName = "./NewChart.swf";
$fp = fopen($movieName,"w");
fwrite($fp, $binary, 12000);
fclose( $fp );
?>

El resultado obtenido, lo podemos visualizar en un navegador usando el siguiente c�digo HTML:
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase= "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH="500" HEIGHT="400"> <PARAM NAME=movie VALUE="NewChart.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="NewChart.swf" quality=high bgcolor=#FFFFFF WIDTH="500" HEIGHT="400" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"> </EMBED> </OBJECT>
Otro ejemplo m�s, de gran utilidad es la invocaci�n a Google desde PHP. Google uno de los buscadores de m�s prestigio de la red ha incorporado recientemente la posibilidad de poder usar su base de datos de p�ginas desde cualquier herramienta de desarrollo.
El producto denominado "Google Web API" permite a los desarrolladores poder interrogar y tomar informaci�n de casi tres mil millones de documentos Web directamente desde Google. Para lograr eso, Google usa SOAP y WSDL de forma que los desarrolladores puedan programar en su entorno favorito tal como PHP, Java, Perl, o Visual Studio .NET.

Veamos como se puede aprovechar la potencia de Google en nuestros scripts de PHP:
#!/usr/local/bin/php -q
<?php
require_once('nusoap-0.6.1/nusoap.php');
// Licencia de Google
$key = 'iwnUXUtHj3bteg5FWfBJDwui3SPeB+iy';
// Por ejemplo ...
$Query = "linux+programaci�n";
$startPage = 0;
$parameters = array(
'key' => $key,
'q' => $Query,
'start' => $startPage,
'maxResults' => 10,
'filter' => false,
'restrict' => '',
'safeSearch' => false,
'lr' => '',
'ie' => '',
'oe' => ''
);
$soapclient = new soapclient('http://api.google.com/search/beta2');
$result = $soapclient->call('doGoogleSearch',$parameters, 'urn:GoogleSearch');
print_r ($result);
?>
El resultado es algo as�:
Array
(
[documentFiltering] => false
[estimatedTotalResultsCount] => 77400
[directoryCategories] =>
[searchTime] => 0.194757
[resultElements] => Array
(
[0] => Array
(
[cachedSize] => 28k
[hostName] =>
[snippet] => Programas y Aplicaciones de GNU/Linux
[directoryCategory] => Array
(
[specialEncoding] =>
[fullViewableName] =>
)
[relatedInformationPresent] => true
[directoryTitle] =>
[summary] =>
[URL] => http://linux.bankhacker.com/software/Programacion/
[title] => Linux Programacion
)
[1] => Array
(
[cachedSize] => 9k
[hostName] =>
[snippet] => Hosting Linux y Programaci�n
[directoryCategory] => Array
(
[specialEncoding] =>
[fullViewableName] =>
)
[relatedInformationPresent] => true
[directoryTitle] =>
[summary] =>
[URL] => http://linux.bankhacker.com/
[title] => Software Linux: Programas y Aplicaciones de
GNU/Linux
)
...
)
[endIndex] => 10
[searchTips] =>
[searchComments] =>
[startIndex] => 1
[estimateIsExact] => false
[searchQuery] => linux+programaci�n
)
