Używanie protokołu JSON w protokole Google Data Protocol

Ostrzeżenie: ta strona dotyczy starszych interfejsów API Google – interfejsów API danych Google – dotyczy tylko interfejsów API wymienionych w katalogu interfejsów API danych Google, z których wiele zostało zastąpionych nowszych. Informacje na temat konkretnego nowego interfejsu API można znaleźć w dokumentacji nowego interfejsu API. Informacje o autoryzowaniu żądań za pomocą nowszego interfejsu API znajdziesz w artykule Uwierzytelnianie i autoryzacja kont Google.

W tym artykule opisujemy format JSON używany w protokole Google Data Protocol. Więcej informacji o protokole można znaleźć w przewodniku dla programistów.

Możesz używać kodu JSON z dowolnym językiem programowania, ale przykłady w tym dokumencie są zapisane w języku JavaScript.

Informacje o plikach JSON i plikach XML

Usługa danych Google tworzy plik danych w formacie JSON, konwertując go na podstawie tych reguł:

Podstawowe

  • Plik danych jest reprezentowany przez obiekt JSON. Każdy zagnieżdżony element lub atrybut jest reprezentowany jako nazwa/wartość obiektu.
  • Atrybuty są konwertowane na właściwości ciągu znaków.
  • Elementy podrzędne są konwertowane na właściwości obiektu.
  • Elementy, które mogą występować więcej niż raz, są konwertowane na właściwości tablicy.
  • Wartości tekstowe tagów są konwertowane na właściwości $t.

Przestrzeń nazw

  • Jeśli element ma alias przestrzeni nazw, alias i element są łączone za pomocą „$”. Na przykład ns:element staje się ns$element.

XML;

  • Wersje XML i atrybuty kodowania są konwertowane odpowiednio do atrybutów wersji i kodowania elementu głównego.

Poniższy przykład przedstawia wersje XML i JSON tego samego pliku danych. Są one podzielone na karty, aby umożliwić łatwe porównanie.

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

Żądanie i używanie plików danych JSON

Atom to domyślny format danych Google. Jeśli w żądaniu nie określisz parametru alt, otrzymasz kanał Atom.

Uwaga: biblioteki klienta danych Google nie obsługują obecnie plików JSON.

Dane wyjściowe JSON

Aby zażądać odpowiedzi w formacie JSON, użyj parametru alt=json.

Aby na przykład poprosić Google o udostępnienie pliku danych kalendarza dewelopera w formacie JSON, wyślij to zapytanie:

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

Dane wyjściowe JSON-in-script

Aby zażądać odpowiedzi, która opakowuje JSON w tagu skryptu, użyj parametru alt=json-in-script i dodaj funkcję wywołania zwrotnego, dodając parametr callback=functionName.

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

Używanie funkcji wywołań zwrotnych pozwala uniknąć niektórych problemów z zabezpieczeniami w różnych domenach, które mogą wystąpić podczas wykonywania kodu JavaScript po stronie klienta. Przeglądarki zwykle uniemożliwiają wczytywanie plików w różnych domenach z powodu potencjalnych luk w zabezpieczeniach i ataków międzydomenowych.

Format JSON-in-script pozwala obejść te ograniczenia przez wczytanie odpowiedzi w tagu skryptu w kliencie. Oznacza to, że odpowiedzi możesz użyć w innych miejscach kodu JavaScript na tej stronie. Dane wyjściowe JSON są wczytywane podczas wczytywania strony. Nie potrzeba żadnych innych sztuczek.

Ta prosta aplikacja działająca w ten sposób pokazuje tę technikę:

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

Sample

Przydatne przykłady dotyczące korzystania z kodu JSON za pomocą interfejsów API danych Google znajdziesz na stronie przykłady.

Dodatkowe materiały

Aby dowiedzieć się więcej o korzystaniu z JSONu i korzystaniu z nich w aplikacjach internetowych, możesz zapoznać się z kilkoma zasobami zewnętrznymi.

Powrót do góry