Google veri hizmetleriyle etkileşimde bulunmak için cURL'yi 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.

Ryan Boyd, Google Veri API'leri Ekibi
Eylül 2007

Giriş

Google Veri API'ları temel olarak veri biçimi olarak Atom feed'lerini ve girişlerini (XML) ve veri iletimi için protokol olarak HTTP'yi kullanarak Atom Yayınlama Protokolü'ni genişletir. Google Veri API'leri ile etkileşimi kolaylaştırmak için bir dizi istemci kitaplığı yayınladık. Ancak, hizmetlerimizle çalışmak için alt düzey araçları her zaman kullanabilirsiniz. Bunu yapmak için biraz yardım almak da oldukça kolaydır.

cURL, HTTP dahil olmak üzere çeşitli protokoller kullanarak istekleri gerçekleştirmek için kullanılan bir komut satırı uygulamasıdır. cURL, geliştiriciler tarafından Google Veri hizmetlerini test etmek için sıklıkla kullanılır. Zira API'lerle düşük düzeyde etkileşim kurmak için gerekli HTTP işlevi desteklenir.

cURL yalnızca HTTP iletişimi gerçekleştirme konusunda destek sağlar. Bu nedenle Google Veri protokolü, hizmete özgü protokol ve kullanılan XML veri biçimi gibi bilgilerden yararlanmak, uygulamayla çalışmak için bir avantajdır. Bu makalede, bu görevleri kolaylaştırmak için bazı diğer araçlar belirtilmektedir.

Bu makalede Picasa Web Albümleri veri API'sine dayalı örnekler kullanılmıştır. Ancak tüm bu örnekler kolayca diğer Google veri API'lerine uygulanabilir.

cURL edinme ve yükleme

cURL, birçok UNIX/Linux platformunun varsayılan yüklenmesinde genel olarak kullanılabilir. Aracın yüklü olup olmadığını ve PATH cihazınızda bulunup bulunmadığını görmek için favori kabuğunuza curl yazmayı deneyin. Araç yüklü değilse resmi kaynağı veya kullanıcının katkıda bulunduğu ikili program paketini almak için cURL web sitesindeki indirme sayfasını ziyaret edin. Komut satırı aracının ayrı bir indirme paketi olarak sunulabilecek libcurl kitaplığını kullandığını unutmayın. Bu nedenle, kaynaktan derleme yapmıyorsanız "libcurl" paketi yerine bir "binary" paketi indirdiğinizden emin olun. Kimlik doğrulama jetonları almak veya istekler için SSL kullanmayı gerektiren bazı Google Veri hizmetlerine erişmek isterseniz cURL'yi kullanmak istiyorsanız SSL özellikli paketler gerekir.

Google Veri Hizmeti Kimlik Doğrulaması

Kimlik doğrulaması yapılmış Google Verileriyle ilgili istekler, ClientLogin (masaüstü/mobil uygulamalar) veya AuthSub (web uygulamaları) kimlik doğrulama jetonunu içeren bir HTTP üstbilgisi eklenerek gerçekleştirilir. cURL ile test yaparken ClientLogin daha kolay bir yöntemdir ve aşağıda belgelenmiştir. AuthSub kimlik doğrulama üstbilgileri cURL ile birlikte kullanılabilir, ancak jetonları alma işleminin daha gelişmiş süreci bu makalenin kapsamında değildir.

ClientLogin'i kullanma

ClientLogin, yüklü (masaüstü/mobil) uygulamalara yöneliktir. Bu kimlik doğrulama yönteminde, Google Veri API'lerini kullanan uygulama doğrudan kullanıcı adını ve şifresini işler.

ClientLogin için bir kimlik doğrulama isteği, form gönderme değişkenleri olarak bir kullanıcı adı, şifre ve hizmet adı alır. Bu değişkenler sırasıyla Email, Passwd ve service bağımsız değişkenleri olarak iletilir. Bu istek, birden fazla jeton içeren bir yanıt verir. Bu jetonlardan biri, Google Veri hizmetine istek göndermek için kullanılabilir. curl ile iletilen veri bağımsız değişkenlerinin, genellikle Email ve Passwd bağımsız değişkenlerinde görünen ASCII olmayan karakterler içeriyorsa URL olarak kodlanması gerektiğini unutmayın. --data-urlencode flag'ini kullanarak curl'den bu bağımsız değişkenleri URL olarak kodlamasını isteyebilirsiniz.

Örnek İstek:

curl https://www.google.com/accounts/ClientLogin \
--data-urlencode Email=brad.gushue@example.com --data-urlencode Passwd=new+foundland \
-d accountType=GOOGLE \
-d source=Google-cURL-Example \
-d service=lh2

Örnek Yanıt:

SID=DQAAAHYBADCv2pSv7nflacDNwz3zEDUGtrSvNVDcpkSfddi77b3U5sEaHmP8YLWhmA36F9rk85mL8J5dqo4apn0T1vKz0fPGI9Xtnuet6cuE2ZzYvrNIwbSC_HjTqF4zudNQnnlDuD2wqZT-g1qXI8KhGAQZV4NexHZoQPlabTsGuRZeIBxj1A
LSID=EUBBBIaBADCl-kNxvRVmcQghpt3cqSMfEooKR9flLOUZqwgP9OrZS83gse-KSdTNeXhxsET7FYenDhceP9lIPOmesH-t9qh-AWUHjjMdZEbUNeF9mWyzln6Z-FajaiG-cVFkqW0ZJ8ZbnCP30xXj6xFK6QxaAcqy_9Pej8jhEnxS9E61ftQGPg
Auth=EUBBIacAAADK-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxsET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfagZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh

Yukarıdaki istekte kullanılan parametrelerle ilgili özel bilgiler için lütfen ClientLogin dokümanlarına bakın. Bu örnekte kullandığımız hizmet Picasa Web Albümleri veri API'sıdır. Hizmet adı (service) lh2. Diğer Google Veri hizmetlerinin hizmet adları Google Veri API'leri SSS sayfasında bulunabilir.

Yukarıdaki yanıtta bulunan Auth jetonunun değeri, Google Veri Hizmetleri için kimlik doğrulama amacıyla gereken tek değerdir. Bu jetonun değeri, daha sonra bir Google Veri hizmetine yapılan her istek için kullanılan bir HTTP başlığı olarak oluşturulur.

curl --silent --header "Authorization: GoogleLogin auth=EUBBIacAAADK\
-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxs\
ET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfag\
ZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh" \
"http://picasaweb.google.com/data/feed/api/user/default"

Not: Yukarıda ters eğik çizgi karakterine sahip ("\") yeni satır karakterlerine çıkış yapma yöntemi, Windows komut kabuğunda çalışmaz. Bu nedenle, Windows'da curl kullanıyorsanız komutun tamamını tek bir satıra girmeniz gerekir.


Feed'leri ve girişleri alma

Google Veri API'larında, feed'ler ve girişler alma işlemi, bir URL'de isteğe bağlı bir dizi sorgu parametresiyle HTTP GET gerçekleştirilir. Bir GET isteği yerine getirdiğimiz için curl öğesine yalnızca yetkilendirme üstbilgisinin ve URL'nin iletilmesi gerekir. Aşağıdaki örnek, kimliği doğrulanmış kullanıcıya ait albümlerin listesini almak için kullanılacak olan Picasa Web Albümleri veri API'sini kullanmaya devam edecektir. Bu örnekte kimlik doğrulama jetonunu ABCDEFG şeklinde kısalttığımızı ancak bunun yerine tüm jetonun (ör. EUBBIacA...32JKOuGh) kullanılması gerektiğini unutmayın.

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default"

Bu, XML biçiminde biçimlendirilmemiş bir blob döndürür:

<?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:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'><id>http://picasaweb.google.com/data/feed/base/user/brad.gushue</id><updated>2007-09-13T21:30:21.454Z</updated>...</entry></feed>

Bu çıkışı, düzenli olanlar da dahil olmak üzere daha okunabilir hale getirmek için bazı biçimlendirme araçları var. Gerginliği kullanmanın en kolay yolu curl komutundan çıkışı aşağıdaki gibi düzenliklere dönüştürmektir:

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default" | tidy -xml -indent -quiet

Bu sayede, aşağıdaki gibi çok daha okunabilir bir feed elde edilir:

<?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:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' 
xmlns:gml='http://www.opengis.net/gml' 
xmlns:georss='http://www.georss.org/georss' 
xmlns:photo='http://www.pheed.com/pheed/' 
xmlns:media='http://search.yahoo.com/mrss/' 
xmlns:batch='http://schemas.google.com/gdata/batch' 
xmlns:gphoto='http://schemas.google.com/photos/2007'>
  <id>http://picasaweb.google.com/data/feed/api/user/brad.gushue</id>
  <updated>2007-09-13T21:47:07.337Z</updated>
  <category scheme='http://schemas.google.com/g/2005#kind'
  term='http://schemas.google.com/photos/2007#user' />
  <title type='text'>brad.gushue</title>
  <subtitle type='text'></subtitle>
  <icon>
  http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</icon>
  <link rel='http://schemas.google.com/g/2005#feed'
  type='application/atom+xml'
  href='http://picasaweb.google.com/data/feed/api/user/brad.gushue' />
  <link rel='alternate' type='text/html'
  href='http://picasaweb.google.com/brad.gushue' />
  <link rel='self' type='application/atom+xml'
  href='http://picasaweb.google.com/data/feed/api/user/brad.gushue?start-index=1&max-results=1000' />
  <author>
    <name>Brad</name>
    <uri>http://picasaweb.google.com/brad.gushue</uri>
  </author>
  <generator version='1.00' uri='http://picasaweb.google.com/'>
  Picasaweb</generator>
  <openSearch:totalResults>8</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>1000</openSearch:itemsPerPage>
  <gphoto:user>brad.gushue</gphoto:user>
  <gphoto:nickname>Brad</gphoto:nickname>
  <gphoto:thumbnail>
  http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</gphoto:thumbnail>
  <entry>
    <id>
    http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593</id>
    <published>2007-05-23T04:55:52.000Z</published>
    <updated>2007-05-23T04:55:52.000Z</updated>
    <category scheme='http://schemas.google.com/g/2005#kind'
    term='http://schemas.google.com/photos/2007#album' />
    <title type='text'>Trip To Italy</title>
    <summary type='text'>This was the recent trip I took to
    Italy.</summary>
    <rights type='text'>public</rights>
    <link rel='http://schemas.google.com/g/2005#feed'
    type='application/atom+xml'
    href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389720904593' />
    <link rel='alternate' type='text/html'
    href='http://picasaweb.google.com/brad.gushue/TripToItalyV2' />
    <link rel='self' type='application/atom+xml'
    href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593' />
    <link rel='edit' type='application/atom+xml'
    href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456' />
    <author>
      <name>Brad</name>
      <uri>http://picasaweb.google.com/brad.gushue</uri>
    </author>
    <gphoto:id>9810315389720904593</gphoto:id>
    <media:group>
    ...
    </media:group>
  </entry>
  <entry>
  ...
  </entry>

</feed>

Bağımsız girişler, özet akışı URL'si yerine giriş URL'si sağlanarak aynı şekilde alınabilir.

Girişler güncelleniyor

Google Veri API'lerine yapılan girişler, düzenlemenin URL'sine HTTP PUT ifadesi eklenerek güncellenir. İsteğin gövdesinde girişin XML'inin yeni bir kopyası gönderilir.

  1. atom:link/@rel='self' URL değerini kullanarak girişi alın
  2. Gerekli değişiklikleri yapmak için girişi yerel olarak güncelleyin
  3. PUT atom:link/@rel='edit' URL'si değerini kullanarak girişi tekrar sunucuya gönderin

1. Giriş alınıyor

Giriş, yukarıdaki feed bloğunda kalın yazılmış iki URL'den biri kullanılarak alınabilir. Gerekli URL, rel='self' içeren link öğesinin href değeridir.

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593"

2. Giriş yerel olarak güncelleniyor

Girişi aldıktan sonra, girişte gerekli değişikliklerin yapılması için girişin yerel metin düzenleyici veya uygulama kullanılarak güncellenmesi gerekir. Bir giriş almak için yukarıdaki komutta, önceki örneklerde yaptığımız gibi sonuçları tidy işaretlemedik. Sonuç olarak aynı veriyi temsil eden, ancak tidy özelliğine aktarılmış sürümden farklı biçimlendirmeye sahip olan XML ortaya çıkar. Bir girişi manuel olarak düzenlemek amacıyla, tidy kullanımı genellikle XML ile çalışmayı kolaylaştırabilir.

Not: Yeni girişinizi gönderirken atom:entry özelliği için kullanılan tüm XML ad alanı tanımlarını eklemeyi lütfen unutmayın. Bunların atlanması, istisnaların ayrıştırılmasına neden olur. Ayrıca tidy, ad alanı tanımları arasındaki boşlukları yeni satır karakterleriyle değiştirir. Bu geçerli bir XML olsa da Google Veri Hizmetleri şu anda bunu kabul etmemektedir. tidy kullanıyorsanız lütfen entry öğesinde bu özellikler arasına ilave boşluklar eklediğinizden emin olun.

3. Sunucudaki giriş güncelleniyor

edit URL'sini kullanarak cURL'yi kullanarak hizmete yapılan girişin bir kopyasını PUT. Sunucuya gönderilen içeriğin türünü gösteren bir üstbilginin eklenmesi gerekir. Aşağıdaki snippet'te, güncellenen girişe sahip dosyanın güncellenmiş_giriş.xml olarak kaydedildiği varsayılmaktadır.

curl --silent --data-binary "@updated_entry.xml" --request PUT --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"

Giriş oluşturma

Google Veri API'lerine yapılan girişler, yeni bir giriş içeren yayın URL'sine HTTP POST yapılarak oluşturulur. atom:id, sunucu tarafından atanır ve bu nedenle yeni girişlere eklenmesi gerekmez. Yeni bir giriş oluşturmanın en kolay yolu eski bir girişi alıp değiştirmektir. Aşağıdaki örnekte de tam olarak bu şekilde yapılmaktadır.

  1. atom:link/@rel='self' girişini kullanarak bir şablon girişi alın
  2. Gereksiz bilgileri kaldırmak ve gerekli değişiklikleri yapmak için şablon girişini yerel olarak değiştirin
  3. POST Feed'in post URL'sini kullanarak girişi sunucuya geri döndürün. Bu değer, alınan feed'de rel='http://schemas.google.com/g/2005#post' içeren link öğesi için href değeri olarak veya http://code.google.com adresindeki hizmetin dokümanlarında bulunur.

1. Şablon girişi al

Tek bir giriş, yukarıdaki örnekte güncellemeden önce, alınan girişle aynı şekilde rel='self' özelliğine sahip bir link öğesinin href değeri kullanılarak alınabilir.

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593" | tidy -xml -indent -quiet > template_entry.xml

tidy kullanımından sonra yanıt aşağıdaki gibi görünecektir:

<entry xmlns='http://www.w3.org/2005/Atom' 
xmlns:exif='http://schemas.google.com/photos/exif/2007'
xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#'
xmlns:gml='http://www.opengis.net/gml'
xmlns:georss='http://www.georss.org/georss'
xmlns:photo='http://www.pheed.com/pheed/'
xmlns:media='http://search.yahoo.com/mrss/'
xmlns:batch='http://schemas.google.com/gdata/batch'
xmlns:gphoto='http://schemas.google.com/photos/2007'>
  <id>
  http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981</id>
  <published>2007-05-23T04:55:52.000Z</published>
  <updated>2007-05-23T04:55:52.000Z</updated>
  <category scheme='http://schemas.google.com/g/2005#kind'
  term='http://schemas.google.com/photos/2007#album' />
  <title type='text'>Trip To Italy</title>
  <summary type='text'>This was the recent trip I took to
  Italy.</summary>
  <rights type='text'>public</rights>
  <link rel='http://schemas.google.com/g/2005#feed'
  type='application/atom+xml'
  href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389741123981' />
  <link rel='alternate' type='text/html'
  href='http://picasaweb.google.com/brad.gushue/TripToItaly' />
  <link rel='self' type='application/atom+xml'
  href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981' />
  <link rel='edit' type='application/atom+xml'
  href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981/1179896152905401' />
  <author>
    <name>Brad</name>
    <uri>http://picasaweb.google.com/brad.gushue</uri>
  </author>
  <gphoto:id>9810315389741123981</gphoto:id>
  <gphoto:name>TripToItaly</gphoto:name>
  <gphoto:location></gphoto:location>
  <gphoto:access>public</gphoto:access>
  <gphoto:timestamp>1179896152000</gphoto:timestamp>
  <gphoto:numphotos>0</gphoto:numphotos>
  <gphoto:numphotosremaining>500</gphoto:numphotosremaining>
  <gphoto:bytesUsed>0</gphoto:bytesUsed>
  <gphoto:user>brad.gushue</gphoto:user>
  <gphoto:nickname>Brad</gphoto:nickname>
  <gphoto:commentingEnabled>true</gphoto:commentingEnabled>
  <gphoto:commentCount>0</gphoto:commentCount>
  <media:group>
    <media:title type='plain'>Trip To Italy</media:title>
    <media:description type='plain'>This was the recent trip I took
    to Italy.</media:description>
    <media:keywords></media:keywords>
    <media:content url='http://lh5.google.com/brad.gushue/ADFUFKqeA5E/AAAAAAAAABc/V6Sga_Z03WU/TripToItaly.jpg'
    type='image/jpeg' medium='image' />
    <media:thumbnail url='http://lh5.google.com/brad.gushue/ADFUFKqeA5E/AAAAAAAAABc/V6Sga_Z03WU/s160-c/TripToItaly.jpg'
    height='160' width='160' />
    <media:credit>Brad</media:credit>
  </media:group>

</entry>

2. Şablon girişini değiştirin

Son körling maçımızın fotoğraflarını içeren "Kanada'da Curling" adlı bir albüm oluşturmak istiyoruz. Google Verileri, sunucunun değer sağladığı Atom öğelerini bırakmanıza olanak tanır. Bu nedenle, bu basit şablon girişini oluşturmak için feed'deki atom:id, atom:published, atom:updated, atom:author ve çeşitli atom:link öğelerini kaldıracağız. Bu, bize sade bir şablon girişi sağlar. Daha sonra girişin, oluşturmakta olduğumuz yeni albümü temsil etmesi için değiştirilmesi gerekir:

<entry xmlns='http://www.w3.org/2005/Atom' 
xmlns:gphoto='http://schemas.google.com/photos/2007'>
  <category scheme='http://schemas.google.com/g/2005#kind'
  term='http://schemas.google.com/photos/2007#album' />
  <title type='text'>Curling in Canada</title>
  <summary type='text'>Pictures of all my curling matches in Canada.</summary>
  <gphoto:location>Canada</gphoto:location>
  <gphoto:access>public</gphoto:access>
  <gphoto:commentingEnabled>true</gphoto:commentingEnabled>

</entry>

Not: Yeni girişinizi gönderirken atom:entry özelliği için kullanılan tüm XML ad alanı tanımlarını eklemeyi lütfen unutmayın. Bunların atlanması, istisnaların ayrıştırılmasına neden olur. Ayrıca tidy, ad alanı tanımları arasındaki boşlukları değiştirir ve bunları yeni satır karakterleriyle değiştirir. Bu geçerli bir XML olsa da Google Veri Hizmetleri şu anda bunu kabul etmemektedir. tidy kullanıyorsanız lütfen entry öğesinde bu özellikler arasına ilave boşluklar eklediğinizden emin olun.

3. Yeni girişi sunucuya yayınlama

Sunucuya yeni bir giriş göndermek için kullanılan curl komutu, mevcut URL'nin farklı olması haricinde mevcut bir girişi güncellemeye çok benzer:

curl --silent --request POST --data-binary "@template_entry.xml" --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/brad.gushue" | tidy -xml -indent -quiet

Yayın başarılı olursa elde edilen XML çıkışı, yeni oluşturulan girişin bir kopyası olur. Bu giriş, atom:id, atom:published, atom:updated ve atom:link öğelerinin değerleri de dahil olmak üzere, girişin oluşturulduğu sırada sunucunun oluşturduğu öğeleri içerir. Sonuç olarak elde edilen link değerleri, arada ek bir değişiklik yapılmaması durumunda girişi düzenlemek veya silmek için kullanılabilir.

Girişleri silme

Girişleri silme işlemi, girişlerin güncellenmesine çok benzer. HTTP PUT yerine HTTP DELETE yöntemi kullanılır ve veri gönderilmesine gerek yoktur. Güncelleme isteğinde olduğu gibi, edit URL'si de HTTP isteğinin hedefi olarak kullanılır.

curl --silent --request DELETE --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"

Medya nesneleri yükleme

Picasa Web Albümleri veri API'si ve Belgeler Listesi veri API'sinin önemli bir özelliği, ikili program nesnelerini yükleme özelliğidir. cURL, ikili program verilerini ve bir sümük başlığını kolayca yükleyebilir. Ancak Documents List veri API'sı şu anda XML'yi ikili program verileriyle birlikte MIME çok parçalı mesaj olarak yayınlamayı gerektiriyor. Çok parçalı mesaj oluşturmak bu makalenin kapsamında değildir.

Aşağıdaki örnekte, "Rock'ı temizleme" başlıklı bir Picasa Web Albümü'ne sweeping_the_rock.png adlı resmin nasıl yükleneceği gösterilmektedir:

curl --silent --request POST --data-binary "@sweeping_the_rock.png" --header "Slug: Sweeping the rock" --header "Content-Type: image/png" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/5113621341847124417" | tidy -xml -indent -quiet

Diğer komut satırı araçları

Bazı geliştiriciler, diğer komut satırı araçlarını kullanarak öğrenmeyi veya hata ayıklamayı tercih eder.

Popüler araçlar şunlardır:

  • telnet, opensl, web sunucularına ham yuva bağlantıları (sırasıyla düz metin ve Ssl tabanlı) için kullanılır ve Google Veri hizmetleriyle etkileşimde bulunmak için kullanılabilir. Tüm Google Veri hizmetlerinin SSL'yi desteklemediğini unutmayın. Bağlantıları nasıl açacağınız aşağıda açıklanmıştır:
    • telnet picasaweb.google.com 80 (Picasa Web Albümleri veri API'si)
    • openssl s_client -connect www.google.com:443 (Google Calendar data API ve diğer hizmetler www.google.com)
    Bağlantı kurulduktan sonra ham HTTP isteği gönderilmelidir. Bu istek HTTP fiilini, göreli yolu, sürümü, tüm üstbilgileri ve isteğin gövdesini içerir. Aşağıda bir örnek verilmiştir:
    POST /data/feed/api/user/brad.gushue HTTP/1.1
    Host: picasaweb.google.com
    Authorization: GoogleLogin auth=ABCDEFG
    Content-Length: 493
    
    <entry xmlns='http://www.w3.org/2005/Atom' 
    xmlns:gphoto='http://schemas.google.com/photos/2007'>
      <category scheme='http://schemas.google.com/g/2005#kind'
      term='http://schemas.google.com/photos/2007#album' />
      <title type='text'>Curling in Canada</title>
      <summary type='text'>Pictures of all my curling matches in Canada.</summary>
      <gphoto:location>Canada</gphoto:location>
      <gphoto:access>public</gphoto:access>
      <gphoto:commentingEnabled>true</gphoto:commentingEnabled>
    
    </entry>
    
    Ham HTTP verilerini gönderirken POST ve PUT işlemlerinin Content-Length başlığı için değer hesaplaması gerektireceğini unutmayın. Bu değeri hesaplamak için UNIX aracını wc kullanabilirsiniz. HTTP gövdesinin tüm içeriğini template_entry.xml gibi bir metin dosyasına (yukarıda kullanılan örnek) yerleştirin ve wc -c template_entry.xml komutunu çalıştırın. Content-Length başlığı için yanlışlıkla yanlış bir değer kullanırsanız genellikle hata ayıklamanız zordur.
  • wget genellikle bir web sunucusundan yerel dosyaya veri indirmek için kullanılır. Ancak wget, Google Veri hizmetleriyle etkileşimde bulunmak için gereken tüm farklı istek türlerini gerçekleştirmeyi sağlayan birçok seçeneğe sahiptir. Picasa Web Albümleri'ne yeni albüm girişi için POST öğesinin wget ile nasıl kullanılacağına dair bir örneği aşağıda bulabilirsiniz:
    wget --post-file template_entry.xml --header "Authorization: GoogleLogin auth=ABCDEFG" --header "Content-Type: application/atom+xml" "http://picasaweb.google.com/data/feed/api/user/brad.gushue"
    
  • xlsxtproc, XML dokümanlarına XSL dönüşümleri (XSLT) uygulamak için kullanılan bir araçtır. Google Veri API'leri tarafından döndürülen bir XML girişi veya feed'den istediğiniz veri bitlerini kolayca ayıklamak veya yeni ya da güncellenmiş girişler oluşturmak için kullanılabilir.

Sonuç

Gördüğünüz gibi, cURL ve diğer birkaç komut satırı aracı, ham XML ve HTTP kullanarak Google veri hizmetleriyle kolayca etkileşime geçmek için kullanılabilir. En sevdiğiniz Google Data API ile bu araçların kullanımı hakkında sorularınız varsa lütfen API'lere özel forumlarda bize katılın.