25 nov 2009

Querés saber como podes utilizar Google Wave


(Inspirado en textos de Google Wave)

Hoy luego de seguir usando Google Wave, y estar muy contento con las funcionalidades que trae, decidí leer un poco de la documentación del mismo, que esta en Waves.




Empecemos por como funciona Google Wave

Antes de empezar con las ideas de uso de Google Wave, quiero dar una pequeña explicación de como funciona Google Wave, para aquellos que aún no lo probaron.
Google Wave maneja todo por Waves, que son algo así como un lugar donde ingresar y compartir información. Imaginemos un Wave como una hoja en blanco, que podemos crear, editar, borrar, archivar, y por sobre todas las cosas, compartir con otras personas. A diferencia de una hoja en blanco, que solo una persona puede estar asándola a la vez, es que en Google Wave, todos los que elegimos que puedan participar de dicha Wave, pueden editarla a la vez (o en tiempos diferentes).
Bueno, luego de haber hecho una muy breve introducción a que es Google Wave, comenzaré a desarrollar algunas de las ideas de uso de Google Wave (debo aclarar que me estoy inspirando en un texto de Google, no es una autoría mía, ni tampoco es una traducción literal del contenido; más bien es una inspiración para poder desarrollar sobre ella). Bueno, ahora si veamos como podemos usar esa hoja en blanco que nos ofrece Google Wave de forma más productiva que solo mirarla.


Como podés usar Google Wave


Organizar eventos

Mantener las ideas organizadas en un único lugar, como puede ser, el itinerario sugerido, el menú, la administración de los recursos, etc. Además se pueden incorporar el estado del clima, y mapas. Veamos, entonces podríamos organizar un evento, en el cual podríamos hacer el itinerario, si se realiza en diferentes lugares, con solo utilizar Google Maps e incorporarlo a nuestro Wave.


Notas de reuniones

Se puede preparar la agenda de una reunión entre varias personas, cada uno realizando notas, incorporando información, enlazando a documentos anexos (por ejemplo presentaciones PowerPoint), incorporando enlaces a sitios en los cuales podemos recopilar mayor información, etc. Todo esto en tiempo real, cada persona que participa del Wave puede ver los cambios al instante, y también realizar cambios en el momento que lo desee.
Una función muy útil de Google Wave es la llamada "Playback" que nos permite ver como se fue comportando el Wave, quién abrió el wave, que cambios se fueron realizando por cada persona. Es decir tenemos todo el historial, o sea que si por error perdimos información, no debemos preocuparnos porque sigue estando allí para recuperar.
Una vez finalizad la reunión se pueden realizar las notas finales en el mismo Wave o en uno nuevo. Podríamos invitar a todas las personas que participaron en un nuevo Wave, para que nos comenten su experiencia, y podemos incorporar una votación para que puedan calificar a la reunión.


Reportes de grupo y desarrollo de proyectos

Trabajar de manera colaborativa en tiempo real, realizando nuestros primeros bosquejos, discutir y solicitar feedback, todo en el mismo Wave. Nos ahorramos de enviar muchos e-mails con copias a diferentes personas, y luego ya no saber si a todos le enviamos la información que debíamos. A medida que los bosquejos van tomando más forma, se irán convirtiendo en proyectos, que pueden seguir desarrollandose en Wave.
Esta quizás es una de las funciones que yo más utilizo, desarrollo de proyectos, la cual utilizó para ir plasmando los nuevas ideas, y compartirlas con las personas que formarán parte de ella (y viceversa, que personas que tienen ideas, me incorporen a mi para formar parte del desarrollo del proyecto).


Brainstorming / Lluvia de ideas

Es una función que Google Wave permite realizar muy bien , principalmente cuando tenemos un grupo distribuido. Todas las personas pueden participar de un Wave escribiendo todas las ideas que le vienen a la cabeza, y todas en simultáneo.
También podemos ir incorporando imágenes, videos, enlaces externos, y hasta enlazarlos con otras Waves.
Luego ya tenemos toda la información, y solo nos resta comenzar a filtrar las ideas.


Compartir fotos

Se puede arrastrar y pegar (drag & drop) fotos desde el escritorio al Wave. Luego esas fotos se pueden compartir con otras personas. Existe un visor de fotos (slideshow) que nos permite ver todas las fotos de manera mucho más sencilla (es solo sentarnos y apreciarlas). Las demás personas que participan de la Wave también pueden subir sus fotos para que sean visibles por todos los integrantes de la Wave. Es muy sencillo poder hacer un álbum de fotos de un grupo con Google Wave.


Como uso yo Google Wave

Bueno, ya lo comente un poquito en este post, y en posts anteriores. Principalmente lo uso para abrir un Wave por idea, y compartirlo con diferentes personas que van agregando valor a la idea. Por ejemplo si se me ocurre que la venta de peces luminosos (idea extraída de The Big Bang Theory) puede ser buena, abro un Wave sobre este tema e invito a diferentes personas a que opinen sobre ella, y vayan aportando valor, hasta llegar a una idea potable, o descartarla por el momento.


Y ya cerrando este post

Ahora estoy intentando buscar nuevos usos a Google Wave, lo cual lo estoy intentando alcanzar por medio de otras personas que estoy sumando a mis contactos. Entre mis contactos tengo a personas de Marketing, y personas mucho más Técnicas (principalmente sistemas), es muy interesante ver los beneficios que puede traer a los diferentes tipos de personas. Sigamos descubriendo, esa es la única forma de crecer.

23 nov 2009

Google AdWords para sitios específicos


Como hace unos días recibí crédito de Google para abrir mi cuenta de AdWords, decidí comenzar a probar el servicio. Comento un poco mi experiencia anterior y el porque no probé anteriormente el servicio.

El sitio del cual ya hace un tiempo me encargo en administrar y posicionar, es un sitio para un sector especifico, y he logrado una muy buena posición en Google por las palabras claves detectadas. Como de esta forma, me resultaba conveniente y exitoso el posicionamiento del sitio web, me parecía que invertir en AdWords podría ser una perdida de tiempo y dinero. Dado que Google me dio crédito para AdWords, ya tenía 50% de mis excusas resueltas, solo me faltaba tiempo (pero decidí hacermelo para probar el servicio).

De esta forma comence a probar el servicio de AdWords de Google, luego de leer un poco y generar mis primeros avisos me dí cuenta que existian muchas variables en juego al crear una campaña y avisos en AdWords. Voy a comenzar definiendo algunos términos de AdWords para todos aquellos que aún no lo han probado:

Campaña: es un presupuesto asignado a una determinada forma de publicación y anuncios que deseamos publicar. Varios anuncios pueden pertenecer a una misma campaña. En la campaña definimos el costo diario que deseamos utilizar, las regiones en la cuales deseamos que aparezca nuestro aviso (si es solo para un país determinado, grupo de paises, etc.), los dispositivos en los cuales deseamos que sean visualizados nuestros anuncios (laptops, teléfonos, etc), y rango de fechas en las cuales la campaña estará activa.


Anuncio: es un aviso en el cual indicamos el texto/gráfico que deseamos que aparezca en la pantalla de nuestros potenciales. Cada anuncio pertenece a una campaña. Google recomienda que incorporemos más de un anuncio a la campaña para poder medir la efectividad de cada uno de ellos. Todos los anuncios utilizan el mismo presupuesto que la campaña, es decir, si asignamos $10 por día a una campaña, todos los anuncios que pertenecen a la campaña compartirán dicho presupuesto.


¿Cual fué mi experiencia?
Si bien no he realizado una investigación profunda de AdWords, he recopilado cierta información y experiencia con los anuncios que he publicado, la cual voy a detallar en los siguientes puntos:
  • Se debe realizar una elección adecuada del presupuesto a asignar a cada campaña, se debe tener en cuenta que el monto que uno indica que desea utilizar por día, no necesariamente es el que Google AdWords utilizará (hasta el momento AdWords siempre ha destinado mayor presupuesto por día del que le he asignado).
  • Se deben ingresar varios anuncios por cada campaña, intentando orientar cada uno a diferentes beneficios del producto/servicio que estamos intentando promocionar. Esto es útil para poder verificar la efectividad de los diferentes tipos de anuncios.
  • Se debe tener especial cuidado en las redes que incorporamos nuestros anuncios, una mala elección de las redes provocará una alta cantidad de clicks entrantes a nuestro sitio web, pero también una alta tasa de rebote. En un principio deje que Google gestionara las redes en las cuales promocionaba los anuncios, pero esto solo logro tener una muy alta cantidad de clicks (incrementando costos), pero una aún más alta tasa de rebote. O sea que el tráfico generado no pertenecia al público objetivo del anuncio.
  • Utilizar las herramientas de sugerencias de palabras claves, y de búsqueda de redes en las cuales incorporar los anuncios. Ambas herramientas son muy útiles para poder mejorar las visitas a nuestro sitio web.
  • Si tus productos son demasiados espécificos, la campaña debe ser de mayor duración y debe ser promocionada en sitios web que sean relevantes para tus productos/servicios. Mi experiencia indica que AdWords es mucho más útil cuando comercializamos productos o servicios que son masivos y principalmente para usuarios finales, pero cuando ofrecemos productos o servicios mucho más específicos debemos ser mucho más pacientes, y principalmente selectivos en la selección de los parámetros. Por ejemplo, si queremos promocionar una red social, sabemos que nuestro público objetivo es un rango bastante amplio de personas y el objetivo es estar en la mayor cantidad de sitios web posibles. En cambio, cuando hablamos de productos específicos, deseamos estar en sitios más selectivos, y ser más pacientes.
Hasta el momento he encontrado estos puntos como importantes para iniciar nuestras campañas en AdWords. Hasta el momento estoy convencido que es una muy buena herramienta para generar tráfico para sitios que ofrecen productos o servicios bastante masivos, pero no tan convenientes (a menos que modifiquemos bastante las opciones) para sitios mucho más específicos.
Antes de utilizar Google AdWords la tasa de rebote del sitio web que estoy administrando era de apróximadamente el 50%, cuando comencé a utilizar AdWords, la tasa subió a casí el 80%, he tenido que realizar muchas modificaciones a las campañas para intentar lograr que el porcentaje de rebote llegue, nuevamente, a valores de apróximadamente el 50%.
Con el tiempo, ire conociendo mucho más de la herramienta. Pero por ahora, sigo prefiriendo una buena posición en los buscadores (no en enlaces patrocinados / AdWords) y mejorar el posicionamiento por medio de técnicas de SEO tradicionales. Obviamente, las visitas es solo el comienzo del éxito de nuestro sitio web, luego debemos lograr que el visitante tenga una buena experiencia y se interese por lo que tenemos para ofrecerle.

17 nov 2009

Invitaciones gratuitas para Google Wave

Si sos usuario de Twitter, tenés que aprovechar la oportunidad que esta ofreciendo @ComunidadMktng para ganarte invitaciones para Google Wave.

Solo tenés que seguir los siguientes pasos:
- Iniciar tu sesión en Twitter
- Ir a @ComunidadMktng presionar sobre "Follow" o "Seguir"
- Visita el sitio de Comunidad Marketing y presiona sobre el botón verde en la parte superior derecha del artículo (para hacer RT / ReWeet de la noticia)

Con esos simples pasos ya estas participando por las 3 entradas de Google Wave. Apurate que el concurso es solo hasta el próximo lunes 23.


13 nov 2009

Prueba de AdWords productos específicos vs masivos

Hoy comence a realizar una prueba en AdWords diferente, un producto de venta masiva vs un producto para un sector muy especifico. Las diferencias son muy grandes, las posibilidades, las redes, y la información que se puede encontrar sobre los productos de venta masiva es muy buena, y útil. Para los productos muy específicos, no existen demasiados análisis, las redes son mucho más escasas, y hay que tener mucho cuidado con las redes seleccionadas.

Sigo pensando que Google AdWords es una herramienta genial para todas aquellas personas que desean llegar a un público muy amplio, y masivo. Es como un supermercado, en el mismo vamos a buscar productos que sirven para muchos tipos de personas, pero se nos hace muy difícil encontrar un producto muy específico en un supermercado (aunque hoy en día, ya no me sorprende lo que puede haber dentro de un supermercado).

El ejemplo de producto de venta masiva, lo realice sobre una empresa que basa sus productos en el cuidado de la piel (más precisamente sobre productos del cuidado de la piel MaryKay), y me resulto mucho más fácil encontrar redes en las cuales publicitar los anuncios, y también la información que me entregaba Google era mucho más útil. Si bien los resultados los iré viendo con el tiempo, si puedo decir que la cantidad de publico al cual podemos llegar es más que interesante. Luego depende de nosotros el hacer una buena campaña, y transformar los clicks en oportunidades/dinero o lo que deseamos obtener.

En cambio el producto específico, del cual no puedo dar demasiada información, es un producto de software específico para una industria en particular. Las redes disponibles son muy pocas, la información que entrega AdWords no es demasiada, y principalmente tuve que tener mucho cuidado, ya que en un principio había seleccionado que Google AdWords me gestionara las redes en las cuales publicar (gran error mío). Cuando seleccione que Google AdWords me gestionara las redes, Google agrego mis anuncios en sitios de programas gratis con una gran cantidad de visitas. Recibimos una gran cantidad de visitas en el sitio web, pero también una gran cantidad de rebotes.

¿Cual fue el problema? sencillo, que el público que visito el sitio web, no eran potenciales clientes del producto, sino personas que estaban buscando otro tipo de producto o programas gratis. Por eso debemos tener especial atención en la cantidad de clicks, es decir, tener clicks es muy bueno, siempre y cuando ellos vengan de potenciales clientes. Para entender esto voy a intentar hacer una analogía con el mundo físico. Si entregamos folletos de una carnicería en una zona en la cual todas las personas son vegetarianas, no estamos haciendo un muy buen trabajo. Es decir, podemos decir que entregamos muchísimos folletos y eso sería muy bueno. Pero si luego vemos que ninguna de esas personas eran potenciales, y por lo tanto no nos compraron carne, nos terminamos dando cuenta que hemos desperdiciado nuestro dinero.

Por eso debemos ser cuidadosos cuando elegimos nuestras campañas, y principalmente en las redes en las cuales se publican nuestros anuncios. Si trabajas con productos/servicios masivos, tu trabajo será mucho más fácil, en cambio si trabajas con productos/servicios mucho más específicos, vas a tener que trabajar un poco más (y principalmente va a ser mucho más difícil poder realizar una planificación).


12 nov 2009

Experiencia con el trackman marble de Logitech

Ya hace más de 2 meses que estoy utilizando el trackball de Logitech, más precisamente el Trackman Marble y estoy muy impresionado con lo adictivo que termino siendo el uso del mismo. Como comente en mi post anterior hacia mucho tiempo que no utilizaba un trackball, y los que había utilizado anteriormente eran operados con el dedo pulgar, este nuevo trackball que adquirí se opera con el dedo índice/mayor.

La experiencia fue y es excelente, no voy a realizar una comparativa con respecto a un mouse tradicional, ya que algo de ello ya lo he comentado en mi post anterior. En esta ocasión me voy a enfocar a comentar mi experiencia, y las diferencias con el trackball operado con el dedo pulgar.

Debe confesar que al principio me costo un poco adaptarme nuevamente al uso del trackball, pero luego de uno o dos días, ya me sentía mucho más comodo, y a la semana, ya lo sentía parte de mí. La adaptación consiste en dos partes, primero que debemos operar el mouse con nuestros dedos índice/mayor sin mover demasiado la mano, y la segunda es que debemos acostumbrarnos a presionar el botón derecho del mouse con el dedo pulgar, y el botón izquierdo con el dedo meñique (o el que nos quede más comodo).

Ventajas del trackball operado con el dedo índice/mayor

  • Tenemos mayor fuerza en nuestros dedos medios, y precisión, por lo tanto es mucho más sencillo mover la "bola" del mouse, y lograr una muy buena precisión.
  • Es muy fácil mover el cursor de una esquina de la pantalla a otra, ya que con un impulso importante con los dedos que operamos el mouse, el mismo logra una inercia y "mágicamente" el cursor continúa su desplazamiento.
  • La precisión lograda es mucho mayor que la que recuerdo haber logrado con un trackball operado con el dedo pulgar (quizás sea solo yo, pero no tengo tan buen control de mi dedos pulgares, como de mis dedos centrales).

Y ya cerrando el post...

Mi experiencia con los trackballs es que una vez que comenzas a utilizar uno de ellos, luego es muy difícil poder volver a un mouse tradicional. Como desventaja con respecto a los mouse tradicionales es el espacio que ocupa, es mayor, y por lo tanto es más difícil transportarlo en el, por ejemplo, bolso de la notebook.

Invito a todas las personas que tengan la posibilidad de probar un trackball, estoy seguro que les será de mucha utilidad. La regla, que he comprobado, es que si deseas utilizar el trackball principalmente para jugar, es más conveniente uno operado con el dedo pulgar, en cambio para diseño u operaciones con mayor precisión o uso normal, es más cómodo el trackball operado con el dedo índice/pulgar.

Yo te puedo ofrecer solo mi experiencia, pero al final, vos tenés la última palabra, y el poder de decisión es tuyo, solo debes ser objetivo con lo que lees, y analizar el uso que le deseas dar. Pero ante todo lo importante es "actuar".


11 nov 2009

Google Wave

Luego de esperar un tiempo que me llegue la invitación para probar Google Wave (http://wave.google.com) hoy me llegó la invitación. Aún no he podido realizar demasiadas pruebas, simplemente recorrí un poco la interfaz, con el tiempo ire posteando los avances que voy haciendo sobre las pruebas de este "nuevo" sistema de comunicación.

Creo que puede ser una muy buena alternativa para la realización de proyectos, por ejemplo para administrar contenido que estamos desarrollando. Podemos lanzar una idea o bosquejo al grupo de personas que deben participar, y luego cada uno va realizando sus aportes en el documento. Una vez generado, podemos pasar el contenido a otro sistema, por ejemplo wiki, sitio, o cualquier otra alternativa, o podemos dejarlo en Google Wave.

Siempre es interesante probar las nuevas tecnologías que van apareciendo, para saber si nos es útil para mejorar nuestra forma de trabajo, y/o tenerla en cuenta en el futuro. Cuando uno se acostumbra a las herramientas de colaboración, debo reconocer, que es muy difícil volver.

En el futuro seguire posteando sobre las pruebas y experiencias que vaya teniendo con Google Wave.


WebServices con NuSOAP en PHP - Ejemplo 3

Este el tercer ejemplo que voy a publicar de la comunicación entre el cliente y servidor de WebServices utilizando NuSOAP con un servidor PHP. Para aquellos que llegarón directamente a esta página, les recomiendo que primero lean el primer ejemplo de NuSOAP con PHP, y luego el segundo ejemplo de NuSOAP con PHP, antes de continuar con este. En este ejemplo en particular voy a modificar el ejemplo 2, para en vez de retornar un objeto, retornar una lista de objetos. En el ejemplo anterior, trate un caso muy particular, que es cuando necesitamos obtener un objeto desde el servidor, en este nuevo ejemplo, voy a obtener un listado de objetos. Muchas veces necesitamos un listado de algún tipo de objeto, por ejemplo, un listado de clientes, con este nuevo Servicio Web planteo este caso, en el cual el servidor nos devuelve un listado con todos los clientes que existen en el sistema.
Como veremos existen algunas modificaciones extras que debemos realizar para retornar un listado con los clientes. Primero debemos definir una estructura que contenga a la definición planteada en el ejemplo anterior, y luego realizar una conversión un poco más compleja (de un vector de objetos, a un vector de vector). También voy a incluír una clase de soporte, que nos ayudará a realizar las conversiones.

Módulo Servidor

Para simplificar la estructura del servidor, intente extraer toda la lógica de conversión en una clase extra (smart_soporte.php), así la lectura del código del servidor se mantiene lo suficientemente limpia como para que sea más fácil su entendimiento. En el ejemplo anterior el servicio web retornaba un cliente al consumidor/cliente de dicho servicio web, en este caso, retornaremos un listado de clientes. Debemos tener en cuenta que las respuestas deben ser convertidas a los tipos de datos básicos, por lo tanto para devolver una lista de clientes, debemos convertir dicha lista en un lista de listas que contengan como indices/keys/claves los atributos de la clase Cliente.
A continuación expongo el código del servidor:
<?php
// Pull in the NuSOAP code
require_once('nusoap/lib/nusoap.php');
require_once('soporte_obrea.php'); // Incluyo este archivo que tiene archivos para soporte de WS

$miURL = 'http://pruebas.orlandobrea.com.ar/nusoap';
$server = new soap_server();
$server->configureWSDL('ws_orlando', $miURL);
$server->wsdl->schemaTargetNamespace=$miURL;



/*
 *  Ejemplo 3: listarClientes es la funcion mas compleja que voy realizar, no recibe parametros
 *  y retorna un listado de clientes. Utiliza varios metodos del ejemplo 2.
 */
 class Cliente {
  var $id;
  var $nombre;
 var $apellido;
 var $cuit;
}
class ClienteDAO {
 /**
  * getCliente($id) : Cliente
  * Esta funcion deberia implementarse con una conexion a una base de datos
  * y obtener la informacion de la base directamente
  */
 function getCliente($id) {
  $obj = new Cliente();
  if ($id==1) {
   $obj->id = 1;
   $obj->nombre = 'Blas';
   $obj->apellido = 'Pascal';
   $obj->cuit = '11-11111111-1';
  }
  if ($id==2) {
   $obj->id = 2;
   $obj->nombre = 'Isaac';
   $obj->apellido = 'Newton';
   $obj->cuit = '22-22222222-2';
  }  
  return $obj;
 }
 
 /**
  * getList : Array
  * Esta funcion retorna un listado de todos los clientes que estan en el sistema.
  * @return 
  */
 function getList() {
  $rta = array();
  $rta[0] = $this->getCliente(1);
  $rta[1] = $this->getCliente(2);
  return $rta;
 }
}

$server->wsdl->addComplexType('Cliente',
 'complexType',
 'struct',
 'all',
 '',
 array(
 'id' => array('name' => 'id', 'type' => 'xsd:int'),
 'nombre' => array('name' => 'nombre', 'type' => 'xsd:string'),
 'apellido' => array('name' => 'apellido', 'type' => 'xsd:string'),
 'cuit' => array('name' => 'CUIT', 'type' => 'xsd:string')
 )
);

$server->wsdl->addComplexType('listadoClientes',
 'complexType',
 'array',
 '',
 '',
 array (array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Cliente[]'))
);
$server->register('listarClientes', // Nombre de la funcion
       array(), // Parametros de entrada
       array('return' => 'tns:listadoClientes'), // Parametros de salida
       $miURL
     );
function listarClientes() {
 $dao = new ClienteDAO();
 $listado = $dao->getList();
 $objSoporte = new SoporteWS();
 $respuesta = $objSoporte->convertirAVectorParaWS($listado);      
 return new soapval('return', 'tns:listadoClientes', $respuesta);
}


$server->service($HTTP_RAW_POST_DATA);
?>
Existen una lista de modificaciones que voy a ir detallando en los siguientes puntos.

Agregar una función en el DAO para que retorne una lista

Como mencione anteriormente en esta oportunidad debemos retornar un listado de clientes, por eso debemos modificar la clase ClienteDAO agregando un nuevo método getList, el cual retorna una lista con todos los clientes.
        function getList() {
  $rta = array();
  $rta[0] = $this->getCliente(1);
  $rta[1] = $this->getCliente(2);
  return $rta;
 }
La clase ObjetoDAO agrega un nuevo método llamado getList(), el cual retorna una lista de todos los clientes que tenemos en el sistema. Al igual que en el ejemplo 2, cuando implementemos este método en un servidor productivo, tendrá una lógica de acceso a datos para obtener la información de alguna fuente de datos. Por ejemplo, si la fuente de datos fuera una base de datos, deberiamos ejecutar una sentencia SQL similar a "select * from Cliente" y luego convertir los resultados en un listado de Clientes.

Definimos la estructura retornada

Debemos definir el nuevo tipo de datos que vamos a retornar, en este caso debemos retornar una lista de clientes, la cual esta definida por la siguiente estructura:
$server->wsdl->addComplexType('listadoClientes',
 'complexType',
 'array',
 '',
 '',
 array (array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Cliente[]'))
);
Como podemos ver en el código anterior, definimos un tipo de datos "listadoClientes" el cual es un array de "Cliente" (el tipo de datos que habíamos definido en el ejemplo 2). Con estas simples lineas estamos indicando que vamos a retornar un listado (vector) y que cada elemento de dicho vector contendrá un Cliente.

Registramos el servicio web a publicar

$server->register('listarClientes', // Nombre de la funcion
       array(), // Parametros de entrada
       array('return' => 'tns:listadoClientes'), // Parametros de salida
       $miURL
     );
Al igual que en los ejemplos anteriores debemos registrar/publiar el servicio web, para ello llamamos a el método register del server. Definimos que el servicio web expuesto llamará a la función "listarClientes" y que la misma retornará un tipo de datos tns:listadoClientes (el tipo de datos definido en el punto anterior).

Implementación de la función

Debemos implementar la función que será llamada cuando el cliente del webservice haga uso del mismo. En este caso será implementado por la función listarClientes().
function listarClientes() {
 $dao = new ClienteDAO();
 $listado = $dao->getList();
 $objSoporte = new SoporteWS();
 $respuesta = $objSoporte->convertirAVectorParaWS($listado);      
 return new soapval('return', 'tns:listadoClientes', $respuesta);
}
Esta función es muy similar a la del ejemplo 2, pero en este caso hacemos uso de un objeto auxiliar (que he creado y el código del mismo esta disponible para descargar al final del artículo) el cual se encarga de la conversión del vector de objetos, en un vector de vector. La conversión es realizada por el método convertirAVectorParaWS del objeto $objSoporte (el cual es de la clase SoporteWS). Al igual que en los ejemplos anteriores, debemos convertir la respuesta en un tipo de datos predefinido, en este caso es el que creamos recientemente (tns:listadoClientes).
Como se puede ver, una vez pasado el ejemplo 1, los pasos son más repetitivos, hemos incorporado algunos objetos de soporte para mantener el código limpio, e intentado hacer el ejemplo cada vez un poco más cercano al mundo real. 

Módulo Cliente

El módulo cliente es el mismo que el del ejemplo 2, simplemente modificamos el nombre del script del servidor y el nombre de la función a llamar. En este caso el script del servidor tiene como nombre "nusoap_server_ej3.php" y la función que vamos a hacer uso en el webservice es "listarClientes"
<?php
require_once('nusoap/lib/nusoap.php');
// Crear un cliente apuntando al script del servidor (Creado con WSDL)
$serverURL = 'http://pruebas.orlandobrea.com.ar';
$serverScript = 'nusoap_server_ej3.php';
$metodoALlamar = 'listarClientes';

$cliente = new nusoap_client("$serverURL/$serverScript?wsdl", 'wsdl');
// Se pudo conectar?
$error = $cliente->getError();
if ($error) {
 echo '<pre style="color: red">' . $error . '</pre>';
 echo '<p style="color:red;'>htmlspecialchars($cliente->getDebug(), ENT_QUOTES).'</p>';
 die();
}


// 2. Llamar a la funcion listadoClientes del servidor
$result = $cliente->call(
    $metodoALlamar,                     // Funcion a llamar
    array(),    // Parametros pasados a la funcion
    "uri:$serverURL/$serverScript",                   // namespace
    "uri:$serverURL/$serverScript/$metodoALlamar"       // SOAPAction
);
// Verificacion que los parametros estan ok, y si lo estan. mostrar rta.
if ($cliente->fault) {
    echo '<b>Error: ';
    print_r($result);
    echo '</b>';
} else {
    $error = $cliente->getError();
    if ($error) {
        echo '<b style="color: red">Error: ' . $error . '</b>';
    } else {
     echo 'Respuesta: ';
  print_r($result);
    }
}
?>

Conclusión

Una vez que vamos avanzando en los ejemplos de WebServices podemos ver la complejidad de los mismos se puede mantener en un nivel similar (ayudandonos de algunos objetos de soporte). Como ya se habrán dado cuenta, no voy a describir la implementación de la clase SoporteWS ya que el código de la misma es código PHP standard, y escapa a los fines del ejemplo. Para simplificar lo que hace esta clase es convertir un objeto en un vector, y un listado de objetos, en un vector de vector. En el próximo ejemplo voy a hacer un ejemplo del mundo real, en el cual se listan los usuarios y al hacer click sobre un enlace, podemos ver todos los datos del mismo. El código de este ejemplo se puede descargar aquí.
Espero que los ejemplos hayan podido introducir a todas aquellas personas que estan realizando webservices, o estan planeando realizar webservices con PHP y NuSOAP.  

AGREGADO: Enlace para descargar el ejemplo completo

5 nov 2009

Regalo de Google - Crédito para probar AdWords

En el día de ayer recibí un e-mail de google que me ofrecía $190.- de crédito para comenzar a utilizar AdWords (seguramente muchos recibieron esta promoción). Al que no lo recibió le comento de donde se originó el e-mail y porque me llego.

Hace un tiempo (varios años que utilizo Google Analytics para uno de mis sitios web) y realmente nunca me termine de inscribir en AdWords, quizás porque generalmente los sitios que manejo tienen un buen posicionamiento (obviamente, cuando les presto atención). Pero, volviendo al tema, al estar inscripto en Google Analytics, y no en AdWords, Google lanzó una campaña de promoción de AdWords, en la cual dan un crédito de ARS $190.- para aquellos que se quieran iniciar en AdWords.

Para acceder a esto, simplemente hay que pegar el código que viene en el e-mail de Google, en el campo de código de promoción cuando uno inicia la cuenta de AdWords. Y ya tenemos nuestra cuenta de AdWords creada (el monto total del cupón de Google es de $205, pero como Google AdWords cobra un gasto por inicio de la cuenta, terminan quedando $190.-).

Es importante tener en cuenta que si nosotros asociamos nuestra tarjeta de crédito, automáticamente deberíamos disponer de dicho saldo para operar. En cambio, si seleccionamos como medio de pago Banelco / PagoMisCuentas se debe realizar un deposito de $50.- como mínimo para comenzar a utilizar la cuenta. Yo lo veo bien, y en caso que AdWords sea tan bueno como algunos dicen, es bueno invertir solo $50.- para tener de crédito $240.-

Es cuestión de arriesgarse, y ver que pasa. Tantas veces invertimos en gustos más caros para que terminen tirados por algún rincón de nuestra casa, porque no invertir $50.- con la posibilidad de generar más tráfico y ventas en nuestro sitio web.

Otro punto importante que es importante destacar para los usuario de Google AdWords de Argentina, es que ahora tiene mayor cantidad de medios de pago (antes mencione algo), por ejemplo, permite pagar con tarjeta de crédito (que no es ninguna novedad), pero también incorporó la posibilidad de hacer los pagos a través de la red Banelco de cajeros automáticos (ATM), y del sitio web de PagoMisCuentas.

Bueno, luego les comentare que tal me fué con esta prueba que estoy realizando, gracias al crédito de Google. A todos aquellos que le hayan llegado el cupón, les recomiendo que lo prueben, es una muy buena oportunidad para hacer algunas pruebas.

Buscar la página de Google AdWords de tu país