Penting: Dokumen ini ditulis sebelum tahun 2012. Opsi autentikasi yang dijelaskan dalam dokumen ini (OAuth 1.0, AuthSub, dan ClientLogin) telah secara resmi tidak digunakan lagi sejak 20 April 2012 dan tidak lagi tersedia. Sebaiknya Anda bermigrasi ke OAuth 2.0 sesegera mungkin.
Google Sites Data API memungkinkan aplikasi klien mengakses, memublikasikan, dan memodifikasi konten dalam Situs Google. Aplikasi klien Anda juga dapat meminta daftar aktivitas terbaru, mengambil histori revisi, dan mendownload lampiran.
Selain memberikan beberapa latar belakang tentang kemampuan Sites Data API, panduan ini memberikan contoh untuk berinteraksi dengan API menggunakan library klien Java. Untuk bantuan menyiapkan library klien, lihat Mulai Menggunakan Library Klien Java Data Google. Jika Anda tertarik, untuk memahami lebih lanjut protokol dasar yang digunakan oleh library klien Java untuk berinteraksi dengan Sites API klasik, silakan lihat panduan protokol.
Audiens
Dokumen ini ditujukan bagi pengembang yang ingin menulis aplikasi klien yang berinteraksi dengan Google Sites menggunakan Library Klien Java Data Google.
Memulai
Google Sites menggunakan Akun Google atau akun G Suite untuk autentikasi. Jika sudah memiliki akun, berarti Anda sudah siap. Atau, Anda dapat membuat akun baru.
Menginstal library
Untuk mendapatkan bantuan dalam menyiapkan dan menginstal library klien, lihat Memulai Library Klien Java Data Google. Jika Anda menggunakan Eclipse, artikel tersebut juga menjelaskan cara menyiapkan project Anda menggunakan plugin Eclipse Google Data API. Berikut adalah hal yang Anda perlukan untuk memulai:
- Menginstal Java 1.5 atau yang lebih tinggi
- Download library klien (versi terbaru
gdata-src.java.zip
) - Download daftar dependensi
- Download contoh aplikasi (versi terbaru
gdata-samples.java.zip
)
Setelah menginstal .jars, Anda harus menyertakan hal berikut dalam proyek Anda:
java/lib/gdata-sites-2.0.jar
- Versi 2.0 di sini ditujukan untuk Sites API klasik versi 1.4.java/lib/gdata-core-1.0.jar
java/lib/gdata-client-1.0.jar
java/lib/gdata-spreadsheet-3.0.jar
(jika menggunakan halaman daftar / item daftar)
Selain itu, pastikan untuk menyertakan jar dependensi (gdata-media-1.0.jar
, mail.jar
, dan google-collect....jar
).
Menjalankan aplikasi contoh
Aplikasi contoh yang berfungsi penuh terletak di subdirektori /java/sample/sites
dari download gdata-samples.java.zip
.
Sumbernya juga tersedia di /trunk/java/sample/sites/
di repositori SVN yang dapat diakses dari tab Source. SitesDemo.java
memungkinkan pengguna melakukan sejumlah operasi yang menunjukkan cara menggunakan Sites API klasik.
Perhatikan bahwa Anda harus menyertakan java/sample/util/lib/sample-util.jar
untuk menjalankan contoh.
Memulai proyek Anda sendiri
Tips: Lihat artikel Menggunakan Eclipse dengan Google Data API untuk penyiapan cepat dengan plugin Eclipse kami.
Tergantung pada kebutuhan aplikasi, Anda memerlukan beberapa impor. Sebaiknya mulai dengan impor berikut:
import com.google.gdata.client.*; import com.google.gdata.client.sites.*; import com.google.gdata.data.*; import com.google.gdata.data.acl.*; import com.google.gdata.data.media.*; import com.google.gdata.data.sites.*; import com.google.gdata.data.spreadsheet.*; // If working with listpages / listitems import com.google.gdata.util.*;
Selanjutnya, Anda juga perlu menyiapkan objek SitesService
, yang mewakili koneksi klien ke Sites API klasik:
SitesService client = new SitesService("yourCo-yourAppName-v1");
Argumen applicationName
harus mengikuti format: company-applicationname-version
. Parameter ini digunakan untuk tujuan logging.
Catatan: Bagian selanjutnya dalam panduan ini mengasumsikan bahwa Anda membuat SitesService
dalam variabel client
.
Mengautentikasi ke Sites API klasik
Library klien Java dapat digunakan untuk menangani feed publik atau pribadi. Sites Data API memberikan akses ke data pribadi dan publik feed, bergantung pada izin Sites dan operasi yang Anda coba lakukan. Misalnya, Anda mungkin dapat membaca {i>content feed<i} pada situs publik tetapi tidak memperbaruinya - sesuatu yang memerlukan klien yang telah diotentikasi. Hal ini dapat dilakukan melalui Autentikasi nama pengguna/sandi ClientLogin, AuthSub, atau OAuth.
Lihat Ringkasan Autentikasi Google Data API untuk informasi selengkapnya tentang AuthSub, OAuth, dan ClientLogin.
Tips: API mendukung SSL (HTTPS). Jika Anda menggunakan AuthSub/OAuth, pastikan untuk menentukan
cakupan https://sites.google.com/feeds/
untuk meminta feed melalui SSL. Perhatikan juga bahwa untuk
Domain G Suite, domain 'Wajibkan SSL' di panel kontrol administratif dipatuhi oleh API. Anda dapat memaksa semua
Permintaan API dilakukan melalui HTTPS dengan memanggil client.useSsl();
.
AuthSub untuk aplikasi web
Autentikasi AuthSub untuk Aplikasi Web harus digunakan oleh aplikasi klien yang perlu melakukan autentikasi pengguna ke akun Google. Operator tidak memerlukan akses ke nama pengguna dan sandi pengguna Google Sites - hanya Token AuthSub wajib diisi.
Lihat petunjuk untuk memasukkan AuthSub ke dalam aplikasi web Anda
Meminta token sekali pakai
Ketika pengguna pertama kali mengunjungi aplikasi Anda, mereka perlu melakukan autentikasi. Biasanya, developer mencetak beberapa teks dan link yang mengarahkan pengguna ke halaman persetujuan AuthSub untuk mengautentikasi pengguna dan meminta akses ke dokumen mereka. Library klien Java Data Google menyediakan fungsi untuk membuat URL ini. Kode di bawah ini menyiapkan link ke halaman AuthSubRequest.
import com.google.gdata.client.*; String nextUrl = "http://www.example.com/welcome.jsp"; String scope = "https://sites.google.com/feeds/"; boolean secure = true; boolean session = true; String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);
Jika Anda ingin mengautentikasi pengguna di domain yang dihosting G Suite:
import com.google.gdata.client.*; String hostedDomain = "example.com"; String nextUrl = "http://www.example.com/welcome.jsp"; String scope = "https://sites.google.com/feeds/"; // SSL is also supported boolean secure = true; boolean session = true; String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);
Metode getRequestUrl()
mengambil beberapa parameter (sesuai dengan parameter kueri yang digunakan oleh pengendali AuthSubRequest):
- URL next — URL yang akan menjadi tujuan pengalihan Google
setelah pengguna login ke akunnya dan memberikan akses;
http://www.example.com/welcome.jsp
pada contoh di atas - cakupan —
https://sites.google.com/feeds/
pada contoh di atas - boolean untuk menunjukkan apakah token akan digunakan dalam mode terdaftar atau tidak;
false
pada contoh di atas - boolean kedua untuk menunjukkan apakah token tersebut nantinya akan ditukarkan dengan token sesi atau tidak;
true
pada contoh di atas
Mengupgrade ke token sesi
Lihat Menggunakan AuthSub dengan Library Klien Google Data API.
Mengambil informasi tentang token sesi
Lihat Menggunakan AuthSub dengan Library Klien Google Data API.
Mencabut token sesi
Lihat Menggunakan AuthSub dengan Library Klien Google Data API.
OAuth untuk web atau aplikasi terinstal/seluler
OAuth dapat digunakan sebagai alternatif AuthSub, dan ditujukan untuk aplikasi web. OAuth mirip dengan menggunakan mode aman dan terdaftar dari AuthSub karena semua permintaan data harus ditandatangani secara digital dan Anda harus mendaftarkan domain Anda.
Lihat petunjuk untuk menerapkan OAuth ke aplikasi yang diinstal
Mengambil token permintaan
Lihat Menggunakan OAuth dengan Library Klien Google Data API.
Memberi otorisasi token permintaan
Lihat Menggunakan OAuth dengan Library Klien Google Data API.
Mengupgrade ke token akses
Lihat Menggunakan OAuth dengan Library Klien Google Data API.
ClientLogin untuk aplikasi seluler/yang terpasang
ClientLogin harus digunakan oleh aplikasi terinstal atau seluler yang harus melakukan autentikasi pengguna ke akun Google. Saat pertama kali dijalankan, aplikasi Anda meminta pengguna untuk memasukkan nama pengguna/sandi. Pada permintaan berikutnya, token otentikasi direferensikan.
Lihat petunjuk untuk memasukkan ClientLogin ke dalam aplikasi yang terinstal
Untuk menggunakan ClientLogin, panggil metode
setUserCredentials()
obyek SitesService
yang diwarisi dari
GoogleService
. Menentukan alamat email dan sandi pengguna
yang diatasnamakan oleh klien Anda
untuk membuat permintaan. Contoh:
SitesService client = new SitesService("yourCo-yourAppName-v1"); client.setUserCredentials("example@gmail.com", "pa$$word");
Tips: Setelah aplikasi Anda berhasil mengautentikasi pengguna untuk pertama kalinya, simpan token autentikasi di {i>database<i} untuk diingat untuk digunakan di kemudian hari. Tidak perlu meminta sandi kepada pengguna setiap kali aplikasi Anda dijalankan. Lihat Memanggil kembali token autentikasi untuk mengetahui informasi selengkapnya.
Untuk informasi selengkapnya tentang cara menggunakan ClientLogin di aplikasi Java, lihat Menggunakan ClientLogin dengan Library Klien Google Data API.
Feed Situs
Feed situs dapat digunakan untuk mencantumkan Google Sites yang dimiliki pengguna atau yang izin lihatnya dimiliki pengguna. Nama ini juga dapat digunakan untuk mengubah nama situs yang ada. Untuk domain G Suite, alat ini juga dapat digunakan untuk membuat dan/atau menyalin seluruh situs.
Mencantumkan situs
Untuk mengkueri feed situs, kirim GET
HTTP ke URL feed situs:
https://sites.google.com/feeds/site/site/
Di klien Java, gunakan class SiteFeed
dan SiteEntry
untuk berfungsi
dengan feed situs:
public String getSiteFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) return "https://sites.google.com/feeds/site/" + domain + "/"; } public void getSiteFeed() throws IOException, ServiceException { SiteFeed siteFeed = client.getFeed(new URL(getSiteFeedUrl()), SiteFeed.class); for (SiteEntry entry : siteFeed.getEntries()){ System.out.println("title: " + entry.getTitle().getPlainText()); System.out.println("site name: " + entry.getSiteName().getValue()); System.out.println("theme: " + entry.getTheme().getValue()); System.out.println(""); } }
Cuplikan di atas mencetak judul situs, nama situs, dan tema situs. Pengambil lainnya tersedia untuk yang mengakses properti tambahan di feed.
Membuat situs baru
Catatan: Fitur ini hanya tersedia untuk domain G Suite.
Situs baru dapat disediakan dengan membuat SiteEntry
baru dan memanggil metode
insert()
di feed situs.
Contoh ini membuat situs baru dengan tema 'slate' (setelan opsional) dan memberikan nama situs (wajib) dan deskripsi (opsional):
public String getSiteFeedUrl() { String domain = "example.com"; return "https://sites.google.com/feeds/site/" + domain + "/"; } public SiteEntry createSite(String title, String summary, String theme, String tag) throws MalformedURLException, IOException, ServiceException { SiteEntry entry = new SiteEntry(); entry.setTitle(new PlainTextConstruct(title)); entry.setSummary(new PlainTextConstruct(summary)); Theme tt = new Theme(); tt.setValue(theme); entry.setTheme(tt); entry.getCategories().add(new Category(TagCategory.Scheme.TAG, tag, null)); return client.insert(new URL(getSiteFeedUrl()), entry); } SiteEntry newSiteEntry = createSite("My Site Title", "summary for site", "slate", "tag");
Permintaan di atas akan membuat situs baru pada domain G Suite example.com
.
Oleh karena itu, URL situs akan menjadi https://sites.google.com/a/example.com/my-site-title.
Jika situs berhasil dibuat, server akan merespons dengan SiteEntry
, diisi dengan elemen yang ditambahkan oleh server: tautan ke situs, tautan ke umpan acl situs,
nama situs, judul, ringkasan, dan sebagainya.
Menyalin situs
Catatan: Fitur ini hanya tersedia untuk domain G Suite.
Menyalin situs mirip dengan membuat situs baru. Perbedaannya adalah Anda perlu mengatur
di SiteEntry
baru Anda yang menyertakan link mandiri ke situs yang akan diduplikasi.
Berikut adalah contoh duplikasi situs yang dibuat di bagian Membuat situs baru:
public SiteEntry copySite(String title, String summary, String sourceHref) throws MalformedURLException, IOException, ServiceException { SiteEntry entry = new SiteEntry(); entry.setTitle(new PlainTextConstruct(title)); entry.setSummary(new PlainTextConstruct(summary)); entry.addLink(SitesLink.Rel.SOURCE, Link.Type.ATOM, sourceHref); return client.insert(new URL(getSiteFeedUrl()), entry); } String sourceHref = newSiteEntry.getLink(SitesLink.Rel.SOURCE, Link.Type.ATOM).getHref(); SiteEntry myTwin = copySite("Duplicate Site", "A copy", sourceHref);
Poin penting:
- Hanya situs dan template situs milik pengguna terautentikasi yang dapat disalin.
- Template situs juga dapat disalin. Situs adalah template jika tombol "Publikasikan situs ini sebagai template" dicentang di halaman setelan Google Sites.
- Anda dapat menyalin situs dari domain lain, dan Anda akan tetap terdaftar sebagai pemilik di situs sumber selama proses berlangsung.
Memperbarui metadata situs
Untuk mengganti nama situs, mengubah tema, tag kategori, atau ringkasan, Anda harus terlebih dahulu mengambil SiteEntry
yang berisi situs yang dimaksud,
ubah satu atau beberapa properti, lalu panggil metode update()
SiteEntry
.
Contoh ini memodifikasi tema situs sebelumnya dan mengganti nama situs:
myTwin.setTitle(new PlainTextConstruct("better-title")); Theme theme = myTwin.getTheme(); theme.setValue('iceberg'); myTwin.setTheme(theme); myTwin.getCategories().add(new Category(TagCategory.Scheme.TAG, "newTag", null)); SiteEntry updatedSiteEntry = myTwin.update(); System.out.println(updatedSiteEntry.getTitle().getPlainText();
Pemetaan alamat web
Pemetaan alamat web memungkinkan pengguna Sites memetakan domain mereka sendiri ke Google Sites. Misalnya, http://www.mydomainsite.com
dapat digunakan sebagai pengganti http://sites.google.com/a/domain.com/mysite
. Bergantung pada tempat situs Anda dihosting, Anda dapat mengubah
pemetaan alamat web situs Anda. Lihat artikel pusat bantuan kami untuk mengetahui informasi selengkapnya.
Mengambil pemetaan alamat web situs
Untuk menampilkan pemetaan alamat web untuk sebuah situs, ambil entri/feed situs dengan parameter with-mappings=true
:
SiteQuery query = new SiteQuery(new URL("https://sites.google.com/feeds/site/siteName")); query.setWithMappings(true); SiteFeed feed = service.getFeed(query, SiteFeed.class); for (SiteEntry entry : feed.getEntries()) { System.out.println("Mappings for '" + entry.getSiteName().getValue() + "':"); for (Link link : entry.getWebAddressMappingLinks()) { System.out.println(" " + link.getHref()); } }
Pemetaan yang ada akan ditampilkan sebagai link
dengan rel='webAddressMapping'. Misalnya, dalam contoh di atas
ada tiga webAddressMapping
yang mengarah ke situs
http://sites.google.com/site/myOtherTestSite
.
Mengubah pemetaan alamat web
Catatan: Semua operasi GET/POST/PUT harus menentukan parameter with-mappings=true
saat berfungsi
dengan pemetaan alamat web. Jika parameter tidak ada, webAddressMapping
tidak akan ditampilkan dalam entri situs (GET) atau dipertimbangkan
saat memperbarui/menghapus pemetaan (PUT) dari entri.
Untuk menambahkan, memperbarui, atau menghapus pemetaan, cukup tentukan, ubah, atau hapus link tersebut saat membuat situs baru atau
memperbarui metadata situs. Parameter with-mappings=true
harus disertakan di URI feed situs.
Catatan: untuk memperbarui pemetaan alamat, Anda harus menjadi admin situs, atau admin domain untuk situs yang dihosting G Suite.
Misalnya, permintaan di bawah memperbarui pemetaan http://www.mysitemapping.com
ke http://www.my-new-sitemapping.com
,
dan menghapus http://www.mysitemapping2.com
dengan mengeluarkan link dari entri:
SiteEntry entry = client.getEntry(new URL("https://sites.google.com/feeds/site/site/siteName?with-mappings=true"), SiteEntry.class); // Modify mappings (remove all mappings, add some of them again, add modified mappings) entry.removeLinks(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML); entry.addLink(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML, "http://www.my-new-sitemapping.com"); // Update the entry with the mappings. entry.update();
Perhatikan bahwa pemetaan alamat web juga dapat ditentukan pada saat membuat/menyalin situs.
Feed Aktivitas
Anda dapat mengambil aktivitas terbaru Situs (perubahan) dengan mengambil feed aktivitas. Setiap entri dalam feed aktivitas berisi informasi tentang perubahan yang dilakukan pada Situs.
Untuk membuat kueri feed aktivitas, kirim GET
HTTP ke URL feed aktivitas:
https://sites.google.com/feeds/activity/site/siteName
Di klien Java, gunakan class ActivityFeed
untuk menampilkan objek ActivityEntry
:
public String buildActivityFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) String siteName = "mySite"; return "https://sites.google.com/feeds/activity/" + domain + "/" + siteName + "/"; } public void getActivityFeed() throws IOException, ServiceException { ActivityFeed activityFeed = client.getFeed(new URL(buildActivityFeedUrl()), ActivityFeed.class); for (BaseActivityEntry<?> entry : activityFeed.getEntries()){ System.out.println(entry.getSummary().getPlainText()); System.out.println(" revisions link: " + entry.getRevisionLink().getHref()); } }
Catatan: Akses ke feed ini mengharuskan Anda sebagai kolaborator atau pemilik Situs. Klien Anda harus melakukan autentikasi menggunakan token AuthSub, OAuth, atau ClientLogin. Lihat Mengautentikasi ke layanan Sites.
Feed Revisi
Untuk mengambil histori revisi bagi entri konten, kirim GET
HTTP ke link revisi entri:
https://sites.google.com/feeds/revision/site/siteName/CONTENT_ENTRY_ID
Contoh ini mengkueri feed konten, lalu mengambil feed revisi untuk entri konten pertama:
ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class); URL revisionFeedUrl = new URL(contentFeed.getEntries().get(0).getRevisionLink().getHref()); // use first entry public void getRevisionFeed(String revisionFeedUrl) throws IOException, ServiceException { RevisionFeed revisionFeed = client.getFeed(revisionFeedUrl, RevisionFeed.class); for (BaseContentEntry<?> entry : revisionFeed.getEntries()){ System.out.println(entry.getTitle().getPlainText()); System.out.println(" updated: " + entry.getUpdated().toUiString() + " by " + entry.getAuthors().get(0).getEmail()); System.out.println(" revision #: " + entry.getRevision().getValue()); } }
Catatan: Akses ke feed ini mengharuskan Anda sebagai kolaborator atau pemilik Situs. Klien Anda harus melakukan autentikasi menggunakan token AuthSub, OAuth, atau ClientLogin. Lihat Mengautentikasi ke layanan Sites.
Feed Konten
Mengambil feed konten
Feed konten mencantumkan konten terbaru Situs. URL ini dapat diakses dengan mengirimkan GET
HTTP ke URL feed konten:
https://sites.google.com/feeds/content/site/siteName
Parameter feed | Deskripsi |
---|---|
site | "site " atau domain domain yang dihosting G Suite (misalnya, example.com ). |
siteName | Nama ruang web situs Anda; yang ditemukan di URL Situs (mis. mySite ). |
Contoh pengambilan feed konten:
public String buildContentFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) String siteName = "mySite"; return "https://sites.google.com/feeds/content/" + domain + "/" + siteName + "/"; } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class);
contentFeed
yang dihasilkan adalah objek ContentFeed
yang berisi respons dari server. Setiap entri
dari contentFeed
mewakili halaman atau item yang berbeda dalam Situs pengguna. ContentFeed
akan berisi berbagai jenis
objek, semuanya diwarisi dari BaseContentEntry
: ListItemEntry
, ListPageEntry
, AttachmentEntry
, WebAttachmentEntry
,
FileCabinetPageEntry
, AnnouncementsPageEntry
, AnnouncementEntry
, WebPageEntry
, CommentEntry
.
Berikut adalah contoh listingan berbagai jenis entri dalam ContentFeed
.
Setiap jenis entri berisi properti yang berbeda, tetapi tidak semuanya dicetak di sini.
public String getContentBlob(BaseContentEntry<?> entry) { return ((XhtmlTextConstruct) entry.getTextContent().getContent()).getXhtml().getBlob(); } // Extracts an entry's numeric ID. private String getEntryId(String selfLink) { return selfLink.substring(selfLink.lastIndexOf("/") + 1); } public void printContentEntries(ContentFeed contentFeed) { System.out.println("Listing all WebPageEntry:"); for (WebPageEntry entry : contentFeed.getEntries(WebPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" author: " + entry.getAuthors().get(0).getEmail()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all ListPageEntry:"); for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); for (Column col : entry.getData().getColumns()) { System.out.print(" [" + col.getIndex() + "] " + col.getName() + "\t"); } } for (ListItemEntry entry : contentFeed.getEntries(ListItemEntry.class)) { for (Field field : entry.getFields()) { System.out.print(" [" + field.getIndex() + "] " + field.getValue() + "\t"); } System.out.println("\n"); } System.out.println("Listing all FileCabinetPageEntry:"); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all CommentEntry:"); for (CommentEntry entry : contentFeed.getEntries(CommentEntry.class)) { System.out.println(" in-reply-to: " + entry.getInReplyTo().toString()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementsPageEntry:"); for (AnnouncementsPageEntry entry : contentFeed.getEntries(AnnouncementsPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementEntry:"); for (AnnouncementEntry entry : contentFeed.getEntries(AnnouncementEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" draft?: " + entry.isDraft()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AttachmentEntry:"); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" revision: " + entry.getRevision().getValue()); MediaContent content = (MediaContent) entry.getContent(); System.out.println(" src: " + content.getUri()); System.out.println(" content type: " + content.getMimeType().getMediaType()); } System.out.println("Listing all WebAttachmentEntry:"); for (WebAttachmentEntry entry : contentFeed.getEntries(WebAttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" src: " + ((MediaContent) entry.getContent()).getUri()); } }
Catatan: Feed ini mungkin memerlukan autentikasi atau tidak; tergantung pada izin berbagi Situs. Jika Situs bersifat non-publik, klien Anda harus melakukan autentikasi menggunakan token AuthSub, OAuth, atau ClientLogin. Lihat Mengautentikasi ke layanan Sites.
Contoh kueri feed konten
Anda dapat menelusuri feed konten menggunakan beberapa parameter kueri Google Data API standar dan yang khusus untuk Sites API klasik. Untuk informasi lebih detail dan daftar lengkap parameter yang didukung, lihat Panduan Referensi.
Catatan: Contoh di bagian ini menggunakan metode buildContentFeedUrl()
dalam Mengambil Feed Konten.
Mengambil jenis entri tertentu
Untuk mengambil jenis entri tertentu saja, gunakan parameter kind
. Contoh ini hanya menampilkan attachment
entri:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setKind("webpage"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(entry.getTitle().getPlainText()); }
Untuk menampilkan lebih dari satu jenis entri, pisahkan setiap kind
dengan ','. Contoh ini menampilkan filecabinet
dan
listpage
entri:
URL url = new URL(buildContentFeedUrl() + "?kind=filecabinet,listpage"); ContentFeed contentFeed = client.getFeed(url, ContentFeed.class); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); } for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); }
Mengambil halaman berdasarkan jalur
Jika mengetahui jalur relatif halaman dalam Situs Google, Anda dapat menggunakan parameter path
untuk mengambil halaman tertentu.
Contoh ini akan mengembalikan laman yang terletak di
http://sites.google.com/site/siteName/path/to/the/page
:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setPath("/path/to/the/page"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class); for (BaseContentEntry<?> entry : contentFeed.getEntries()) { System.out.println(" title: " + entry.getTitle().getPlainText()); }
Mengambil semua entri pada halaman induk
Jika mengetahui ID entri konten halaman (mis. "1234567890" dalam contoh di bawah), Anda dapat menggunakan parameter parent
untuk mengambil semua entri turunannya (jika ada):
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setParent("1234567890"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
Untuk parameter tambahan, lihat Panduan Referensi.
Membuat Konten
Catatan: Sebelum membuat konten untuk situs, pastikan Anda telah menetapkan situs di klien.client.site = "siteName";
Konten baru (halaman web, halaman daftar, halaman lemari file, halaman pengumuman, dll.) dapat dibuat dengan mengirimkan POST
HTTP
ke feed konten:
https://sites.google.com/feeds/content/site/siteName
Untuk daftar jenis node dukungan, lihat parameter kind
dalam Panduan Referensi.
Membuat item / halaman baru
Contoh ini membuat webpage
yang baru di bagian atas Situs, menyertakan beberapa Xcode untuk isi halaman,
dan menyetel judul judul menjadi 'Judul Halaman Web Baru':
private void setContentBlob(BaseContentEntry<?> entry, String pageContent) { XmlBlob xml = new XmlBlob(); xml.setBlob(pageContent); entry.setContent(new XhtmlTextConstruct(xml)); } public WebPageEntry createWebPage(String title, String content) throws MalformedURLException, IOException, ServiceException { WebPageEntry entry = new WebPageEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content return client.insert(new URL(buildContentFeedUrl()), entry); } WebPageEntry createdEntry = createWebPage("New Webpage Title", "<b>HTML content</b>"); System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());
Jika permintaan berhasil, createdEntry
akan berisi salinan entri yang dibuat di server.
Membuat item/halaman di jalur URL kustom
Secara default, contoh sebelumnya akan dibuat di URL
http://sites.google.com/site/siteName/new-webpage-title
dan
memiliki judul halaman 'Judul Halaman Web Baru'. Artinya, <atom:title>
dinormalkan menjadi new-webpage-title
untuk URL.
Untuk menyesuaikan jalur URL halaman, Anda dapat menetapkan elemen <sites:pageName>
.
Contoh ini membuat halaman filecabinet
baru dengan judul 'Penyimpanan File', tetapi membuat halaman
di URL http://sites.google.com/site/siteName/files
(bukan http://sites.google.com/site/siteName/file-storage
)
dengan menentukan elemen <sites:pageName>
.
public FileCabinetPageEntry createFileCabinetPage(String title, String content, String customPageName) throws MalformedURLException, IOException, ServiceException { FileCabinetPageEntry entry = new FileCabinetPageEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content entry.setPageName(new PageName(customPageName)); // Upload to a custom page path return client.insert(new URL(buildContentFeedUrl()), entry); } FileCabinetPageEntry createdEntry = createFileCabinetPage("File Storage", "<b>HTML content</b>", "files"); System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());
Server menggunakan aturan prioritas berikut untuk memberi nama jalur URL halaman:
<sites:pageName>
, jika ada. Harus memenuhia-z, A-Z, 0-9, -, _
.<atom:title>
, tidak boleh null jika pageName tidak ada. Normalisasi adalah memangkas + menciutkan spasi kosong ke '-' dan hapus karakter yang tidak cocok dengana-z, A-Z, 0-9, -, _
.
Membuat subhalaman
Untuk membuat subhalaman (turunan) di bawah halaman induk, Anda harus menyetel link induk dalam entri. Atribut href
link ke
link mandiri node induk.
public AnnouncementEntry postAnnouncement(String title, String content, AnnouncementsPageEntry parentPage) throws MalformedURLException, IOException, ServiceException { AnnouncementEntry entry = new AnnouncementEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content // Set the entry's parent link to create the announcement under that page. entry.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), entry); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=announcementspage"), ContentFeed.class); AnnouncementEntry createdEntry = postAnnouncement("Party!!", "My place, this weekend", contentFeed.getEntries().get(0)); System.out.println("New post by " + createdEntry.getAuthors().get(0).getName());
Contoh di atas membuat announcement
baru dalam halaman pengumuman pertama yang ditemukan di
feed konten pengguna. Judul pengumuman disetel ke "Pesta!!" dan konten ke "Tempat saya, akhir pekan ini".
Template halaman
Membuat template halaman
Proses pembuatan template halaman sama dengan membuat item/halaman baru dan
membuat subhalaman.Perbedaannya adalah penambahan category
dengan istilah dan label yang ditetapkan ke 'http://schemas.google.com/g/2005#template'
dan 'template'.
Contoh ini membuat template webpage
baru.
// The template webpage entry. WebPageEntry entry = new WebPageEntry(); // Set title and content. entry.setTitle(new PlainTextConstruct("Page template title")); XmlBlob xml = new XmlBlob(); xml.setBlob("Content for page template"); entry.setContent(new XhtmlTextConstruct(xml)); // Set the template category Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS, TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE); entry.getCategories().add(TEMPLATE_CATEGORY); // Insert the template webpage entry. WebPageEntry createdEntry = client.insert(new URL("https://sites.google.com/feeds/content/site/siteName"), entry);
Membuat halaman dari template
Mirip dengan membuat template halaman, Anda dapat membuat instance halaman baru dari template dengan menyertakan <link>
dengan rel='http://schemas.google.com/sites/2008#template' menunjuk
ke tautan mandiri dari sebuah {i>template<i} halaman.
Contoh ini membuat template filecabinet
baru, lalu membuat instance halaman filecabinet
baru dari template tersebut.
URL feedUrl = new URL("https://sites.google.com/feeds/content/site/siteName"); // 1. Create file cabinet page template FileCabinetPageEntry inputTemplateEntry = new FileCabinetPageEntry(); inputTemplateEntry.setTitle(new PlainTextConstruct("File cabinet page template title")); XmlBlob xml = new XmlBlob(); xml.setBlob("Content for page template"); inputTemplateEntry.setContent(new XhtmlTextConstruct(xml)); // Set the template category Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS, TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE); inputTemplateEntry.getCategories().add(TEMPLATE_CATEGORY); // 2. Create file cabinet page template instance FileCabinetPageEntry templateEntry = client.insert(feedUrl, inputTemplateEntry); // Specify link to the page template FileCabinetPageEntry templateInstanceEntry = new FileCabinetPageEntry(); templateInstanceEntry.setTitle(new PlainTextConstruct("File cabinet template instance")); templateInstanceEntry.addLink(new Link(SitesLink.Rel.TEMPLATE, Link.Type.ATOM, templateEntry.getSelfLink().getHref())); FileCabinetPageEntry createdFileCabinetFromTemplate = client.insert(feedUrl, templateInstanceEntry);
Catatan: Meskipun ada template yang menentukan <category>
, termasuk template di
entri masih diperlukan. Perhatikan juga, jika Anda menyertakan elemen <content>
, server akan menolaknya.
Mengupload file
Sama seperti di Google Sites, API mendukung upload lampiran ke halaman lemari file atau halaman induk.
Untuk mengupload lampiran ke orang tua, kirim permintaan POST
HTTP ke URL feed konten:
https://sites.google.com/feeds/content/site/siteName
Semua jenis lampiran harus diupload ke halaman induk. Oleh karena itu, Anda menetapkan link induk di AttachmentEntry
atau WebAttachmentEntry
objek yang Anda coba upload. Lihat Membuat subhalaman untuk informasi selengkapnya.
Mengupload lampiran
Contoh ini mengupload file PDF ke FileCabinetPageEntry
pertama yang ada di feed konten pengguna.
Lampiran dibuat dengan judul 'Memulai' dan deskripsi (opsional), 'paket SDM'.
MimetypesFileTypeMap mediaTypes = new MimetypesFileTypeMap(); mediaTypes.addMimeTypes("application/msword doc"); mediaTypes.addMimeTypes("application/vnd.ms-excel xls"); mediaTypes.addMimeTypes("application/pdf pdf"); mediaTypes.addMimeTypes("text/richtext rtx"); // ... See a more complete list of mime types in the SitesHelper.java public AttachmentEntry uploadAttachment(File file, BasePageEntry<?> parentPage, String title, String description) throws IOException, ServiceException { AttachmentEntry newAttachment = new AttachmentEntry(); newAttachment.setMediaSource(new MediaFileSource(file, mediaTypes.getContentType(file))); newAttachment.setTitle(new PlainTextConstruct(title)); newAttachment.setSummary(new PlainTextConstruct(description)); newAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), newAttachment); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class); FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0); AttachmentEntry attachment = uploadAttachment( new File("/path/to/your/file.pdf"), parentPage, "Getting Started", "HR packet"); System.out.println("Uploaded!");
Jika upload berhasil, attachment
akan berisi salinan entri lampiran yang dibuat.
Mengupload lampiran ke folder
Untuk mengupload lampiran ke folder yang ada di FileCabinetPageEntry
, sertakan kategori dengan 'term' yang disetel ke nama folder.
Misalnya, tambahkan baris ini di uploadAttachment()
:
newAttachment.getCategories().add(new Category("http://schemas.google.com/sites/2008#folder", "FolderName"));
Lampiran web
Lampiran web adalah jenis lampiran khusus. Pada dasarnya, mereka tertaut ke file lain di web yang dapat Anda tambahkan ke daftar lemari file. Fitur ini mirip dengan 'Tambahkan file dengan URL' metode upload di UI Google Sites.
Catatan: Lampiran web hanya dapat dibuat di lemari file. Ekstensi iklan tidak dapat diupload ke jenis halaman lain.
Contoh ini membuat WebAttachmentEntry
di bawah FileCabinetPageEntry
pertama yang ditemukan di feed konten pengguna.
Judul dan deskripsi (opsional) judul ditetapkan ke 'GoogleLogo' dan 'warna yang bagus'.
public WebAttachmentEntry uploadWebAttachment(String contentUrl, FileCabinetPageEntry filecabinet, String title, String description) throws MalformedURLException, IOException, ServiceException { MediaContent content = new MediaContent(); content.setUri(contentUrl); WebAttachmentEntry webAttachment = new WebAttachmentEntry(); webAttachment.setTitle(new PlainTextConstruct(title)); webAttachment.setSummary(new PlainTextConstruct(description)); webAttachment.setContent(content); webAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, filecabinet.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), webAttachment); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class); FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0); WebAttachmentEntry webAttachment = uploadWebAttachment("http://www.google.com/images/logo.gif", parentPage, "Google's Logo", "nice colors"); System.out.println("Web attachment created!");
POST
membuat link di lemari file pengguna yang mengarah ke gambar di 'http://www.google.com/images/logo.gif'.
Memperbarui Konten
Memperbarui metadata dan/atau konten html halaman
Metadata (judul, pageName, dll.) dan konten halaman dari jenis BaseContentEntry
apa pun dapat diedit oleh
menggunakan metode update()
entri. Tindakan ini akan mengirimkan permintaan PUT
HTTP ke edit
entri
.
Berikut adalah contoh update ListPageEntry
dengan perubahan berikut:
- Judul diubah menjadi 'Judul yang Diperbarui'
- Konten HTML halaman diperbarui menjadi '<p>Konten HTML yang Diperbarui</p>'
- Judul kolom pertama dalam daftar diubah menjadi "Owner"
ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=listpage"), ContentFeed.class); ListPageEntry listPage = contentFeed.getEntries(ListPageEntry.class).get(0); // Update first list page found // Update title listPage.setTitle(new PlainTextConstruct("Updated Title")); // Update HTML content XmlBlob xml = new XmlBlob(); xml.setBlob("<p>Updated HTML Content</p>"); listPage.setContent(new XhtmlTextConstruct(xml)); // Change first column's heading listPage.getData().getColumns().get(0).setName("Owner"); // listPage.setPageName(new PageName("new-page-path")); // You can also change the page's URL path ListPageEntry updatedEntry = listPage.update(); System.out.println("ListPage updated!");
Memperbarui konten file lampiran
Untuk AttachmentEntry
, Anda juga dapat memperbarui konten dengan menyetel MediaSource
entri, lalu menggunakan
metode updateMedia(boolean)
entri.
Contoh ini akan memperbarui konten lampiran yang ada:
public AttachmentEntry updateFile(AttachmentEntry entry, File newFile) throws IOException, ServiceException { // See Uploading Attachments for the definition of mediaTypes. entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile))); return entry.updateMedia(false); }
Contoh ini mengirim permintaan PUT
HTTP ke link edit-media
entri. Pengembalian
AttachmentEntry
akan berisi konten yang diperbarui.
Memperbarui konten + metadata lampiran
Anda dapat memperbarui metadata lampiran dan kontennya dalam panggilan yang sama menggunakan metode updateMedia()
.
Apakah Anda dapat mengupdate konten file saja, metadata, atau keduanya.
Contoh ini mengubah judul lampiran menjadi 'Judul Baru', memperbarui deskripsi, dan mengganti konten file dengan file .zip baru.
Karena permintaan berisi konten file baru, updateMedia()
AttachmentEntry
digunakan.
public AttachmentEntry updateAttachment(AttachmentEntry entry, File newFile, String newTitle, String newDescription) throws IOException, ServiceException { // See Uploading Attachments for the definition of mediaTypes. entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile))); entry.setTitle(new PlainTextConstruct(newTitle)); entry.setSummary(new PlainTextConstruct(newDescription)); return entry.updateMedia(true); } ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=attachment&max-results=1"), ContentFeed.class); AttachmentEntry attachment = contentFeed.getEntries(AttachmentEntry.class).get(0); // Update first attachment found AttachmentEntry updatedAttachment = updateAttachment(attachment, new File("/path/to/file.zip"), "New Title", "better stuff");
Menghapus Konten
Untuk menghapus halaman atau item dari Google Sites, pertama-tama ambil entri konten, lalu panggil delete()
entri.
entry.delete();
Anda juga dapat menggunakan metode delete()
class layanan dengan meneruskan link edit
entri dan nilai ETag:
client.delete(entry.getEditLink().getHref(), "*"); // Note: using "*" may overwrite another client's changes.
Jika entri berhasil dihapus, server merespons dengan 200 OK
HTTP.
Mendownload Lampiran
Untuk mendownload AttachmentEntry
, kirim permintaan GET
HTTP ke link src konten entri.
Contoh ini mendownload AttachmentEntry
pertama yang ditemukan di feed konten pengguna
ke direktori "/path/to/save/file/":
private void downloadFile(String downloadUrl, String fullFilePath) throws IOException, ServiceException { System.out.println("Downloading file from: " + downloadUrl); MediaContent mc = new MediaContent(); mc.setUri(downloadUrl); MediaSource ms = service.getMedia(mc); InputStream inStream = null; FileOutputStream outStream = null; try { inStream = ms.getInputStream(); outStream = new FileOutputStream(fullFilePath); int c; while ((c = inStream.read()) != -1) { outStream.write(c); } } finally { if (inStream != null) { inStream.close(); } if (outStream != null) { outStream.flush(); outStream.close(); } } } public void downloadAttachment(AttachmentEntry entry, String directory) throws IOException, ServiceException { String url = ((OutOfLineContent) entry.getContent()).getUri(); downloadFile(url, directory + entry.getTitle().getPlainText()); // Use entry's title for the save filename } ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=attachment&max-results=1"), ContentFeed.class); downloadAttachment(contentFeed.getEntries(AttachmentEntry.class).get(0), "/path/to/save/file/"); System.out.println("Downloaded.");
Feed ACL
Ringkasan Izin Berbagi (ACL)
Setiap entri ACL dalam feed ACL merepresentasikan peran akses entitas tertentu, baik pengguna, grup pengguna, atau akses default (yang merupakan situs publik). Entri hanya akan ditampilkan untuk entitas dengan akses eksplisit - satu entri akan ditampilkan untuk setiap alamat email dalam daftar "People with Access" di layar berbagi UI Google Sites. Dengan demikian, admin domain tidak akan ditampilkan, meskipun mereka memiliki akses implisit ke sebuah situs.
Peran
Elemen peran merepresentasikan tingkat akses yang dapat dimiliki suatu entity. Ada empat kemungkinan nilai dari elemen gAcl:role
:
- pembaca — pelihat (setara dengan akses hanya baca).
- writer — kolaborator (setara dengan akses baca/tulis).
- owner — biasanya admin situs (setara dengan akses baca/tulis).
Cakupan
Elemen cakupan mewakili entitas yang memiliki tingkat akses ini. Ada empat kemungkinan jenis elemen gAcl:scope
:
- user — nilai alamat email, misalnya "user@gmail.com".
- grup — alamat email Google Grup, misalnya "grup@domain.com".
- domain — nama domain G Suite, mis. "domain.com".
- default — Hanya ada satu kemungkinan cakupan jenis "default", yang tidak memiliki nilai
(misalnya,
<gAcl:scope type="default">
). Cakupan khusus ini mengontrol akses yang dimiliki setiap pengguna secara default di situs publik.
Catatan: Domain tidak boleh memiliki nilai gAcl:role
tetapkan ke "pemilik" akses, mereka hanya bisa
menjadi pembaca atau penulis.
Mengambil feed ACL
Class AclFeed
dan AclEntry
dapat digunakan untuk mengontrol aktivitas berbagi situs
izin akses dan dapat diambil menggunakan metode getFeed()
class layanan.
Contoh berikut mengambil umpan ACL untuk situs tertentu, dan mencetak izin
setiap AclEntry
:
public String getAclFeedUrl(String siteName) { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) return "https://sites.google.com/feeds/acl/site/" + domain + "/" + siteName + "/"; } public void getAclFeed(String siteName) throws IOException, ServiceException { AclFeed aclFeed = client.getFeed(new URL(getAclFeedUrl(siteName)), AclFeed.class); for (AclEntry entry : aclFeed.getEntries()) { System.out.println(entry.getScope().getValue() + " (" + entry.getScope().getType() + ") : " + entry.getRole().getValue()); } } getAclFeed('my-site-name');
Jika Anda bekerja dengan entri di SiteFeed, setiap SiteEntry
berisi link ke feed ACL-nya.
Misalnya, cuplikan ini mengambil feed acl SiteEntry
:
String aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM).getHref(); AclFeed aclFeed = client.getFeed(new URL(aclLink), AclFeed.class);
Membagikan situs
Catatan: ACL berbagi tertentu hanya dapat dilakukan jika domain dikonfigurasi untuk memberikan izin tersebut (misalnya, jika berbagi di luar domain untuk domain G Suite diaktifkan, dll).
Untuk membagikan Situs Google menggunakan API, klien Anda perlu membuat
AclEntry
dan POST
-nya ke server.
Berikut adalah contoh yang menambahkan 'user@example.com' sebagai reader
di situs:
AclRole role = new AclRole("reader"); AclScope scope = new AclScope(AclScope.Type.USER, "user@example.com"); AclEntry aclEntry = addAclRole(role, scope, entry); public AclEntry addAclRole(AclRole role, AclScope scope, SiteEntry siteEntry) throws IOException, MalformedURLException, ServiceException { AclEntry aclEntry = new AclEntry(); aclEntry.setRole(role); aclEntry.setScope(scope); Link aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM); return client.insert(new URL(aclLink.getHref()), aclEntry); }
Lihat bagian Ringkasan feed ACL untuk mengetahui AclScope
yang mungkin terjadi
dan nilai AclRoles
.
Berbagi tingkat Grup dan Domain
Mirip dengan berbagi situs dengan satu pengguna, Anda dapat membagikan situs melalui Domain Google Grup atau G Suite.
Berbagi ke alamat email grup:
AclScope scope = new AclScope(AclScope.Type.GROUP, "group_name@example.com");
Berbagi ke seluruh domain:
AclScope scope = new AclScope(AclScope.Type.DOMAIN, "example.com");
Berbagi di tingkat domain hanya didukung untuk domain G Suite, dan hanya untuk domain tempat situs tersebut dihosting. Misalnya http://sites.google.com/a/domain1.com/siteA hanya dapat berbagi keseluruhan Situs dengan domain1.com, bukan domain2.com. Situs yang tidak dihosting di domain G Suite (mis. http://sites.google.com/site/siteB) tidak dapat mengundang domain.
Mengubah izin berbagi
Untuk izin berbagi yang ada di Situs, pertama-tama ambil AclEntry
yang dimaksud, ubah izinnya
sesuai keinginan, lalu memanggil metode update()
AclEntry
untuk mengubah ACL pada server.
Contoh ini mengubah contoh aclEntry
sebelumnya dari bagian Berbagi situs,
dengan memperbarui 'user@example.com' menjadi writer
(kolaborator):
aclEntry.setRole(new AclRole("writer")); AclEntry updatedAclEntry = aclEntry.update(); // Could also use the client's update method // client.update(new URL(aclEntry.getEditLink().getHref()), aclEntry);
Untuk mengetahui informasi selengkapnya tentang ETag, lihat panduan referensi Google Data API.
Menghapus izin berbagi
Untuk menghapus izin berbagi, pertama-tama ambil AclEntry
, lalu panggil metode delete()
-nya:
aclEntry.delete(); // Could also use the client's delete method // client.delete(new URL(aclEntry.getEditLink().getHref()), aclEntry);
Untuk mengetahui informasi selengkapnya tentang ETag, lihat panduan referensi Google Data API.
Topik Khusus
Mengambil feed atau entri lagi
Jika ingin mengambil feed atau entri yang telah diambil sebelumnya, Anda dapat meningkatkan efisiensi dengan memberi tahu server untuk mengirim daftar atau entri hanya jika daftar telah berubah sejak terakhir kali Anda mengambilnya.
Untuk melakukan pengambilan bersyarat semacam ini, metode getFeed()
dan getEntry()
memberikan
argumen tambahan yang menerima nilai ETag atau objek DateTime
untuk header If-Modified-Since
.
Anda dapat mengakses etag entri dari entry.getEtag()
.
Contoh ini melakukan pengambilan bersyarat untuk entri halaman web konten:
String feedUrl = "https://sites.google.com/feeds/content/site/siteName/123456789"; WebPageEntry entry = client.getEntry(new URL(feedUrl), WebPageEntry.class, "\"GVQHSARDQyp7ImBq\"");
Ketika menerima permintaan ini, server akan memeriksa apakah item yang Anda minta memiliki ETag yang sama dengan
ETag yang Anda tentukan. Jika ETag cocok, berarti item tersebut tidak berubah, dan server akan mengembalikan
Pengecualian NotModifiedException
HTTP 304 akan ditampilkan.
Jika ETag tidak cocok, berarti item telah dimodifikasi sejak terakhir kali Anda memintanya, dan server akan mengembalikan item tersebut.
Untuk mengetahui informasi selengkapnya tentang ETag, lihat panduan referensi Google Data API.