Google Veri Protokolü'nde JSON kullanma

Uyarı: Bu sayfa, Google'ın eski API'leri olan Google Veri API'leriyle ilgilidir. Bu sayfalar, çoğu yeni API'lerle değiştirilen Google Veri API'leri dizininde listelenen API'lerle ilgilidir. Belirli bir yeni API ile ilgili bilgi edinmek için yeni API'nin belgelerine bakabilirsiniz. Yeni bir API ile istekleri yetkilendirme hakkında bilgi için Google Hesaplarında Kimlik Doğrulama ve Yetkilendirme başlıklı makaleyi inceleyin.

Bu makalede, Google Veri Protokolü'nde kullanıldığı şekliyle JSON ele alınmaktadır. Protokol hakkında daha fazla bilgi için Geliştirici Kılavuzu'na göz atın.

JSON'u herhangi bir programlama diliyle kullanabilirsiniz. Ancak, bu dokümandaki örnekler JavaScript'te mevcuttur.

JSON feed'leri ve XML feed'leri hakkında

Bir Google Veri hizmeti, aşağıdaki kuralları kullanarak XML feed'ini dönüştürerek JSON biçimli bir feed oluşturur:

Temel

  • Feed, bir JSON nesnesi olarak gösterilir. İç içe yerleştirilmiş her öğe veya özellik ise nesnenin ad/değer özelliği olarak gösterilir.
  • Özellikler, dize özelliklerine dönüştürülür.
  • Alt öğeler Nesne özelliklerine dönüştürülür.
  • Birden fazla kez görünebilecek öğeler Dizi özelliklerine dönüştürülür.
  • Etiketlerin metin değerleri $t özelliklerine dönüştürülür.

Ad alanı

  • Bir öğenin ad alanı takma adı varsa takma ad ve öğe "$" kullanılarak birleştirilir. Örneğin, ns:element, ns$element olur.

XML

  • XML sürümü ve kodlama özellikleri, sırasıyla kök öğenin sürüm ve kodlama özelliklerine dönüştürülür.

Aşağıdaki örnekte aynı feed'in XML ve JSON sürümleri gösterilmektedir. Kolay karşılaştırma sağlamak için sekmeli sekmelere sahiptir.

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

JSON feed'lerini isteme ve kullanma

Atom, Google Verileri'nin varsayılan biçimidir. İsteğinizde bir alt parametresi belirtmezseniz Atom feed'i alırsınız.

Not: Google Veri istemci kitaplıkları şu anda JSON'u desteklememektedir.

JSON çıkışı

JSON biçiminde yanıt istemek için alt=json parametresini kullanın.

Örneğin, Google'ın geliştirici takvim feed'ini JSON biçiminde istemek için aşağıdaki sorguyu gönderin:

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

JSON-in-script çıkışı

Komut dosyası etiketine JSON sarmalayan bir yanıt isteğinde bulunmak için alt=json-in-script parametresini kullanın ve callback=functionName parametresini ekleyerek bir geri çağırma işlevi ekleyin.

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

Geri çağırma işlevlerini kullanmak, tipik istemci taraflı JavaScript'te karşılaşabileceğiniz alanlar arası güvenlik sorunlarının bazılarını çözmenize olanak tanır. Tarayıcılar genellikle potansiyel güvenlik delikleri ve ortaya çıkabilecek alanlar arası saldırılar nedeniyle alanlar arasında dosya yüklemenizi engeller.

Komut dosyası JSON biçiminde, yanıtı istemcideki bir komut dosyası etiketine yükleyerek bu kısıtlamaları atlatabilirsiniz. Bu, yanıtı söz konusu sayfadaki JavaScript kodunuzda başka yerlerde kullanabileceğiniz anlamına gelir. JSON çıkışı, sayfa yüklendiği zaman yüklenir ve başka bir işlem yapmanız gerekmez.

Aşağıdaki basit çalışma uygulaması bu tekniği göstermektedir:

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

Örnekler

JSON dosyasının Google Veri API'larıyla nasıl kullanılacağına dair örnekler için örnekler sayfasına göz atın.

Ek kaynaklar

JSON ve web uygulamalarında JSON kullanımı hakkında daha fazla bilgi edinmek için kullanabileceğiniz bazı harici kaynaklar vardır.

Başa dön