Blogger Data API memungkinkan aplikasi klien melihat dan memperbarui konten Blogger dalam bentuk feed Google Data API.
Aplikasi klien Anda dapat menggunakan Blogger Data API untuk membuat postingan blog baru, mengedit atau menghapus postingan blog yang ada, dan membuat kueri untuk postingan blog yang cocok dengan kriteria tertentu.
Selain memberikan beberapa latar belakang tentang kemampuan Blogger Data API, dokumen ini memberikan contoh interaksi Data API dasar menggunakan library klien Python. Jika Anda tertarik untuk lebih memahami protokol dasar yang digunakan library, lihat bagian Protokol dalam panduan developer ini.
Daftar Isi
Audiens
Dokumen ini ditujukan untuk programmer yang ingin menulis aplikasi klien Python yang dapat berinteraksi dengan Blogger.
Dokumen ini mengasumsikan bahwa Anda memahami ide umum di balik protokol Google Data API.
Untuk informasi referensi Blogger Data API umum, lihat Panduan referensi protokol.
Memulai
Untuk mendapatkan bantuan dalam menyiapkan library klien, lihat Panduan Memulai.
Library klien Python memerlukan Python 2.2 atau yang lebih baru. Setelah mendownload library klien, Anda juga harus mendownload dan menginstal paket ElementTree.
Membuat akun Blogger
Sebaiknya daftar ke akun Blogger untuk tujuan pengujian. Blogger menggunakan Akun Google, jadi jika Anda sudah memiliki Akun Google, Anda sudah siap.
Menjalankan kode contoh
Klien contoh yang berfungsi penuh, yang berisi semua kode contoh yang ditampilkan dalam dokumen
ini, tersedia dalam file
BloggerExample.py
, di direktori
gdata-python-client/samples/blogger/
.
Klien contoh melakukan beberapa operasi pada blog yang disediakan untuk menunjukkan penggunaan Blogger Data API.
Anda dapat menjalankan contoh dengan argumen berikut:
python BloggerExample.py --email [email_address] --password [password]
Untuk menggunakan contoh dalam dokumen ini dalam kode Anda sendiri, Anda memerlukan
pernyataan import
berikut:
from gdata import service import gdata import atom
Mengautentikasi ke layanan Blogger
Anda dapat mengakses feed publik dan pribadi menggunakan Blogger Data API. Feed publik tidak memerlukan autentikasi apa pun, tetapi bersifat hanya baca. Jika Anda ingin mengubah blog, klien Anda harus melakukan autentikasi sebelum meminta feed pribadi. Layanan ini dapat mengautentikasi menggunakan salah satu dari tiga pendekatan:autentikasi OAuth, autentikasi proxy AuthSub, atau autentikasi nama pengguna/sandi ClientLogin.
Untuk informasi selengkapnya tentang autentikasi dengan Google Data API secara umum, lihat dokumentasi autentikasi.
Sebagian besar contoh di bagian berikutnya dalam dokumen ini mengasumsikan bahwa Anda memiliki
instance GDataService
yang diautentikasi.
Autentikasi OAuth
Untuk dokumentasi tentang autentikasi OAuth menggunakan library GData Python, lihat OAuth di Library Klien Google Data Protocol.
Autentikasi proxy AuthSub
Autentikasi proxy AuthSub digunakan oleh aplikasi web yang perlu mengautentikasi penggunanya ke Akun Google. Operator situs dan kode klien tidak memiliki akses ke nama pengguna dan sandi untuk pengguna Blogger; sebagai gantinya, klien mendapatkan token AuthSub khusus yang memungkinkan klien bertindak atas nama pengguna tertentu. Untuk informasi yang lebih mendetail, lihat dokumentasi AuthSub.
Saat pertama kali mengunjungi aplikasi Anda, pengguna belum diautentikasi. Dalam hal ini, Anda perlu menampilkan beberapa informasi dan link yang mengarahkan pengguna ke halaman Google untuk mengautentikasi permintaan Anda untuk mengakses blog mereka. Library klien Python menyediakan fungsi untuk membuat URL halaman Google. Kode di bawah mengambil URL halaman AuthSubRequest:
def GetAuthSubUrl(): next = 'http://www.example.com/welcome.pyc' scope = 'http://www.blogger.com/feeds/' secure = False session = True blogger_service = service.GDataService() return blogger_service.GenerateAuthSubURL(next, scope, secure, session); authSubUrl = GetAuthSubUrl(); print '<a href="%s">Login to your Google account</a>' % authSubUrl
Metode GenerateAuthSubURL
menggunakan parameter berikut
(sesuai dengan parameter kueri yang digunakan oleh pengendali AuthSubRequest):
- berikutnya
- URL halaman yang menjadi tujuan pengalihan pengguna oleh Google setelah autentikasi.
- cakupan
- Menunjukkan bahwa aplikasi meminta token untuk mengakses feed Blogger. String cakupan yang akan digunakan adalah
http://www.blogger.com/feeds/
(tentunya dienkode URL). - aman
- Menunjukkan apakah klien meminta token aman.
- sesi
- Menunjukkan apakah token yang ditampilkan dapat ditukar dengan token multi-penggunaan (sesi).
Contoh di atas menunjukkan panggilan yang tidak meminta token aman (nilai secure
adalah False
). URL permintaan yang dihasilkan mungkin terlihat seperti ini:
https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fwelcome.pyc
Pengguna mengikuti link ke situs Google dan melakukan autentikasi ke Akun Google-nya.
Setelah pengguna melakukan autentikasi, sistem AuthSub akan mengalihkan mereka ke URL
yang Anda tentukan dalam parameter kueri next
dari URL AuthSubRequest. Sistem AuthSub menambahkan token autentikasi ke URL tersebut, sebagai
nilai parameter kueri token
. Contoh:
http://www.example.com/welcome.pyc?token=yourAuthToken
Ada beberapa cara untuk mengambil nilai token dari URL; misalnya:
import cgi parameters = cgi.FieldStorage() authsub_token = parameters['token']
Nilai token ini mewakili token AuthSub sekali pakai. Dalam contoh ini,
karena session = True
ditentukan, token ini dapat ditukar dengan
token sesi AuthSub menggunakan metode UpgradeToSessionToken
,
yang memanggil layanan
AuthSubSessionToken
:
blogger_service = service.GDataService() blogger_service.auth_token = authsub_token blogger_service.UpgradeToSessionToken()
Artinya, Anda meneruskan token sekali pakai ke
metode UpgradeToSessionToken
, dan antarmuka AuthSub menampilkan
token sesi.
Aplikasi Anda kemudian dapat menggunakan nilai token sesi dalam interaksi berikutnya dengan Blogger. Library klien secara otomatis mengirim token bersama dengan permintaan.
Autentikasi nama pengguna/sandi ClientLogin
Gunakan autentikasi ClientLogin jika klien Anda adalah klien mandiri dan satu pengguna
yang "diinstal" (seperti aplikasi desktop). Cukup panggil
metode ProgrammaticLogin()
pada instance GDataService
Anda dan semua interaksi berikutnya dengan Blogger akan
diautentikasi:
blogger_service = service.GDataService('user@example.com', 'secretPassword') blogger_service.source = 'exampleCo-exampleApp-1.0' blogger_service.service = 'blogger' blogger_service.account_type = 'GOOGLE' blogger_service.server = 'www.blogger.com' blogger_service.ProgrammaticLogin()
Dalam cuplikan di atas, kita menetapkan tiga properti pada instance GDataService
. Yang pertama adalah nama aplikasi kita dalam
bentuk companyName-applicationName-versionID.
Yang kedua adalah nama layanan yang ingin kita berinteraksi; yang ketiga adalah
alamat server.
Perhatikan bahwa account_type
ditetapkan secara eksplisit ke
GOOGLE
. Kegagalan dalam menetapkan parameter ini akan mencegah pengguna G Suite berhasil menggunakan Blogger API.
Untuk mengetahui informasi selengkapnya tentang autentikasi ClientLogin, termasuk contoh permintaan dan respons, lihat dokumentasi Autentikasi untuk Aplikasi yang Diinstal.
Catatan: Gunakan token yang sama untuk semua permintaan dalam sesi tertentu; jangan dapatkan token baru untuk setiap permintaan Blogger.
Catatan: Seperti yang dijelaskan dalam dokumentasi ClientLogin, permintaan autentikasi dapat gagal dan meminta tantangan CAPTCHA. Jika Anda ingin Google mengeluarkan dan menangani verifikasi CAPTCHA, kirim pengguna ke
https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
(bukan ke URL penanganan CAPTCHA yang diberikan dalam dokumentasi
ClientLogin).
Mengambil daftar blog
Blogger Data API menyediakan feed yang mencantumkan blog untuk pengguna tertentu; feed tersebut dikenal sebagai "metafeed".
Contoh kode berikut menggunakan instance GDataService
yang diautentikasi untuk mengambil metafeed, lalu mencetak setiap judul blog.
def PrintUserBlogTitles(blogger_service): query = service.Query() query.feed = '/feeds/default/blogs' feed = blogger_service.Get(query.ToUri()) print feed.title.text for entry in feed.entry: print "\t" + entry.title.text
Catat URL yang digunakan oleh metode Get
. Ini adalah URL metafeed
default; URL ini menampilkan daftar blog untuk pengguna yang saat ini diautentikasi.
Untuk mengakses feed bagi pengguna lain, Anda dapat memasukkan ID pengguna sebagai pengganti
default
di URL metafeed. ID pengguna adalah string angka
di akhir URL profil pengguna.
Cuplikan kode di bawah menunjukkan cara mengekstrak ID blog dari feed. Anda memerlukan ID blog untuk melakukan operasi pembuatan, pembaruan, dan penghapusan pada postingan dan komentar. Cuplikan di bawah memilih blog pertama yang diambil untuk pengguna.
blog_id = feed.entry[0].GetSelfLink().href.split("/")[-1]
Dalam contoh BloggerExample.py
, class BloggerExample
dibuat, dan ID blog ditetapkan di konstruktor untuk memudahkan akses
nanti. Untuk sebagian besar contoh berikut dalam dokumen ini,
blog_id
diteruskan sebagai variabel.
Membuat postingan
Blogger Data API memungkinkan Anda membuat dan memublikasikan entri blog baru, serta membuat draf entri.
Catatan: Menetapkan penulis kustom untuk postingan saat ini tidak didukung. Semua postingan baru akan muncul seolah-olah dibuat oleh pengguna yang saat ini diautentikasi.
Memublikasikan postingan blog
Anda dapat menggunakan library klien Python untuk memublikasikan entri blog baru.
Pertama, buat instance GDataEntry
untuk merepresentasikan postingan blog.
Kemudian, Anda dapat menetapkan judul, konten, dan atribut lainnya dari postingan blog.
Terakhir, gunakan instance GDataService
untuk menyisipkan postingan. Berikut
contoh cara memublikasikan postingan blog baru:
def CreatePublicPost(blogger_service, blog_id, title, content): entry = gdata.GDataEntry() entry.title = atom.Title('xhtml', title) entry.content = atom.Content(content_type='html', text=content) return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id) blogEntry = CreatePublicPost(blogger_service, blog_id, title='I have the answer', content='Eureka! It is 42!')
Membuat draf postingan blog
Postingan draf dibuat dengan cara yang sama seperti postingan publik, tetapi Anda perlu menetapkan elemen ekstensi draft
di instance GDataEntry
. Postingan blog di atas dapat dibuat sebagai draf dengan menambahkan baris yang ditandai:
def CreateDraftPost(blogger_service, blog_id, title, content): entry = gdata.GDataEntry() entry.title = atom.Title('xhtml', title) entry.content = atom.Content(content_type='html', text=content) control = atom.Control() control.draft = atom.Draft(text='yes') entry.control = control return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id) draftEntry = CreateDraftPost(blogger_service, blog_id, title='I have the question', content='What do you get if you multiply six by nine?')
Anda dapat mengubah draf postingan blog yang ada menjadi postingan yang dipublikasikan dengan mengambil
draf postingan, menetapkan atribut draf ke no
, lalu
memperbarui postingan. Kita akan membahas pengambilan dan pembaruan postingan di dua bagian berikutnya.
Mengambil postingan
Bagian berikut menjelaskan cara mengambil daftar postingan blog, dengan dan tanpa parameter kueri.
Anda dapat membuat kueri feed publik Blogger tanpa autentikasi. Oleh karena itu, Anda tidak perlu menetapkan kredensial atau melakukan autentikasi AuthSub sebelum mengambil postingan dari blog publik.
Mengambil semua postingan blog
Untuk mengambil postingan pengguna, panggil metode GetFeed
dengan
URL feed postingan blog:
def PrintAllPosts(blogger_service, blog_id): feed = blogger_service.GetFeed('/feeds/' + blog_id + '/posts/default') print feed.title.text for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.content.text print "\t" + entry.updated.text print
Mengambil postingan menggunakan parameter kueri
Blogger Data API memungkinkan Anda meminta sekumpulan entri yang cocok dengan kriteria
yang ditentukan, seperti meminta postingan blog yang dipublikasikan atau diperbarui dalam rentang tanggal
tertentu. Untuk melakukannya, Anda membuat instance Query
, lalu memanggil
metode Get()
.
Misalnya, untuk mengirim kueri rentang tanggal, tetapkan properti published_min
dan published_min
instance Query
.
Cuplikan kode berikut mencetak judul dan konten setiap postingan blog yang dipublikasikan antara waktu mulai dan waktu berakhir yang ditentukan:
def PrintPostsInDateRange(blogger_service, blog_id, start_time='2007-04-01', end_time='2007-04-25'): query = service.Query() query.feed = '/feeds/' + blog_id + '/posts/default' query.published_min = start_time query.published_max = end_time feed = blogger_service.Get(query.ToUri()) print feed.title.text + " posts between " + start_time + " and " + end_time for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.content.text print "\t" + entry.updated.text print
Perhatikan bahwa objek Query
dibuat menggunakan URL feed
postingan yang sama dengan yang digunakan untuk mengambil postingan.
Blogger Data API mendukung properti Query
berikut:
- kategori
- Menentukan kategori (juga disebut sebagai label) untuk memfilter hasil feed. Misalnya,
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
menampilkan entri dengan labelFritz
danLaurie
. Untuk menentukan kueri kategori tersebut di library klien Python, Anda dapat menggunakanquery.categories = ['Fritz','Laurie',]
- max_results
- Jumlah maksimum entri yang akan ditampilkan.
- published_min, published_max
- Batas pada tanggal publikasi entri.
- start_index
- Indeks berbasis 1 dari hasil pertama yang akan diambil (untuk paging).
- updated_min, updated_max
- Batas pada tanggal pembaruan entri. Parameter kueri ini diabaikan kecuali jika parameter
orderby
ditetapkan keupdated
.
Untuk informasi selengkapnya tentang parameter kueri, lihat Panduan Referensi Blogger Data API dan Panduan Referensi Google Data API.
Memperbarui postingan
Untuk memperbarui postingan blog yang ada, pertama-tama Anda mengambil entri yang ingin
diperbarui, lalu mengubahnya, lalu mengirimkannya ke Blogger menggunakan
metode Put
. Cuplikan kode berikut mengubah judul entri
blog, dengan asumsi bahwa Anda telah mengambil entri dari server.
def UpdatePostTitle(blogger_service, entry_to_update, new_title='The REAL answer'): entry_to_update.title = atom.Title('xhtml', new_title) return blogger_service.Put(entry_to_update, entry_to_update.GetEditLink().href)
Kode di atas menampilkan GDataEntry
yang berisi seluruh
postingan yang baru diperbarui. Untuk memperbarui properti lainnya, cukup tetapkan di
instance GDataEntry
sebelum memanggil Put
.
Catatan: Mengubah data penulis yang terkait dengan postingan saat ini tidak didukung.
Menghapus postingan
Untuk menghapus postingan, teruskan URL edit postingan ke metode Delete
pada objek GDataService
Anda, seperti ini:
def DeletePost(blogger_service, edit_link_href): blogger_service.Delete(edit_link_href)
Komentar
Blogger Data API memungkinkan pembuatan, pengambilan, dan penghapusan komentar. Memperbarui komentar tidak didukung (dan juga tidak tersedia di antarmuka web).
Membuat komentar
Untuk memposting komentar, buat objek GDataEntry
dan sisipkan sebagai berikut:
def CreateComment(blogger_service, blog_id, post_id, comment_text='Mostly harmless'): feed_uri = '/feeds/' + blog_id + '/' + post_id + '/comments/default' entry = gdata.GDataEntry() entry.content = atom.Content(content_type='xhtml', text=comment_text) return blogger_service.Post(entry, feed_uri)
Catatan: Saat ini, Anda hanya dapat memposting komentar ke blog yang dimiliki oleh pengguna yang diautentikasi.
Catatan: Menetapkan penulis kustom untuk komentar saat ini tidak didukung. Semua komentar baru akan muncul seolah-olah dibuat oleh pengguna yang saat ini diautentikasi.
Mengambil komentar
Anda dapat mengambil komentar untuk postingan tertentu dari URL feed komentar postingan:
def PrintAllComments(blogger_service, blog_id, post_id): feed_url = '/feeds/' + blog_id + '/' + post_id + '/comments/default' feed = blogger_service.Get(feed_url) print feed.title.text for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.updated.text print
Atau, Anda bisa mendapatkan komentar dari semua postingan menggunakan URL feed komentar blog:
http://www.blogger.com/feeds/blogID /comments/default
Menghapus komentar
Untuk menghapus komentar, teruskan URL edit komentar ke metode Delete
pada objek GDataService
seperti ini:
def DeleteComment(blogger_service, post_id, comment_id): feed_url = '/feeds/' + post_id + '/comments/default/' + comment_id blogger_service.Delete(feed_url)