Você está na página 1de 4

SERVICIOS WEB

Consumo de un servicio web


En el presente documento se realiza el consumo de un servicio
Web a travs del lenguaje de programacin PHP y que est
alojado en un repositorio Web.

PROGRAMACIN EN AMBIENTES CLIENTE-SERVIDOR

PROCEDIMIENTO.
Nuevamente trabajaremos con nuestro sitio de almacenamiento y donde se
encuentran alojados en la Web ciertos servicios disponibles a la comunidad
programadora.
Una de las razones por las cuales se consume o invoca un servicio Web a travs de los
leguajes de programacin, es con la finalidad de aprovechar los recursos disponibles
en la Web. Algunos de los muchos servicios Web que se encuentran actualmente
disponibles se ubican en el sitio oficial http://www.webservicex.com . En este sitio, estn
almacenadas diversas descripciones para los diferentes tipos de servicios Web, que se
invocan desde el lenguaje de programacin que se desee.
De aqu voy a tomar una ubicacin del servicio Web (archivo wsdl) que se consumir a
travs de cdigos en PHP que sern explicados posteriormente.
Recordemos que para poder realizar el consumo de los servicios Web en PHP se deber
de descargar la librera NuSOAP (http://sourceforge.net/projects/nusoap/), deber de
descomprimirse y colocar la carpeta lib en donde se ubican nuestros programas PHP.

El servicio Web que se va a consumir para este ejemplo se tom de la pgina


http://www.webservicex.com/globalweather.asmx del cual se tomar la descripcin
(Service Description) del mismo sitio.

Para el ejemplo que se mostrar a continuacin, vamos a trabajar con las operaciones
GetCitiesByCountry y GetWeather. Abrimos la descripcin y verificamos de qu manera
se desglosa esa operacin junto con el resultado para ser consumidos posteriormente.

Pgina 2

M.S.C. ANTONIO DANIEL LPEZ SERRANO

PROGRAMACIN EN AMBIENTES CLIENTE-SERVIDOR

CDIGOS DE EJEMPLO PARA CONSUMIR UN SERVICIO


WEB EN PHP
Colocar al inicio del cdigo de PHP la importacin o inclusin de la librera NUSOAP. Esto
puede hacerse de cualquiera de las siguientes dos maneras posibles.

include('lib/nusoap.php');

require_once("lib/nusoap.php");

1ER. PROGRAMA (invocado.php)


error_reporting(0);
require_once('lib/nusoap.php');
$client = new nusoap_client('http://www.webservicex.com/globalweather.asmx?WSDL', true);
$err = $client->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}
$strCountry = 'mexico';
$param = array('CountryName' => $strCountry);
$result = $client->call('GetCitiesByCountry', array('parameters' => $param), '', '', false, true);
//Verifica alguna falla
if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
} else {
// Verifica errores
$err = $client->getError();
if ($err) {
// Muestra el error
echo '<h2>Error</h2><pre>' . $err . '</pre>';
}
else
{
//Usa XML Parser para mapear el resultado XML y usar las variables PHP
$strResultXML = $result['GetCitiesByCountryResult'];
$p = xml_parser_create();
xml_parse_into_struct($p, $strResultXML, $vals, $index);
xml_parser_free($p);
echo '<pre>';
print_r($vals);
echo '</pre>';
//Aqui hemos obtenido un arreglo con los valores que esperabamos tener
$ciuadades = array();
$i = 0;
foreach ($vals as &$tag) {
if($tag['tag'] == 'CITY'){
$ciudades[$i] = $tag['value'];
$i++;
}
}
echo '
<center>
<h1>Aeropuertos del pais : <em style="color:red">'.strtoupper($strCountry).'</em></h1>';
echo '<table border=1>';
foreach ($ciudades as &$city) {
echo '
<tr>
<td>
<a href="mostrandoClima.php?pais='.$strCountry.'&ciudad='.$city.'">'.$city.'</a>
</td>
</tr>';
}
echo '</table>';
echo '</center>';
}
}

Pgina 3

M.S.C. ANTONIO DANIEL LPEZ SERRANO

PROGRAMACIN EN AMBIENTES CLIENTE-SERVIDOR


2DO. PROGRAMA (mostrandoClima.php)
<?php
error_reporting(0); //Evita mostrar los errores que no sean fatales
require_once('lib/nusoap.php'); //Se importa la libreria NuSOAP para trabajar los mtodos de consumo de servicios Web
$strCity = $_GET['ciudad']; //Parmetros que vienen de la pgina anterior
$strCountry = $_GET['pais'];
$client = new nusoap_client('http://www.webservicex.com/globalweather.asmx?WSDL', true); //Se invoca el servicio Web a utilizar
$err = $client->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}
$params = array("CityName" => $strCity, "CountryName" => $strCountry); //Se construyen los parmetros de la solicitud
$result = $client->call('GetWeather', $params,'','', false, true);
if ($client->fault) { //
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
}
else{
// Verifica errores
$err = $client->getError();
if ($err) {
// Muestra el error
echo '<h2>Error</h2><pre>' . $err . '</pre>';
}
else {
$strResultXML = $result["GetWeatherResult"]; //Se da el formato para el XML Service
$parser = xml_parser_create();
xml_parse_into_struct($parser,$strResultXML,$vals,$index);
xml_parser_free($parser);
echo '<h2>Resultado</h2><pre>';
print_r($strResultXML);
echo '</pre>';
// muere el objeto Cliente
unset($client);
}
}
?>

Si todo ha salido bien, al consumir el servicio Web en el primer programa se muestra el


listado de todos los aeropuertos de nuestro pas, mientras que en el segundo muestra
en una tabla las caractersticas climatolgicas del aeropuerto seleccionado.

EJERCICIO
Tecleen y prueben los cdigos que se acaban de mencionar y para culminar con esta
unidad, les pido que realicen su reporte correspondiente.
La entrega del reporte ser para el da Lunes 14 de Diciembre del ao en curso.

Pgina 4

M.S.C. ANTONIO DANIEL LPEZ SERRANO

Você também pode gostar