martes, 5 de marzo de 2013

Parsear un XML desde líneas de comandos


XMLStarlet Logo

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&timeserietypeID=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!

Obtener temperaturas de estaciones meteorológicas en Noruega

Hace poco tenía que hacer un pequeño trabajo para la universidad, tenía que obtener la temperatura actual de algunas estaciones meteorológicas de la zona (Stavanger, Noruega). Por suerte encontré una API por la cual se puede realizar una consulta a las estaciones directamente y esa api devuelve el resultado en XML. Decidí resolver el trabajo en bash ya que en principio sólo tenía que sacar la temperatura.



Empecemos por el principio, la api para la consulta de las estaciones es eklima y voy a utilizar la siguiente función getMetData&timeserietype con los parámetros:
  • ID=2 #2 es Obstevations
  • format= # Se deja vacío y se deja el formato por defecto
  • from=2013-02-01
  • to=2013-2-03
  • stations=44560 #Estación de Valand, la más cercana a Stavanger (listado de todas las estaciones en Noruega: http://eklima.met.no/Help/Stations/toDay/all/en_Stations.html)
  • elements=TA #Temperatura actual
  • 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 #Todas las horas
  • months=
  • username=
Por lo que la url resultante sería:

http://eklima.met.no/metdata/MetDataService?invoke=getMetData&timeserietypeID=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=

Para ver una explicación más detallada sobre los parámetros, ver aquí: Data

Esta consulta nos deja la siguiente salida un tanto grande y tenemos que parsearla para sacar la información que necesitamos, para ello utilizaremos la aplicación xmlstarlet, pero eso lo explicaremos en el siguiente artículo.

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!

sábado, 12 de mayo de 2012

Impresora HP LaserJet en Ubuntu

Parece que el día de hoy va sobre problemas con las impresoras. Antes ya vimos como arreglar el problema con el escáner EPSON DX440 y ahora nos encontramos con un inconveniente más que con un problema. En este caso estamos hablando de la impresora LaserJet CP1525n que se encuentra en red, para configurarla en local hay que hacer pŕacticamente lo mismo pero sin tener que buscarla en la red.

Para configurarla vamos a  "Sistema" > "Administración" > "Impresión". Ahí elijes "Añadir" y después "Impresora de red", esperad unos segundos y eligid la que ponga "HP LaserJet CP1525N" pero la que tenga su dirección ip entre paréntesis, si sale otra con la dirección mac no le deis que no os va a funcionar. Seleccionarla y darle a "Siguiente", elige "HP" de la lista, otra vez a "Siguiente". Aquí es dónde está el inconveniente, el modelo de la impresora no sale y si intentáis instalar el más cercano (LaserJet CP1000 y pico) no funcionará, tenéis que darle a "Color Laser Jet" y de los 2 que te da a elegir, seleccionar "HP Color LaserJet Series PCL 6 CUPS". Ahora solo queda darle a "Sigueinte" un par de veces (la opción duplexer es para imprimir a dos caras, este modelo no lo tiene así que no se marca). Finalmente elegid un nombre para la impresora y le dais a "Aplicar".

¡Listo ya tenéis la impresora perfectamente instalada!

Fuente: Ubuntuforums
Foto: Wikipedia

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!

Problema con escáner EPSON en Ubuntu


Hace poco necesitaba escanerar e imprimir unos documentos con la impresora multifunción EPSON DX440, yo confiado de que funcionarían perfectamente en Ubuntu me puse a la tarea. Cual fue mi sorpresa cuando el escáner no funcionaba (aunque la impresora funcionaba sin problemas) rápidamente me puse a buscar y encontré una solución que pasa por instalar un programa llamado iscan.

Dicho programa se encuentra en esta página Avasys, simplemente buscar vuestra impresora y bajaros los archivos, para ser más exactos en mi caso fueron:

    • iscan_2.28.1-3.ltdl7_amd64.deb
    • iscan-plugin-cx4400_2.1.3-1_amd64.deb

Pero al disponerme a instalarlos, el primer archivo necesita otra dependecia: iscan-data que la última versión se encuentra aquí.

Fuente: Ubuntu-es

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!