Menggunakan cURL untuk berinteraksi dengan layanan Data Google

Peringatan: Halaman ini membahas API lama Google, yaitu Google Data API; halaman ini hanya relevan dengan API yang tercantum dalam direktori Google Data API, yang sebagian besar telah digantikan dengan API yang lebih baru. Untuk mengetahui informasi tentang API baru tertentu, lihat dokumentasi API baru tersebut. Untuk mengetahui informasi tentang cara mengizinkan permintaan dengan API yang lebih baru, lihat Autentikasi dan Otorisasi Akun Google.

Ryan Boyd, Tim Google Data API
September 2007

Pengantar

Pada dasarnya, Google Data API menggunakan feed dan entri Atom (XML) sebagai format data dan HTTP sebagai protokol untuk transmisi data, yang memperluas Atom Publishing Protocol. Kami memublikasikan sejumlah library klien untuk mempermudah interaksi dengan Google Data API. Namun, Anda selalu dapat menggunakan alat tingkat bawah untuk berinteraksi dengan layanan kami, dan hal ini cukup mudah dilakukan dengan sedikit panduan.

cURL adalah aplikasi command line untuk melakukan permintaan menggunakan berbagai protokol termasuk HTTP. cURL sering digunakan oleh developer untuk menguji layanan Data Google, karena mendukung fungsi HTTP yang diperlukan untuk berinteraksi dengan API di tingkat rendah.

cURL hanya memberikan dukungan untuk melakukan komunikasi HTTP, sehingga pengetahuan tentang protokol Data Google, protokol khusus layanan, dan format data XML yang digunakan adalah prasyarat untuk menggunakan aplikasi. Beberapa alat lain disebutkan dalam artikel ini untuk mempermudah tugas-tugas ini.

Artikel ini menggunakan contoh berdasarkan API data Album Web Picasa. Namun, semua contoh ini dapat dengan mudah diterapkan ke Google Data API lainnya.

Mendapatkan dan menginstal cURL

cURL biasanya tersedia di penginstalan default banyak platform UNIX/Linux. Coba ketik curl di shell favorit Anda untuk melihat apakah alat telah diinstal dan ada di PATH Anda. Jika Anda belum menginstal alat ini, buka halaman download di situs cURL untuk mendapatkan sumber resmi atau paket biner yang dikontribusikan pengguna. Perhatikan bahwa alat command line menggunakan library libcurl, yang mungkin ditawarkan sebagai paket download terpisah. Jadi, jika Anda tidak mengompilasi dari sumber, pastikan untuk mendownload paket 'biner' dan bukan paket 'libcurl'. Paket yang mendukung SSL diperlukan jika Anda ingin menggunakan cURL untuk mendapatkan token autentikasi atau untuk mengakses beberapa layanan Data Google yang mengharuskan penggunaan SSL untuk permintaan.

Melakukan autentikasi ke Layanan Data Google

Permintaan Data Google yang diautentikasi dilakukan dengan menambahkan header HTTP ke permintaan yang berisi token autentikasi ClientLogin (aplikasi desktop/seluler) atau AuthSub (aplikasi web). Untuk tujuan pengujian menggunakan cURL, ClientLogin adalah metode yang lebih mudah dan didokumentasikan di bawah. Header autentikasi AuthSub dapat digunakan dengan cURL, tetapi proses yang lebih canggih untuk mendapatkan token tidak termasuk dalam cakupan artikel ini.

Menggunakan ClientLogin

ClientLogin ditujukan untuk aplikasi yang diinstal (desktop/seluler). Dengan metode autentikasi ini, aplikasi yang menggunakan Google Data API secara langsung menangani nama pengguna dan sandi pengguna.

Permintaan autentikasi untuk ClientLogin menggunakan nama pengguna, sandi, dan nama layanan sebagai variabel postingan formulir. Variabel ini diteruskan sebagai argumen Email, Passwd, dan service. Permintaan ini menghasilkan respons dengan beberapa token, salah satunya dapat digunakan untuk membuat permintaan ke layanan Data Google. Perhatikan bahwa argumen data yang diteruskan dengan curl harus dienkode ke URL jika berisi karakter non-ASCII, yang sering muncul dalam argumen Email dan Passwd. Anda dapat meminta curl untuk mengenkode URL argumen ini menggunakan tanda --data-urlencode.

Contoh Permintaan:

curl https://www.google.com/accounts/ClientLogin \
--data-urlencode [email protected] --data-urlencode Passwd=new+foundland \
-d accountType=GOOGLE \
-d source=Google-cURL-Example \
-d service=lh2

Contoh Respons:

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

Lihat dokumentasi ClientLogin untuk mengetahui informasi spesifik tentang parameter yang digunakan dalam permintaan di atas. Dalam contoh ini, layanan yang kita gunakan adalah Picasa Web Albums Data API. Nama layanan (service) adalah lh2. Nama layanan untuk layanan Data Google lainnya dapat ditemukan di halaman FAQ Google Data API.

Nilai token Auth dalam respons di atas adalah satu-satunya nilai yang diperlukan untuk autentikasi ke layanan Data Google. Nilai token ini dibentuk menjadi header HTTP yang kemudian digunakan untuk setiap permintaan ke layanan Data Google.

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

Catatan: Metode untuk menghindari karakter baris baru dengan karakter garis miring terbalik ('\') di atas tidak berfungsi di command shell Windows, jadi Anda harus memasukkan seluruh perintah dalam satu baris jika menjalankan curl di Windows.


Mengambil feed dan entri

Di Google Data API, pengambilan feed dan entri dilakukan dengan menjalankan HTTP GET di URL, dengan kumpulan parameter kueri opsional. Karena kita melakukan permintaan GET, hanya header autentikasi dan URL yang perlu diteruskan ke curl. Contoh di bawah akan terus menggunakan Picasa Web Albums Data API dan digunakan untuk mengambil daftar album yang dimiliki oleh pengguna terautentikasi. Perhatikan bahwa kita telah memperpendek token autentikasi menjadi ABCDEFG dalam contoh ini, tetapi token lengkap (misalnya, EUBBIacA...32JKOuGh dari atas) harus digunakan sebagai gantinya.

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

Tindakan ini akan menampilkan blob XML yang tidak diformat:

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

Ada beberapa alat yang cukup baik untuk memformat output ini agar lebih mudah dibaca manusia, termasuk tidy. Cara termudah untuk menggunakan tidy adalah dengan mengalirkan output dari perintah curl ke tidy seperti berikut:

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

Hal ini akan menghasilkan feed yang jauh lebih mudah dibaca, seperti berikut:

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

Entri individual dapat diambil dengan cara yang sama dengan memberikan URL untuk entri, bukan URL feed.

Memperbarui entri

Entri di Google Data API diperbarui dengan melakukan HTTP PUT ke URL edit dengan salinan baru XML entri di isi permintaan.

  1. Ambil entri menggunakan nilai URL atom:link/@rel='self'
  2. Perbarui entri secara lokal untuk melakukan perubahan yang diperlukan
  3. PUT entri kembali ke server, menggunakan nilai URL atom:link/@rel='edit'

1. Mengambil entri

Entri dapat diambil menggunakan salah satu dari dua URL yang dicetak tebal di blok feed di atas. URL yang diperlukan adalah nilai href untuk elemen link dengan rel='self'.

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

2. Memperbarui entri secara lokal

Setelah Anda mengambil entri, entri tersebut perlu diperbarui menggunakan editor teks atau aplikasi lokal untuk melakukan perubahan yang diperlukan pada entri. Pada perintah di atas untuk mengambil entri, kita tidak menyalurkan hasil ke tidy seperti yang telah kita lakukan pada contoh sebelumnya. Hasilnya adalah XML yang merepresentasikan data yang sama, tetapi memiliki format yang berbeda dengan versi yang dialirkan ke tidy. Untuk tujuan mengedit entri secara manual, penggunaan tidy sering kali mempermudah penggunaan XML.

Catatan: Jangan lupa untuk menyertakan semua definisi namespace XML yang digunakan sebagai atribut ke atom:entry saat Anda memposting entri baru. Menghilangkan elemen ini akan menyebabkan pengecualian penguraian. Selain itu, tidy akan mengganti spasi di antara definisi namespace dengan karakter baris baru. Meskipun ini adalah XML yang valid, layanan Data Google tidak menerimanya saat ini. Jika Anda menggunakan tidy, pastikan untuk menambahkan spasi tambahan di antara atribut ini pada elemen entry.

3. Memperbarui entri di server

Dengan menggunakan URL edit, Anda perlu PUT salinan entri ke layanan menggunakan cURL. Header untuk menunjukkan jenis konten yang dikirim ke server perlu ditambahkan. Cuplikan berikut mengasumsikan bahwa file dengan entri yang diperbarui disimpan di updated_entry.xml.

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"

Membuat entri

Entri di Google Data API dibuat dengan melakukan HTTP POST ke URL postingan dengan entri baru. atom:id ditetapkan oleh server, sehingga tidak perlu disertakan dalam entri baru. Cara termudah untuk membuat entri baru adalah dengan mengambil entri lama dan mengubahnya. Contoh berikut akan melakukannya.

  1. Mengambil entri template menggunakan atom:link/@rel='self'
  2. Ubah entri template secara lokal untuk menghapus informasi yang tidak perlu dan melakukan perubahan yang diperlukan
  3. POST entri kembali ke server, menggunakan URL post untuk feed. Nilai ini dapat ditemukan di feed yang diambil sebagai nilai href untuk elemen link dengan rel='http://schemas.google.com/g/2005#post', atau di dokumentasi untuk layanan di http://code.google.com.

1. Mengambil entri template

Satu entri dapat diambil menggunakan nilai href dari elemen link dengan rel='self' dengan cara yang sama seperti entri diambil sebelum diperbarui dalam contoh di atas.

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

Respons, setelah menggunakan tidy akan terlihat seperti:

<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. Mengubah entri template

Kita ingin membuat album bernama "Curling di Kanada" dengan foto dari pertandingan curling terakhir kita. Data Google memungkinkan Anda meletakkan elemen Atom yang nilainya disediakan oleh server, jadi untuk membuat entri template sederhana ini, kita akan menghapus atom:id, atom:published, atom:updated, atom:author, dan berbagai elemen atom:link dalam feed. Tindakan ini akan memberi kita entri template yang disederhanakan. Kemudian, entri perlu diubah untuk merepresentasikan album baru yang kita buat:

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

Catatan: Jangan lupa untuk menyertakan semua definisi namespace XML yang digunakan sebagai atribut ke atom:entry saat Anda memposting entri baru. Menghilangkan elemen ini akan menyebabkan pengecualian penguraian. Selain itu, tidy akan mengganti spasi di antara definisi namespace dan menggantinya dengan karakter baris baru. Meskipun ini adalah XML yang valid, layanan Data Google tidak menerimanya saat ini. Jika Anda menggunakan tidy, pastikan untuk menambahkan spasi tambahan di antara atribut ini pada elemen entry.

3. Memposting entri baru ke server

Perintah curl untuk memposting entri baru ke server sangat mirip dengan memperbarui entri yang ada, hanya saja URL-nya berbeda:

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

Jika postingan berhasil, output XML yang dihasilkan adalah salinan entri yang baru dibuat. Entri ini akan menyertakan hal-hal yang dihasilkan server pada saat entri dibuat, termasuk nilai untuk elemen atom:id, atom:published, atom:updated, dan atom:link. Nilai link yang dihasilkan dapat digunakan untuk mengedit atau menghapus entri, asalkan tidak ada perubahan tambahan yang dilakukan sementara itu.

Menghapus entri

Menghapus entri sangat mirip dengan memperbarui entri, kecuali metode HTTP DELETE digunakan, bukan HTTP PUT, dan tidak ada data yang perlu dikirim. Seperti permintaan update, URL edit digunakan sebagai target permintaan HTTP.

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

Mengupload objek media

Fitur penting dari Picasa Web Albums Data API dan Documents List Data API adalah kemampuan untuk mengupload objek biner. cURL dapat dengan mudah menyelesaikan penguploadan data biner dan header slug. Namun, Documents List Data API saat ini mengharuskan postingan XML bersama dengan data biner sebagai pesan multipart MIME. Pembentukan pesan multipart tidak dibahas dalam artikel ini.

Contoh di bawah ini menunjukkan cara mengupload gambar bernama sweeping_the_rock.png ke Album Web Picasa dengan judul "Sweeping the rock":

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

Alat command line lainnya

Beberapa developer lebih suka mempelajari atau men-debug menggunakan alat command line lainnya.

Alat populer mencakup:

  • telnet, openssl digunakan untuk membuat koneksi soket mentah (masing-masing berbasis teks biasa dan ssl) ke server web dan dapat digunakan untuk berinteraksi dengan layanan Data Google. Perhatikan bahwa tidak semua layanan Data Google mungkin mendukung SSL. Berikut cara membuka koneksi:
    • telnet picasaweb.google.com 80 (Picasa Web Albums Data API)
    • openssl s_client -connect www.google.com:443 (Google Calendar Data API dan layanan lainnya di www.google.com)
    Setelah koneksi dibuat, permintaan HTTP mentah harus dikirim. Permintaan ini mencakup kata kerja HTTP, jalur relatif, versi, semua header, dan isi permintaan. Berikut contohnya:
    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>
    
    Saat mengirim data HTTP mentah, perhatikan bahwa operasi POST dan PUT akan memerlukan penghitungan nilai untuk header Content-Length. Anda dapat menggunakan alat UNIX wc untuk menghitung nilai ini. Tempatkan semua konten isi HTTP ke dalam file teks seperti template_entry.xml (contoh yang digunakan di atas) dan jalankan wc -c template_entry.xml. Sering kali sulit untuk men-debug jika Anda secara tidak sengaja menggunakan nilai yang salah untuk header Content-Length.
  • wget biasanya digunakan untuk mendownload data dari server web ke file lokal. Namun, wget memiliki banyak opsi yang membuatnya mampu melakukan semua jenis permintaan yang diperlukan untuk berinteraksi dengan layanan Data Google. Berikut adalah contoh cara menggunakan wget untuk POST entri album baru ke Album Web Picasa:
    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 adalah alat untuk menerapkan transformasi XSL (XSLT) ke dokumen XML. Library ini dapat digunakan untuk mengekstrak data yang diinginkan dengan mudah dari entri atau feed XML yang ditampilkan oleh Google Data API, atau untuk membuat entri baru atau yang diperbarui.

Kesimpulan

Seperti yang telah Anda lihat, cURL dan beberapa alat command line lainnya dapat digunakan untuk berinteraksi dengan mudah dengan layanan Data Google menggunakan XML dan HTTP mentah. Bergabunglah dengan kami di forum khusus API jika ada pertanyaan tentang penggunaan alat ini dengan Google Data API favorit Anda.