API de Google: Cómo leer en consola un XML del API de Google (u otro XML)

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

  1. Google Contacts API version 3.0:https://developers.google.com/google-apps/contacts/v3/?csw=1
  2. Using OAuth 2.0 for Web Server Applications: target=”_blank”>https://developers.google.com/accounts/docs/OAuth2WebServer
  3. Tidy man page: http://tidy.sourceforge.net/docs/tidy_man.html

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *