Suds es un tremendo cliente SOAP para consumir web services es basado en Python a diferencia de los clientes en Java no hay generación de clases, y el API es tipo orientado a objetos. Y lo mejor es el poco código que se debe escribir para consumir un servicio web y para muestra un ejemplo sencillo:
Lo primero instalar el cliente ya sea descargándolo del sitio o instalando el paquetes si nuestra distribución de linux lo incluye en sus repositorios.
# fedora 15 yum -y install python-suds # tarball wget https://fedorahosted.org/releases/s/u/suds/python-suds-0.4.tar.gz tar xzvf python-suds-0.4.tar.gz cd python-suds-0.4 python setup.py install
Para el ejemplo utilizaremos uno de los webservices del sitio webservicesx.net
#!/usr/bin/env python from suds.client import Client url = 'http://www.webservicex.net/globalweather.asmx?WSDL' client = Client(url) print client
si todo esta correcto la salida del script mostrara esto:
web service output
Suds ( https://fedorahosted.org/suds/ ) version: 0.3.9 GA build: R659-20100219
Service ( GlobalWeather ) tns="http://www.webserviceX.NET"
Prefixes (0)
Ports (2):
(GlobalWeatherSoap)
Methods (2):
GetCitiesByCountry(xs:string CountryName, )
GetWeather(xs:string CityName, xs:string CountryName, )
Types (0):
(GlobalWeatherSoap12)
Methods (2):
GetCitiesByCountry(xs:string CountryName, )
GetWeather(xs:string CityName, xs:string CountryName, )
Types (0):
El servicio web tiene 2 metodos los cuales podemos invocar de la siguiente manera:
#!/usr/bin/env python
from suds.client import Client
url = 'http://www.webservicex.net/globalweather.asmx?WSDL'
client = Client(url)
#print client
weather = client.service.GetWeather('Managua', 'Nicaragua')
print weather
esto generara un string conteniendo el xml para que luego pueda ser procesado según se requiera .
<?xml version="1.0" encoding="utf-16"?> <CurrentWeather> <Location>Managua A. C. Sandino, Nicaragua (MNMG) 12-09N 086-10W 56M</Location> <Time>Jul 18, 2011 - 12:00 AM EDT / 2011.07.18 0400 UTC</Time> <Wind> from the ESE (110 degrees) at 5 MPH (4 KT):0</Wind> <Visibility> greater than 7 mile(s):0</Visibility> <SkyConditions> partly cloudy</SkyConditions> <Temperature> 77 F (25 C)</Temperature> <DewPoint> 73 F (23 C)</DewPoint> <RelativeHumidity> 88%</RelativeHumidity> <Pressure> 29.88 in. Hg (1011 hPa)</Pressure> <Status>Success</Status> </CurrentWeather>
Referencias:
Python Suds
Por lo general cuando desarrollo una aplicación usando Zend Framework esta es desplegada en servidores compartidos donde no es posible realizar una configuración de virtual host en Apache. por lo que utilizo una estructura diferente para la aplicacion
home
|-- [account]
|-- zend_apps
| |-- mobile
| |-- application
| |-- docs
| |-- library
| `-- test
`-- zf
| `-- library
`-- public_html
`-- mobile
|-- css
|-- img
|-- js
|-- index.php
`-- .htaccess
de tal modo que las aplicaciones quedan dentro del directorio “zend_apps”, las librerías del framework en “zf” y los archivos que seran publicos(hojas de estilo, imagenes y javascript) en un folder dentro del directorio raiz del sitio o si se requiere en el mismo directorio raiz “public_html” y solo se modifica el index.php y el archivos .htaccess para corregir las rutas.
<?php
// file: index.php
$apps_path = getenv('ZendApps'); // applications path
$zf_libs = getenv('ZFpath'); // Zend Framework libs path
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', $apps_path . DIRECTORY_SEPARATOR . 'mobile/application');
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
realpath($zf_libs . '/library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run();
Para que los cambios funcionen es necesario agregar variables de entorno en el htaccess utilizando las directivas del modulo de Apache mod_env en el cual debe estar habilitado en el servidor y tendremos un htaccess como este:
# htaccess
SetEnv ZendApps "/home/username/zend_apps"
SetEnv ZFpath "/home/username/zf"
SetEnv APPLICATION_ENV "production"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
con este cambio la aplicacion funcionara correctamente y no es necesario configurar un virtual host.
El SDK de Android esta hecho para 32bits para ponerlo a funcionar en Fedora 14 x86-64(64 bits) y correr el emulador usando el JDK de 64 bits requiere instalar librerias de 32 bits; accediendo como usuario root instalamos lo siguiente:
su - yum install ncurses-libs.i686 libstdc++.i686 glibc.i686 libX11-devel.i686 \ glibc.i686 SDL.i686 libX11.i686 libXext.i686 libao.i686 alsa-lib.i686 -y
Descargamos el SDK del sitio de Android http://developer.android.com/sdk/index.html
Linux (i386) | android-sdk_r10-linux_x86.tgz | 26981997 bytes | c022dda3a56c8a67698e6a39b0b1a4e0
descomprimimos el archivos, desde la terminal ejecutamos
cd android-sdk-linux_x86/tools ./android
descargamos el SDK con la version del API que vayamos a utilizar y listo solo queda configurar el dispositivo y probarlo.
El dispositivo puede crearse desde la consola o desde la aplicacion grafica.
# creando el dispositivo desde la consola cd android-sdk-linux_x86/tools ./android create avd -c 256M -t 1 -n android_223 -a -s WQVGA400 --force
al igual el emulador se puede arrancar desde la consola o la aplicacion.
# ejecutando el emulador cd android-sdk-linux_x86/tools ./emulator -cpu-delay 0 -no-boot-anim -cache ./cache -verbose -avd android_223
las opciones -cpu-delay 0 -no-boot-anim -cache ./cache, mejora un poco el rendimiento haciendo mas responsivo el emulador.
referencia: