En el anterior artículo hemos visto como utilizar la API de eklima para obtener un XML con las temperatura de un par de días con la frecuencia de cada hora. Ahora tenemos que parsear la salida con una aplicación llamada xmlstarlet. Para ello vamos a utilizar el siguiente comando:
xmlstarlet sel --text -t -m '//timeStamp/item' \ #la opcion -m es para iterar en cada resultado del xpath anterior
-o 'From: ' -v from \ # -o imprime un string y -v imprime un nodo que se encuentra dentro del xpath anterior
-o ' Station: ' -v 'location/item/id' \ #podemos seguir navegando dentro del XML
-o ' Element: ' -v 'location/item/weatherElement/item/id' \
-o ' Quality: ' -v 'location/item/weatherElement/item/quality' \
-o ' Value: ' -v 'location/item/weatherElement/item/value' -n \
output.xml #archivo XML
Con este comando obtenemos una salida como esta:
From: 2013-02-01T00:00:00.000Z Station: 44560 Element: TA Quality: 0 Value: -1.9
From: 2013-02-01T01:00:00.000Z Station: 44560 Element: TA Quality: 0 Value: -2
From: 2013-02-01T02:00:00.000Z Station: 44560 Element: TA Quality: 0 Value: -1.8
From: 2013-02-01T03:00:00.000Z Station: 44560 Element: TA Quality: 0 Value: -1.2
From: 2013-02-01T04:00:00.000Z Station: 44560 Element: TA Quality: 0 Value: -1.8
.....
Si queremos hacer la petición a la API y el parseo en un comando:
curl --request GET "http://eklima.met.no/metdata/MetDataService?invoke=getMetData×erietypeID=2&format=&from=2013-02-01&to=2013-2-03&stations=44560&elements=TA&hours=0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23&months=&username=" \
| xmlstarlet sel --text -t -m '//timeStamp/item' \
-o 'From: ' -v from \
-o ' Station: ' -v 'location/item/id' \
-o ' Element: ' -v 'location/item/weatherElement/item/id' \
-o ' Quality: ' -v 'location/item/weatherElement/item/quality' \
-o ' Value: ' -v 'location/item/weatherElement/item/value' -n
Si necesitas parsear un XML de forma rápida y eficaz, recuerde utilizar esta la aplicación xmlstarlet.
Si tienen alguna duda sobre este artículo o algún otro tema en el que pueda ser útil, no dude en mandarme un mail a: bobsfera@gmail.com o escribe un comentario!