Google Veri Hizmetleri ile etkileşim kurmak için cURL'ü kullanma

Uyarı: Bu sayfa, Google'ın eski API'leri olan Google Veri API'leri hakkındadır. Yalnızca Google Veri API'leri dizininde listelenen API'ler için geçerlidir. Bu API'lerin çoğu daha yeni API'lerle değiştirilmiştir. Belirli bir yeni API hakkında bilgi edinmek için yeni API'nin belgelerine bakın. Daha yeni bir API ile istekleri yetkilendirme hakkında bilgi edinmek için Google Hesapları Kimlik Doğrulama ve Yetkilendirme başlıklı makaleyi inceleyin.

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

Giriş

Google Veri API'leri, veri biçimi olarak Atom feed'lerini ve girişlerini (XML), veri iletimi için ise protokol olarak HTTP'yi kullanır. Bu sayede Atom Yayınlama Protokolü genişletilir. Google Veri API'leriyle etkileşimi kolaylaştırmak için çeşitli istemci kitaplıkları yayınlıyoruz. Ancak hizmetlerimizle çalışmak için her zaman daha düşük düzeyli araçları kullanabilirsiniz. Bu araçları kullanmak, biraz rehberlik yardımıyla oldukça kolaydır.

cURL, HTTP dahil çeşitli protokolleri kullanarak istekte bulunmak için kullanılan bir komut satırı uygulamasıdır. cURL, API'lerle düşük düzeyde etkileşim kurmak için gereken HTTP işlevini desteklediğinden geliştiriciler tarafından Google Veri Hizmetleri'ni test etmek için sıklıkla kullanılır.

cURL yalnızca HTTP iletişimi gerçekleştirme desteği sağlar. Bu nedenle, uygulamayla çalışmak için Google Veri Protokolü, hizmete özel protokol ve kullanılan XML veri biçimi hakkında bilgi sahibi olmak gerekir. Bu makalede, bu görevleri kolaylaştırmak için kullanabileceğiniz diğer bazı araçlardan da bahsedilmektedir.

Bu makalede, Picasa Web Albums Data API'ye dayalı örnekler kullanılmaktadır. Ancak bu örneklerin tümü diğer Google Veri API'lerine kolayca uygulanabilir.

cURL'ü edinme ve yükleme

cURL, birçok UNIX/Linux platformunun varsayılan yüklemesinde yaygın olarak bulunur. Aracın yüklü olup olmadığını ve PATH içinde olup olmadığını görmek için en sevdiğiniz kabuğa curl yazmayı deneyin. Araç yüklü değilse resmi kaynağı veya kullanıcı tarafından gönderilen bir ikili paketi edinmek için cURL web sitesindeki indirme sayfasını ziyaret edin. Komut satırı aracının libcurl kitaplığını kullandığını unutmayın. Bu kitaplık ayrı bir indirme paketi olarak sunulabilir. Bu nedenle, kaynaktan derleme yapmıyorsanız "libcurl" paketi yerine "ikili" paket indirdiğinizden emin olun. cURL'ü kullanarak kimlik doğrulama jetonları edinmek veya istekler için SSL kullanılmasını gerektiren bazı Google Veri Hizmetleri'ne erişmek istiyorsanız SSL özellikli paketler gereklidir.

Google Veri Hizmeti'nde kimlik doğrulama

Kimliği doğrulanmış Google verileri istekleri, isteğe ClientLogin (masaüstü/mobil uygulamalar) veya AuthSub (web uygulamaları) kimlik doğrulama jetonu içeren bir HTTP üstbilgisi eklenerek gerçekleştirilir. cURL kullanılarak test yapılması için ClientLogin daha kolay bir yöntemdir ve aşağıda belgelenmiştir. AuthSub kimlik doğrulama üstbilgileri cURL ile kullanılabilir ancak jeton alma işleminin daha gelişmiş süreci bu makalenin kapsamı dışındadır.

ClientLogin'i kullanma

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

ClientLogin için kimlik doğrulama isteği, kullanıcı adını, şifreyi ve hizmet adını form yayınlama değişkenleri olarak alır. Bu değişkenler sırasıyla Email, Passwd ve service bağımsız değişkenleri olarak iletilir. Bu istek, birkaç jeton içeren bir yanıt oluşturur. Bu jetonlardan biri, Google Veri Hizmeti'ne istek göndermek için kullanılabilir. curl ile iletilen veri bağımsız değişkenlerinin, Email ve Passwd bağımsız değişkenlerinde sıkça görülen ASCII olmayan karakterler içermesi durumunda URL kodlu olması gerektiğini unutmayın. curl işaretini kullanarak bu bağımsız değişkenlerin URL kodlaması yapılmasını isteyebilirsiniz.--data-urlencode

Ö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 parametreler hakkında ayrıntılı bilgi için lütfen ClientLogin dokümanlarına bakın. Bu örnekte, kullandığımız hizmet Picasa Web Albums Data API'dir. Hizmet adı (service) lh2. Diğer Google Veri Hizmetleri'nin hizmet adlarını Google Veri API'leri SSS sayfasında bulabilirsiniz.

Yukarıdaki yanıttaki Auth jetonunun değeri, Google Veri Hizmetleri'nde kimlik doğrulama için gereken tek değerdir. Bu jetonun değeri, bir HTTP üst bilgisi olarak oluşturulur ve ardından bir Google Veri Hizmeti'ne yapılan her istek için kullanılır.

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 yeni satır karakterlerini ters eğik çizgi karakterleriyle ('\') kaçırma yöntemi Windows komut kabuğunda çalışmaz. Bu nedenle, Windows'da curl çalıştırıyorsanız komutun tamamını tek bir satıra girmeniz gerekir.


Feed'leri ve girişleri alma

Google Veri API'lerinde feed'leri ve girişleri almak için bir URL'de HTTP GET işlemi gerçekleştirilir. Bu işlemde isteğe bağlı bir sorgu parametreleri grubu kullanılabilir. GET isteği gerçekleştirdiğimiz için curl'ye yalnızca kimlik doğrulama başlığı ve URL'nin iletilmesi gerekir. Aşağıdaki örnekte, Picasa Web Albums Data API kullanılmaya devam edilecek ve kimliği doğrulanmış kullanıcının sahip olduğu albümlerin listesini almak için bu API'den yararlanılacak. Bu örnekte kimlik doğrulama jetonunun ABCDEFG olarak kısaltıldığını ancak bunun yerine tam jetonun (ör. yukarıdaki 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 işlem, biçimlendirilmemiş bir XML blob'u 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 çıktıyı daha okunabilir hale getirmek için tidy gibi bazı iyi biçimlendirme araçları vardır. Tidy'yi kullanmanın en kolay yolu, curl komutunun çıkışını aşağıdaki gibi tidy'ye yönlendirmektir:

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>

Tek tek girişler, feed URL'si yerine girişin URL'si sağlanarak aynı şekilde alınabilir.

Girişleri güncelleme

Google Veri API'lerindeki girişler, isteğin gövdesinde girişin XML'sinin yeni bir kopyasıyla düzenleme URL'sine HTTP PUT yapılarak güncellenir.

  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 URL değerini kullanarak girişi sunucuya geri gönderin.atom:link/@rel='edit'

1. Girişi alma

Giriş, yukarıdaki feed bloğunda kalın harflerle belirtilen 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şi yerel olarak güncelleme

Girişi aldıktan sonra, girişte gerekli değişiklikleri yapmak için yerel bir metin düzenleyici veya uygulama kullanılarak güncellenmesi gerekir. Bir girişi almak için yukarıdaki komutta, sonuçları önceki örneklerde yaptığımız gibi tidy ile yönlendirmedik. Sonuç, aynı verileri temsil eden ancak tidy ile aktarılan sürümden farklı biçimlendirmeye sahip bir XML'dir. Bir girişi manuel olarak düzenlemek için tidy kullanmak genellikle XML ile çalışmayı kolaylaştırır.

Not: Lütfen yeni girişinizi yayınlarken atom:entry öğesinde özellik olarak kullanılan tüm XML ad alanı tanımlarını eklemeyi unutmayın. Bunların atlanması ayrıştırma istisnaları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 ek boşluklar eklediğinizden emin olun.

3. Sunucudaki girişi güncelleme

edit URL'sini kullanarak cURL ile hizmete girişin bir kopyasını PUT yapmanız gerekir. Sunucuya gönderilen içeriğin türünü belirten bir üstbilgi eklenmelidir. Aşağıdaki snippet'te, güncellenmiş girişi içeren dosyanın updated_entry.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'lerindeki girişler, yeni bir girişle yayın URL'sine HTTP POST yapılarak oluşturulur. atom:id, sunucu tarafından atandığı için yeni girişlere dahil edilmesi gerekmez. Yeni bir giriş oluşturmanın en kolay yolu, eski bir girişi alıp değiştirmektir. Aşağıdaki örnek tam olarak bunu yapar.

  1. atom:link/@rel='self' kullanarak şablon girişi alma
  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 gönderir. Bu değer, alınan feed'de href olarak rel='http://schemas.google.com/g/2005#post' ile link öğesinin değeri olarak veya http://code.google.com adresindeki hizmet dokümanlarında bulunur.

1. Şablon girişi alma

Bir giriş, href değeri kullanılarak rel='self' ile aynı şekilde link öğesinden alınabilir. Bu, yukarıdaki örnekte güncellenmeden önce bir girişin alınma şekliyle aynıdır.

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ıldıktan sonraki yanıt şöyle görünür:

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

Son curling maçımızdan fotoğrafların yer aldığı "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 işlem, basitleştirilmiş bir şablon girişi sağlar. Ardından, oluşturduğumuz yeni albümü temsil edecek şekilde giriş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: Lütfen yeni girişinizi yayınlarken atom:entry öğesinde özellik olarak kullanılan tüm XML ad alanı tanımlarını eklemeyi unutmayın. Bunların atlanması ayrıştırma istisnaları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 ek boşluklar eklediğinizden emin olun.

3. Yeni girişi sunucuya gönderme

Sunucuya yeni bir giriş göndermek için kullanılan curl komutu, URL'nin farklı olması dışında 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

Gönderme işlemi başarılı olursa ortaya çıkan XML çıktısı, yeni oluşturulan girişin bir kopyası olur. Bu giriş, sunucunun giriş oluşturulduğu sırada oluşturduğu öğeleri (atom:id, atom:published, atom:updated ve atom:link öğelerinin değerleri dahil) içerir. Elde edilen link değerleri, bu süre zarfında ek değişiklik yapılmaması koşuluyla girişi düzenlemek veya silmek için kullanılabilir.

Girişleri silme

Girişleri silme işlemi, girişleri güncellemeye çok benzer. Ancak HTTP PUT yerine HTTP DELETE yöntemi kullanılır ve veri gönderilmesi gerekmez. 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 nesnelerini yükleme

Picasa Web Albums Data API ve Documents List Data API'nin önemli bir özelliği, ikili nesneleri yükleme olanağıdır. cURL, ikili verileri ve bir kısa ad başlığını kolayca yükleyebilir. Ancak, Doküman Listesi Veri API'si şu anda XML'nin ikili verilerle birlikte MIME çok parçalı mesajı olarak yayınlanmasını gerektiriyor. Çok parçalı mesaj oluşturma, bu makalenin kapsamı dışındadır.

Aşağıdaki örnekte, sweeping_the_rock.png adlı bir resmin "Kayayı süpürme" başlıklı bir Picasa Web Albümü'ne 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, openssl, web sunucularına ham soket bağlantıları (sırasıyla düz metin ve SSL tabanlı) oluşturmak için kullanılır ve Google Veri Hizmetleri ile etkileşimde bulunmak için kullanılabilir. Tüm Google Veri Hizmetleri'nin SSL'yi desteklemeyebileceğini unutmayın. Bağlantıları şu şekilde açabilirsiniz:
    • telnet picasaweb.google.com 80 (Picasa Web Albums Data API)
    • openssl s_client -connect www.google.com:443 (Google Takvim Veri API'si ve www.google.com'daki diğer hizmetler)
    Bağlantı kurulduktan sonra ham bir HTTP isteği gönderilmelidir. Bu istek; HTTP yüklemini, göreli yolu, sürümü, tüm başlıkları ve isteğin gövdesini içerir. Aşağıda bununla ilgili 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 verileri gönderirken POST ve PUT işlemlerinin Content-Length üstbilgisinin değerinin hesaplanmasını 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 yerleştirin (yukarıda kullanılan örnek) ve wc -c template_entry.xml komutunu çalıştırın. Content-Length başlığı için yanlış bir değeri yanlışlıkla kullanırsanız hata ayıklama genellikle zor olur.
  • wget, genellikle bir web sunucusundan yerel bir dosyaya veri indirmek için kullanılır. Ancak wget, Google Veri Hizmetleri ile etkileşim için gereken tüm farklı türdeki istekleri gerçekleştirebilmesini sağlayan birçok seçeneğe sahiptir. Yeni bir albüm girişini Picasa Web Albümleri'ne POST için wget simgesini kullanma örneğini 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"
    
  • xsltproc, XML belgelerine 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şinden veya feed'den istenen veri parçalarını kolayca ayıklamak ya da yeni veya 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 Hizmetleri ile kolayca etkileşim kurmak için kullanılabilir. Bu araçları en sevdiğiniz Google Data API ile kullanma hakkında sorularınız varsa lütfen API'ye özel forumlarımıza katılın.