{"id":173,"date":"2013-09-27T10:37:33","date_gmt":"2013-09-27T10:37:33","guid":{"rendered":"https:\/\/blogs.ua.es\/jpm33\/?p=173"},"modified":"2013-09-27T10:39:56","modified_gmt":"2013-09-27T10:39:56","slug":"api-de-google-como-leer-en-consola-un-xml-del-api-de-google-u-otro-xml","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/jpm33\/2013\/09\/27\/api-de-google-como-leer-en-consola-un-xml-del-api-de-google-u-otro-xml\/","title":{"rendered":"API de Google: C\u00f3mo leer en consola un XML del API de Google (u otro XML)"},"content":{"rendered":"<h1>Introducci\u00f3n<\/h1>\n<p>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\u00eda y recibe Google a trav\u00e9s 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\u00ednea o tabulados puede ser especialmente engorroso.<\/p>\n<p>Una soluci\u00f3n es usar una herramienta c\u00f3mo <strong>indent<\/strong>, pero para XML.Esta herramienta es <strong>tidy<\/strong>.<\/p>\n<h1>Instalar tidy en Debian\/Ubuntu y c\u00f3mo usarlo<\/h1>\n<p>Para instalar Tidy s\u00f3lo hay que teclear:<\/p>\n<pre>sudo apt-get install tidy<\/pre>\n<p>Un ejemplo de uso ser\u00eda, dado un fichero <strong>entrada.xml<\/strong>\u00a0sin formatear, sin saltos de l\u00ednea ni espacios si queremos guardarlo en un fichero <strong>salida.xml<\/strong> preparado para leerlo seres humanos podr\u00edamos hacerlo con la secuencia de comandos:<\/p>\n<pre>cat entrada.xml | tidy -utf8 -xml -w 255 -i -c -q -asxml &gt; salida.xml<\/pre>\n<p>Para m\u00e1s opciones de tidy, leer su p\u00e1gina de manual en la referencia [3].<\/p>\n<h1>Ejemplo de uso con el API de Google<\/h1>\n<p>Visto el apartado anterior y los ejemplos de uso visto en el enlace [1] podemos obtener la informaci\u00f3n de un contacto de nuestra libreta de contactos de Google en XML con el comando:<\/p>\n<pre>$ 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\r\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\r\n                                 Dload  Upload   Total   Spent    Left  Speed\r\n100  2799    0  2799    0     0   6327      0 --:--:-- --:--:-- --:--:-- 87545\r\n&lt;?xml version='1.0' encoding='utf-8'?&gt;\r\n&lt;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'&gt;\r\n  &lt;id&gt;jose.perez.martinez@gmail.com&lt;\/id&gt;\r\n  &lt;updated&gt;2013-09-27T10:14:56.316Z&lt;\/updated&gt;\r\n  &lt;category scheme='http:\/\/schemas.google.com\/g\/2005#kind' term='http:\/\/schemas.google.com\/contact\/2008#contact' \/&gt;\r\n  &lt;title type='text'&gt;Jos\u00c3\u00a9 P\u00c3\u00a9rez Mart\u00c3\u00adnez's Contacts&lt;\/title&gt;\r\n  &lt;link rel='alternate' type='text\/html' href='http:\/\/www.google.com\/' \/&gt;\r\n  &lt;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' \/&gt;\r\n  &lt;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' \/&gt;\r\n  &lt;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' \/&gt;\r\n  &lt;link rel='self' type='application\/atom+xml' href='https:\/\/www.google.com\/m8\/feeds\/contacts\/jose.perez.martinez%40gmail.com\/full?max-results=1' \/&gt;\r\n  &lt;link rel='next' type='application\/atom+xml' href='https:\/\/www.google.com\/m8\/feeds\/contacts\/jose.perez.martinez%40gmail.com\/full?start-index=2&amp;max-results=1' \/&gt;\r\n  &lt;author&gt;\r\n    &lt;name&gt;Jos\u00c3\u00a9 P\u00c3\u00a9rez Mart\u00c3\u00adnez&lt;\/name&gt;\r\n    &lt;email&gt;jose.perez.martinez@gmail.com&lt;\/email&gt;\r\n  &lt;\/author&gt;\r\n  &lt;generator version='1.0' uri='http:\/\/www.google.com\/m8\/feeds'&gt;Contacts&lt;\/generator&gt;\r\n  &lt;openSearch:totalResults&gt;616&lt;\/openSearch:totalResults&gt;\r\n  &lt;openSearch:startIndex&gt;1&lt;\/openSearch:startIndex&gt;\r\n  &lt;openSearch:itemsPerPage&gt;1&lt;\/openSearch:itemsPerPage&gt;\r\n  &lt;entry&gt;\r\n    &lt;id&gt;http:\/\/www.google.com\/m8\/feeds\/contacts\/jose.perez.martinez%40gmail.com\/base\/0&lt;\/id&gt;\r\n    &lt;updated&gt;2011-02-23T13:06:29.313Z&lt;\/updated&gt;\r\n    &lt;category scheme='http:\/\/schemas.google.com\/g\/2005#kind' term='http:\/\/schemas.google.com\/contact\/2008#contact' \/&gt;\r\n    &lt;title type='text'&gt;Alejandro Soler&lt;\/title&gt;\r\n    &lt;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' \/&gt;\r\n    &lt;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' \/&gt;\r\n    &lt;link rel='self' type='application\/atom+xml' href='https:\/\/www.google.com\/m8\/feeds\/contacts\/jose.perez.martinez%40gmail.com\/full\/0' \/&gt;\r\n    &lt;link rel='edit' type='application\/atom+xml' href='https:\/\/www.google.com\/m8\/feeds\/contacts\/jose.perez.martinez%40gmail.com\/full\/0\/1298466389313000' \/&gt;\r\n    &lt;gd:email rel='http:\/\/schemas.google.com\/g\/2005#other' address='kirth.asf@gmail.com' primary='true' \/&gt;\r\n  &lt;\/entry&gt;\r\n&lt;\/feed&gt;<\/pre>\n<p>Notad que la gesti\u00f3n del <b>token<\/b> para obtener esta informaci\u00f3n es responsabilidad del usuario. PAra saber m\u00e1s leed la referencia [2]<\/p>\n<p>Postscriptum: M\u00e1s adelante escribir\u00e9 una entrada sobre el API de Google y el protocolo de autorizaci\u00f3n OAuth2.<\/p>\n<h1>Referencias<\/h1>\n<ol>\n<li>Google Contacts API version 3.0:<a href=\"https:\/\/developers.google.com\/google-apps\/contacts\/v3\/?csw=1\" target=\"_blank\">https:\/\/developers.google.com\/google-apps\/contacts\/v3\/?csw=1<\/a><\/li>\n<li>Using OAuth 2.0 for Web Server Applications: <a href=\"https:\/\/developers.google.com\/accounts\/docs\/OAuth2WebServer\"> target=&#8221;_blank&#8221;&gt;https:\/\/developers.google.com\/accounts\/docs\/OAuth2WebServer<\/a><\/li>\n<li>Tidy man page: <a href=\"http:\/\/tidy.sourceforge.net\/docs\/tidy_man.html\" target=\"_blank\">http:\/\/tidy.sourceforge.net\/docs\/tidy_man.html<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n 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\u00eda y recibe Google a trav\u00e9s de su servicio &hellip; <a href=\"https:\/\/blogs.ua.es\/jpm33\/2013\/09\/27\/api-de-google-como-leer-en-consola-un-xml-del-api-de-google-u-otro-xml\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3080,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[676],"tags":[],"class_list":["post-173","post","type-post","status-publish","format-standard","hentry","category-sin-categoria"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/users\/3080"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/comments?post=173"}],"version-history":[{"count":3,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/173\/revisions"}],"predecessor-version":[{"id":175,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/173\/revisions\/175"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/media?parent=173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/categories?post=173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/tags?post=173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}