Crear una clase para obtener el clima en PowerShell 5.0| PowerShell

En publicaciones anteriores mostramos como a través de la nueva versión de PowerShell 5.0, contamos con la posibilidad de crear clases en forma nativa mediante palabras reservadas.

En esta oportunidad, quiero aprovechar esa nueva funcionalidad, para mostrarles cómo realizar una clase que mediante un web service, pueda obtener el clima de una ciudad.

¿Cómo lo realizo?

Primero generamos la clase, en este caso la llame Weather (no muy original)

Class Weather{

}

Como pueden observar utilizo la palabra reservada Class

Luego vamos a comenzar por los métodos que va a tener nuestra clase, en este caso generaremos:

  • Un método para obtener las ciudades que puedo consultar su clima, pasando como parámetro el país.
  • Un método para obtener el clima
Class Weather{

[System.Object]ObtenerCiudadesPais([string] $Pais)
{
$URI = "http://www.webservicex.net/globalweather.asmx?wsdl"
$Proxy = New-WebServiceProxy -uri $URI -namespace WebServiceProxy
[xml] $xml = $Proxy.GetCitiesByCountry($Pais)

return $xml.NewDataSet.Table
}

}

El primer método que generamos, obtiene la ciudades devolviendo un objeto del tipo System.Object, que son los datos del DataSet devuelto por el WebService.

En la variable $URI, asignamos la dirección del servicio web que vamos a consumir para consultar el clima, en este caso http://www.webservicex.net/globalweather.asmx?wsdl

La variable $Proxy, la inicializamos mediante el cmdLet New-WebServiceProxy. Dicho comando nos permite utilizar y consumir fácilmente servicios web a través de internet para intercambiar información.

Luego declaramos una variable del tipo XML, en este caso $xml para obtener la información provista por el método “GetCitiesByCountry(string Country)” que nos brinda el servicio web que estamos consumiendo.

Si observan, le estamos pasando por parámetro el país a nuestra función “ObtenerCiudadesPais“, que luego utilizamos en el método provisto por el servicio web $Proxy.GetCitiesByCountry($Pais)

Por último, retornamos los datos obtenidos en el XML.

Ahora agregaremos la función para obtener el clima:

Class Weather{

[System.Object]ObtenerCiudadesPais([string] $Pais)
{

$URI = "http://www.webservicex.net/globalweather.asmx?wsdl"
$Proxy = New-WebServiceProxy -uri $URI -namespace WebServiceProxy
[xml] $xml = $Proxy.GetCitiesByCountry($Pais)

return $xml.NewDataSet.Table
}

[System.Xml.XmlElement]ObtenerClima([String]$Ciudad,[String]$Pais)
{
$URI = "http://www.webservicex.net/globalweather.asmx?wsdl"
$Proxy = New-WebServiceProxy -uri $URI -namespace WebServiceProxy
[xml] $xml = $Proxy.GetWeather($Ciudad,$Pais)

return $xml.DocumentElement

}

}

La diferencia con el primer método creado son las siguientes:

• Utilizamos el método “GetWeather(String Country)” provisto por el servicio web para obtener el clima.
• En lugar de retornar un Sytem.Object, hacemos más específico el tipo y retornamos un XmlElement.

¿Cómo lo utilizamos?

Desde el Poweshell ISE, ejecutamos el codigo presionando F5 y luego:

Instanciamos un objeto del tipo Weather (nuestra clase)

$Clima = [Weather]::new()

Captura1

Una vez instanciado, utilizamos los métodos por ejemplo:

$Clima.ObtenerCiudadesPais("Argentina")

Captura2

Elijo una ciudad (Más que una ciudad son ubicaciones donde se toman mediciones supongo), en este caso “Ezeiza Aerodrome

$Clima.ObtenerClima("Ezeiza Aerodrome","Argentina")

Captura3

Conclusión

Como vemos, PowerShell no solo es útil para administrar servidores o un datacenter, también sirve para consultar el clima 😀

Saludos!!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

Up ↑

%d bloggers like this: