Utiliser JSON dans le protocole de données Google

Avertissement: Cette page concerne les anciennes API Google, les API Google Data. Elle ne concerne que les API répertoriées dans l'annuaire des API Google Data, dont la plupart ont été remplacées par de nouvelles API. Pour en savoir plus sur une nouvelle API spécifique, consultez sa documentation. Pour en savoir plus sur l'autorisation des requêtes avec une API plus récente, consultez Authentification et autorisation des comptes Google.

Cet article concerne le format JSON, car il est utilisé dans le cadre du protocole de données Google. Pour en savoir plus sur le protocole, consultez le guide du développeur.

Vous pouvez utiliser JSON avec n'importe quel langage de programmation, mais les exemples présentés dans ce document sont en JavaScript.

À propos des flux JSON et XML

Un service de données Google crée un flux au format JSON en convertissant le flux XML à l'aide des règles suivantes:

Basic

  • Le flux est représenté sous la forme d'un objet JSON. Chaque élément ou attribut imbriqué est représenté sous la forme d'une propriété de nom/valeur de l'objet.
  • Les attributs sont convertis en propriétés de chaîne.
  • Les éléments enfants sont convertis en propriétés d'objet.
  • Les éléments qui peuvent apparaître plusieurs fois sont convertis en propriétés de tableau.
  • Les valeurs textuelles des balises sont converties en propriétés $t.

Namespace

  • Si un élément possède un alias d'espace de noms, l'alias et l'élément sont concaténés à l'aide de "$". Par exemple, ns:element devient ns$element.

XML

  • Les attributs de version et d'encodage XML sont respectivement convertis en attributs de version et d'encodage de l'élément racine.

L'exemple suivant présente les versions XML et JSON du même flux. Les onglets sont présentés sous forme de onglets pour vous permettre de les comparer facilement.

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"}]}, }] } }

Demander et utiliser des flux JSON

Atom est le format par défaut de Google Data. Si vous ne spécifiez pas de paramètre alt dans votre requête, vous recevez un flux Atom.

Remarque: Les bibliothèques clientes Google Data ne sont actuellement pas compatibles avec JSON.

Sortie JSON

Pour demander une réponse au format JSON, utilisez le paramètre alt=json.

Par exemple, pour demander le flux d'agenda pour les développeurs Google au format JSON, envoyez la requête suivante:

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

Résultat JSON-in-script

Pour demander une réponse qui encapsule le code JSON dans un tag de script, utilisez le paramètre alt=json-in-script et ajoutez une fonction de rappel en ajoutant le paramètre callback=functionName.

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

Les fonctions de rappel vous permettent de contourner certains des problèmes de sécurité inter-domaines que vous pouvez rencontrer dans le code JavaScript côté client. En général, les navigateurs vous empêchent de charger des fichiers sur plusieurs domaines en raison de failles de sécurité potentielles et des attaques inter-domaines qui pourraient en résulter.

Le format JSON-in-script vous permet de contourner ces restrictions en chargeant la réponse dans un tag de script sur le client. Cela signifie que vous pouvez utiliser la réponse à d'autres endroits dans votre code JavaScript sur cette page. La sortie JSON est chargée lorsque la page est chargée. Aucun autre truc n'est nécessaire.

L'application fonctionnelle ci-dessous illustre cette technique:

<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>

Exemples

Pour obtenir des exemples d'utilisation de JSON avec les API Google Data, consultez les exemples.

Ressources supplémentaires

Pour en savoir plus sur le format JSON et son utilisation dans les applications Web, nous vous recommandons de consulter plusieurs ressources externes.

Haut de page