Usa JSON en el protocolo de datos de Google

Advertencia: Esta página trata sobre las API anteriores de Google, las API de datos de Google, y solo es relevante para las API que aparecen en el directorio de las API de datos de Google, muchas de las cuales se reemplazaron con API más nuevas. Para obtener información sobre una API nueva específica, consulta la documentación de la API nueva. Para obtener información sobre cómo autorizar solicitudes con una API más reciente, consulta Autenticación y autorización de cuentas de Google.

Este artículo abarca JSON, ya que se utiliza en el protocolo de datos de Google. Para obtener más información sobre el protocolo, consulta la guía para programadores.

Puedes usar JSON con cualquier lenguaje de programación, pero los ejemplos de este documento están en JavaScript.

Acerca de los feeds en formato JSON y XML

Un servicio de datos de Google crea un feed en formato JSON convirtiendo el feed XML mediante las siguientes reglas:

Básico

  • El feed se representa como un objeto JSON; cada elemento o atributo anidado se representa como una propiedad de nombre/valor del objeto.
  • Los atributos se convierten en propiedades de string.
  • Los elementos secundarios se convierten en propiedades de objeto.
  • Los elementos que pueden aparecer más de una vez se convierten en propiedades de arreglo.
  • Los valores de texto de las etiquetas se convierten en propiedades $t.

Espacio de nombres

  • Si un elemento tiene un alias de espacio de nombres, el alias y el elemento se concatenan con “$”. Por ejemplo, ns:element se convierte en ns$element.

XML

  • La versión XML y los atributos de codificación se convierten en atributos de versión y codificación del elemento raíz, respectivamente.

En el siguiente ejemplo, se muestran las versiones XML y JSON del mismo feed. Tiene pestañas para facilitar la comparación.

XML

<?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:gd="http://schemas.google.com/g/2005"
    xmlns:gCal="http://schemas.google.com/gCal/2005">
  <id>...</id>
  <updated>2006-11-12T21:25:30.000Z</updated>
  <title type="text">Google Developer Events</title>
  <subtitle type="text">The calendar contains information about upcoming
    developer conferences at which Google will be speaking, along with
    other developer-related events.</subtitle>
  <link rel="http://schemas.google.com/g/2005#feed"
    type="application/atom+xml" href="..." />
  <link rel="self" type="application/atom+xml" href="..." />
  <author>
    <name>Google Developer Calendar</name>
    <email>developer-calendar@google.com</email>
  </author>
  <generator version="1.0"
    uri="http://www.google.com/calendar">Google Calendar</generator>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>25</openSearch:itemsPerPage>
  <gCal:timezone value="America/Los_Angeles" />
    
  <entry>
    <id>...</id>
    <published>2006-11-12T21:25:30.000Z</published>
    <updated>2006-11-12T21:25:30.000Z</updated>
    <category scheme="..." term="..." />
    <title type="text">WebmasterWorld PubCon 2006:
      Google Developer Tools in General</title>
    <content type="text">Google is sponsoring at 
      <a href="http://www.pubcon.com/">WebmasterWorld PubCon 2006</a>. Come and
      visit us at the booth or join us for an evening demo reception where we
      will be talking "5 ways to enhance your website with Google Code". 
      After all, it is Vegas, baby! See you soon.</content>
    <link rel="alternate" type="text/html" href="..." title="alternate" />
    <link rel="self" type="application/atom+xml" href="..." />
    <author>
      <name>Google Developer Calendar</name>
      <email>developer-calendar@google.com</email>
    </author>
    <gCal:sendEventNotifications value="true" />
    <gd:comments>
       <gd:feedLink href="..." />
    </gd:comments>
    <gd:transparency value="..." />
    <gd:eventStatus value="..." />
    <gd:where valueString="3150 Paradise Road, Las Vegas, NV 89109" />
    <gd:when startTime="2006-11-15" endTime="2006-11-17">
      <gd:reminder minutes="10" />
    </gd:when>
  </entry>
  ...
</feed>
    

JSON

{
"version": "1.0", "encoding": "UTF-8", "feed": { "xmlns": "http://www.w3.org/2005/Atom", "xmlns$openSearch": "http://a9.com/-/spec/opensearchrss/1.0/", "xmlns$gd": "http://schemas.google.com/g/2005", "xmlns$gCal": "http://schemas.google.com/gCal/2005", "id": {"$t": "..."}, "updated": {"$t": "2006-11-12T21:25:30.000Z"}, "title": { "type": "text", "$t": "Google Developer Events" }, "subtitle": { "type": "text", "$t": "The calendar contains information about upcoming developer conferences at which Google will be speaking, along with other developer-related events." }, "link": [{ "rel": "...", "type": "application/atom+xml", "href": "..." },{ "rel": "self", "type": "application/atom+xml", "href": "..." }], "author": [{ "name": {"$t": "Google Developer Calendar"}, "email": {"$t": "developer-calendar@google.com"} }], "generator":{ "version": "1.0", "uri": "http://www.google.com/calendar", "$t": "Google Calendar" }, "openSearch$startIndex": {"$t": "1"}, "openSearch$itemsPerPage": {"$t": "25"}, "gCal$timezone": {"value": "America/Los_Angeles"}, "entry": [{ "id": {"$t": "..."}, "published": {"$t": "2006-11-12T21:25:30.000Z"}, "updated": {"$t": "2006-11-12T21:25:30.000Z"}, "category": [{ "scheme": "...", "term": "..." }], "title":{ "type": "text", "$t": "WebmasterWorld PubCon 2006: Google Developer Tools in General" }, "content": { "type": "text", "$t": "Google is sponsoring at <a href="http://www.pubcon.com/">WebmasterWorld PubCon 2006</a>. \nCome and visit us at the booth or join us for an evening demo reception where we will be talking "5 ways to enhance your website with Google Code".\nAfter all,\nit is Vegas, baby! See you soon." }, "link": [{ "rel": "alternate", "type": "text/html", "href": "...", "title": "alternate" },{ "rel": "self", "type": "application/atom+xml", "href": "..." }], "author": [{ "name": {"$t": "Google Developer Calendar"}, "email": {"$t": "developer-calendar@google.com"} }], "gd$transparency": {"value": "http://schemas.google.com/g/2005#event.opaque"}, "gd$eventStatus": {"value": "http://schemas.google.com/g/2005#event.confirmed"}, "gd$comments": {"gd$feedLink": {"href": "..."}}, "gCal$sendEventNotifications": {"value": "true"}, "gd$when": [{ "startTime": "2006-11-15", "endTime": "2006-11-17", "gd$reminder": [{"minutes": "10"}] }], "gd$where": [{"valueString": "3150 Paradise Road,Las Vegas,NV 89109"}]}, }] } }

Cómo solicitar y usar feeds JSON

Atom es el formato predeterminado de los datos de Google. Si no especificas un parámetro alt en tu solicitud, recibirás un feed de Atom.

Nota: Las bibliotecas cliente de datos de Google actualmente no admiten JSON.

Salida de JSON

Para solicitar una respuesta en formato JSON, usa el parámetro alt=json.

Por ejemplo, para solicitar el feed de calendario de programadores de Google en formato JSON, envía la siguiente consulta:

http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json

Salida JSON en la secuencia de comandos

Para solicitar una respuesta que una el JSON en una etiqueta de secuencia de comandos, usa el parámetro alt=json-in-script y agrega una función de devolución de llamada mediante el parámetro callback=functionName.

http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json-in-script&callback=myFunction

El uso de funciones de devolución de llamada te permite evitar algunos de los problemas de seguridad multidominio que podrías encontrar en el código JavaScript típico del cliente. Por lo general, los navegadores evitan que cargues archivos entre dominios debido a posibles brechas de seguridad y ataques de dominio cruzado que podrían producirse.

El formato JSON en secuencia de comandos te permite evitar estas restricciones mediante la carga de la respuesta en una etiqueta de secuencia de comandos en el cliente. Esto significa que puedes usar la respuesta en otras partes del código JavaScript en esa página. El resultado de JSON se carga cuando se carga la página; no se necesitan otros trucos.

La aplicación de trabajo simple que se muestra a continuación demuestra esta técnica:

<h3>Upcoming Google Developer Events</h3>

<div id="agenda"></div>

<script>
  function listEvents(root) {
    var feed = root.feed;
    var entries = feed.entry || [];
    var html = ['<ul>'];

    for (var i = 0; i < entries.length; ++i) {
      var entry = entries[i];
      var title = (entry.title.type == 'html') ? entry.title.$t : escape(entry.title.$t);
      var start = (entry['gd$when']) ? entry['gd$when'][0].startTime : "";	

      html.push('<li>', start, ' ', title, '</li>');
    }

    html.push('</ul>');
    document.getElementById("agenda").innerHTML = html.join("");
  }
</script>

<script src="http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json-in-script&callback=listEvents">
</script>

Ejemplos

Para ver ejemplos prácticos de cómo usar JSON con las API de datos de Google, consulta la página de muestras.

Recursos adicionales

Existen varios recursos externos que te recomendamos consultar para obtener más información sobre JSON y el uso de JSON en aplicaciones web.

Volver al principio