Introducción
Actualmente estoy desarrollando un aplicativo que debe manipular los contactos de una cuanta de Google Apps. Para ello uso el API de Google Contacts [1], Por defecto los mensajes que envía y recibe Google a través de su servicio (REST) son en XML. Como programador no supone un problema manipular un XML, pero si queremos depurar o hacer pruebas en consola leer un XML sin espacios, saltos de línea o tabulados puede ser especialmente engorroso.
Una solución es usar una herramienta cómo indent, pero para XML.Esta herramienta es tidy.
Instalar tidy en Debian/Ubuntu y cómo usarlo
Para instalar Tidy sólo hay que teclear:
sudo apt-get install tidy
Un ejemplo de uso sería, dado un fichero entrada.xml sin formatear, sin saltos de línea ni espacios si queremos guardarlo en un fichero salida.xml preparado para leerlo seres humanos podríamos hacerlo con la secuencia de comandos:
cat entrada.xml | tidy -utf8 -xml -w 255 -i -c -q -asxml > salida.xml
Para más opciones de tidy, leer su página de manual en la referencia [3].
Ejemplo de uso con el API de Google
Visto el apartado anterior y los ejemplos de uso visto en el enlace [1] podemos obtener la información de un contacto de nuestra libreta de contactos de Google en XML con el comando:
$ curl -H "Authorization: Bearer -------Your_OAuth_Access_Token_Here-----------------" https://www.google.com/m8/feeds/contacts/default/full?max-results=1 |tidy -utf8 -xml -w 255 -i -c -q -asxml % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2799 0 2799 0 0 6327 0 --:--:-- --:--:-- --:--:-- 87545 <?xml version='1.0' encoding='utf-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gContact='http://schemas.google.com/contact/2008' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gd='http://schemas.google.com/g/2005'> <id>jose.perez.martinez@gmail.com</id> <updated>2013-09-27T10:14:56.316Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact' /> <title type='text'>José Pérez MartÃnez's Contacts</title> <link rel='alternate' type='text/html' href='http://www.google.com/' /> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/jose.perez.martinez%40gmail.com/full' /> <link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/jose.perez.martinez%40gmail.com/full' /> <link rel='http://schemas.google.com/g/2005#batch' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/jose.perez.martinez%40gmail.com/full/batch' /> <link rel='self' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/jose.perez.martinez%40gmail.com/full?max-results=1' /> <link rel='next' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/jose.perez.martinez%40gmail.com/full?start-index=2&max-results=1' /> <author> <name>José Pérez MartÃnez</name> <email>jose.perez.martinez@gmail.com</email> </author> <generator version='1.0' uri='http://www.google.com/m8/feeds'>Contacts</generator> <openSearch:totalResults>616</openSearch:totalResults> <openSearch:startIndex>1</openSearch:startIndex> <openSearch:itemsPerPage>1</openSearch:itemsPerPage> <entry> <id>http://www.google.com/m8/feeds/contacts/jose.perez.martinez%40gmail.com/base/0</id> <updated>2011-02-23T13:06:29.313Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact' /> <title type='text'>Alejandro Soler</title> <link rel='http://schemas.google.com/contacts/2008/rel#edit-photo' type='image/*' href='https://www.google.com/m8/feeds/photos/media/jose.perez.martinez%40gmail.com/0/jLnPaGKk4gRrJJff1sWXhg' /> <link rel='http://schemas.google.com/contacts/2008/rel#photo' type='image/*' href='https://www.google.com/m8/feeds/photos/media/jose.perez.martinez%40gmail.com/0' /> <link rel='self' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/jose.perez.martinez%40gmail.com/full/0' /> <link rel='edit' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/jose.perez.martinez%40gmail.com/full/0/1298466389313000' /> <gd:email rel='http://schemas.google.com/g/2005#other' address='kirth.asf@gmail.com' primary='true' /> </entry> </feed>
Notad que la gestión del token para obtener esta información es responsabilidad del usuario. PAra saber más leed la referencia [2]
Postscriptum: Más adelante escribiré una entrada sobre el API de Google y el protocolo de autorización OAuth2.
Referencias
- Google Contacts API version 3.0:https://developers.google.com/google-apps/contacts/v3/?csw=1
- Using OAuth 2.0 for Web Server Applications: target=”_blank”>https://developers.google.com/accounts/docs/OAuth2WebServer
- Tidy man page: http://tidy.sourceforge.net/docs/tidy_man.html