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 APISeptember 2007
- Pengantar
- Mendapatkan dan menginstal cURL
- Mengautentikasi ke Layanan Data Google
- Mengambil feed dan entri
- Memperbarui entri
- Membuat entri
- Menghapus entri
- Mengupload objek media
- Alat command line lainnya
- Kesimpulan
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.
- Ambil entri menggunakan nilai URL
atom:link/@rel='self'
- Perbarui entri secara lokal untuk melakukan perubahan yang diperlukan
PUT
entri kembali ke server, menggunakan nilai URLatom: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.
- Mengambil entri template menggunakan
atom:link/@rel='self'
- Ubah entri template secara lokal untuk menghapus informasi yang tidak perlu dan melakukan perubahan yang diperlukan
POST
entri kembali ke server, menggunakan URLpost
untuk feed. Nilai ini dapat ditemukan di feed yang diambil sebagai nilaihref
untuk elemenlink
denganrel='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)
Saat mengirim data HTTP mentah, perhatikan bahwa operasiPOST /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>
POST
danPUT
akan memerlukan penghitungan nilai untuk headerContent-Length
. Anda dapat menggunakan alat UNIXwc
untuk menghitung nilai ini. Tempatkan semua konten isi HTTP ke dalam file teks sepertitemplate_entry.xml
(contoh yang digunakan di atas) dan jalankanwc -c template_entry.xml
. Sering kali sulit untuk men-debug jika Anda secara tidak sengaja menggunakan nilai yang salah untuk headerContent-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 menggunakanwget
untukPOST
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.