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, banyak di antaranya telah diganti dengan API yang lebih baru. Untuk informasi tentang API baru tertentu, lihat dokumentasi API baru. Untuk informasi tentang memberi otorisasi permintaan dengan API baru, lihat Autentikasi dan Otorisasi Akun Google.

Ryan Boyd, Tim Google Data API
September 2007

Pengantar

Pada intinya, Google Data API menggunakan feed dan entri Atom (XML) sebagai format data dan HTTP sebagai protokol untuk transmisi data - memperluas Protokol Penerbitan Atom. Kami memublikasikan sejumlah library klien untuk mempermudah interaksi dengan Google Data API. Namun, Anda tetap dapat menggunakan alat tingkat rendah untuk bekerja 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 pada tingkat rendah.

cURL hanya memberikan dukungan untuk melakukan komunikasi HTTP, jadi pengetahuan tentang protokol Data Google, protokol khusus layanan, dan format data XML yang digunakan adalah prasyarat untuk bekerja dengan aplikasi. Beberapa alat lain disebutkan dalam artikel ini agar tugas tersebut menjadi lebih mudah.

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

Mendapatkan dan menginstal cURL

cURL biasanya tersedia pada penginstalan default banyak platform UNIX/Linux. Coba ketik curl di shell favorit Anda untuk melihat apakah alat tersebut terinstal dan berada di PATH Anda. Jika Anda belum menginstal alat tersebut, buka halaman download di situs cURL untuk mendapatkan paket biner sumber resmi atau kontribusi 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', bukan paket 'libcurl'. Paket yang mendukung SSL diperlukan jika Anda ingin menggunakan cURL untuk mendapatkan token autentikasi atau mengakses beberapa layanan Data Google yang mengharuskan penggunaan SSL untuk permintaan.

Mengautentikasi 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 untuk memperoleh token yang lebih kompleks berada di luar cakupan artikel ini.

Menggunakan ClientLogin

ClientLogin ditujukan untuk aplikasi yang terinstal (desktop/seluler). Dengan metode autentikasi ini, aplikasi yang menggunakan Google Data API akan 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 masing-masing 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 dienkodekan URL jika berisi karakter non-ASCII, yang sering muncul dalam argumen Email dan Passwd. Anda dapat meminta curl untuk mengenkode URL argumen ini menggunakan flag --data-urlencode.

Contoh Permintaan:

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

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 informasi khusus terkait parameter yang digunakan dalam permintaan di atas. Dalam contoh ini, layanan yang kami gunakan adalah data API Album Web Picasa. 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 escape karakter baris baru dengan karakter garis miring terbalik ('\') di atas tidak berfungsi di shell perintah 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 melakukan GET HTTP pada URL, dengan kumpulan parameter kueri opsional. Karena kita membuat permintaan GET, hanya header autentikasi dan URL yang harus diteruskan ke curl. Contoh di bawah akan terus menggunakan data API Album Web Picasa dan digunakan untuk mengambil daftar album yang dimiliki oleh pengguna yang terautentikasi. Perlu diketahui bahwa kami telah memperpendek token autentikasi menjadi ABCDEFG dalam contoh ini, tetapi token lengkap (misalnya EUBBIacA...32JKOuGh dari atas) harus digunakan sebagai penggantinya.

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

Ini akan mengembalikan 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 memadai untuk memformat output ini agar lebih mudah dibaca manusia, termasuk terapi. Cara termudah untuk menggunakan tidy adalah dengan menyalurkan 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

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

Setiap entri 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 pada URL edit dengan salinan baru XML entri dalam isi permintaan.

  1. Ambil entri menggunakan nilai URL atom:link/@rel='self'
  2. Memperbarui entri secara lokal untuk membuat 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 perlu diperbarui menggunakan editor teks lokal atau aplikasi untuk membuat perubahan yang diperlukan pada entri. Dalam perintah di atas untuk mengambil entri, kita tidak menyisipkan hasilnya ke tidy seperti yang telah kita lakukan dalam contoh sebelumnya. Hasilnya adalah XML yang mewakili data yang sama, tetapi memiliki format yang berbeda dengan versi yang diterapkan ke tidy. Untuk tujuan pengeditan entri secara manual, menggunakan tidy sering kali dapat memudahkan penggunaan XML.

Catatan: Jangan lupa untuk menyertakan semua definisi namespace XML yang digunakan sebagai atribut ke atom:entry saat Anda memposting entri baru. Menghapusnya akan menyebabkan pengecualian pengecualian. Selain itu, tidy akan mengganti spasi di antara definisi namespace dengan karakter baris baru. Meskipun ini adalah XML yang valid, layanan Data Google saat ini tidak menerimanya. 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 harus 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_entri.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 pada 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 melakukan hal itu.

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

1. Mengambil entri template

Entri tunggal dapat diambil menggunakan nilai href dari elemen link dengan rel='self' dengan cara yang sama seperti entri yang diambil sebelum memperbaruinya pada 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

Setelah menggunakan tidy, responsnya akan terlihat seperti ini:

<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

Kami ingin membuat album berjudul "Keriting di Kanada" dengan foto dari pertandingan curling terbaru kami. Data Google memungkinkan Anda menghapus 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 di feed. Tindakan ini akan memberi kita entri template yang disederhanakan. Entri tersebut kemudian harus dimodifikasi untuk mewakili 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. Menghapusnya akan menyebabkan pengecualian pengecualian. 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 saat ini tidak menerimanya. 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 sudah ada, kecuali bahwa 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 dibuat untuk sementara.

Menghapus entri

Menghapus entri sangat mirip dengan memperbarui entri, tetapi metode HTTP DELETE akan digunakan, bukan HTTP PUT, dan tidak ada data yang perlu dikirim. Sama halnya dengan permintaan pembaruan, 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 API data Album Web Picasa dan API data Dokumen Daftar adalah kemampuan untuk mengunggah objek biner. cURL dapat dengan mudah menyelesaikan upload data biner dan header slug. Namun, API data Daftar Dokumen saat ini memerlukan postingan XML bersama dengan data biner sebagai pesan multibagian MIME. Membuat pesan multibagian di luar cakupan artikel ini.

Contoh di bawah menunjukkan cara mengupload gambar bernama sweeping_the_rock.png ke Album Web Picasa dengan judul "Menyapu batu":

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 memilih pembelajaran atau proses debug menggunakan alat command line lainnya.

Alat populer mencakup:

  • telnet, openssl digunakan untuk membuat koneksi socket raw (masing-masing berbasis teks biasa dan berbasis ssl) ke server web dan dapat digunakan untuk berinteraksi dengan layanan Data Google. Perhatikan bahwa tidak semua layanan Data Google dapat mendukung SSL. Berikut cara membuka koneksinya:
    • telnet picasaweb.google.com 80 (Data API Album Web Picasa)
    • openssl s_client -connect www.google.com:443 (API data Google Kalender 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 komputasi 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 melakukan debug jika Anda 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 berbagai 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. Ini dapat digunakan untuk dengan mudah mengekstrak bit data yang diinginkan dari entri XML atau feed yang ditampilkan oleh Google Data API, atau untuk membuat entri baru atau yang diperbarui.

Kesimpulan

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