Panduan Bahasa Java

Penting: Dokumen ini ditulis sebelum tahun 2012. Opsi autentikasi yang dijelaskan dalam dokumen ini (OAuth 1.0, AuthSub, dan ClientLogin) 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 mengubah konten dalam Situs Google. Aplikasi klien 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 ingin mengetahui lebih lanjut tentang protokol dasar yang digunakan oleh library klien Java untuk berinteraksi dengan Sites API klasik, lihat panduan protokol.

Audiens

Dokumen ini ditujukan untuk developer yang ingin menulis aplikasi klien yang berinteraksi dengan Google Sites menggunakan Library Klien Java Google Data.

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 bantuan menyiapkan dan menginstal library klien, lihat Mulai Menggunakan Library Klien Java Data Google. Jika Anda menggunakan Eclipse, artikel tersebut juga menjelaskan cara menyiapkan project menggunakan plugin Eclipse Google Data API. Berikut yang Anda perlukan untuk memulai:

  1. Menginstal Java 1.5 atau yang lebih baru
  2. Download library klien (versi terbaru gdata-src.java.zip)
  3. Download daftar dependensi
  4. Download aplikasi contoh (versi terbaru gdata-samples.java.zip)

Setelah menginstal .jars, Anda harus menyertakan hal-hal berikut dalam project:

  1. java/lib/gdata-sites-2.0.jar - Versi 2.0 di sini ditujukan untuk Sites API klasik versi 1.4.
  2. java/lib/gdata-core-1.0.jar
  3. java/lib/gdata-client-1.0.jar
  4. java/lib/gdata-spreadsheet-3.0.jar (jika menangani 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. Sumber juga tersedia di /trunk/java/sample/sites/ pada repositori SVN yang dapat diakses dari tab Sumber. SitesDemo.java memungkinkan pengguna melakukan sejumlah operasi yang menunjukkan cara menggunakan Sites API klasik.

Perhatikan bahwa Anda perlu menyertakan java/sample/util/lib/sample-util.jar untuk menjalankan contoh.

Memulai project Anda sendiri

Tips: Lihat artikel Menggunakan Eclipse dengan Google Data API untuk penyiapan cepat dengan plugin Eclipse kami.

Bergantung pada kebutuhan aplikasi, Anda akan 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 keperluan logging.

Catatan: Bagian selanjutnya dari panduan ini mengasumsikan bahwa Anda telah membuat SitesService dalam variabel client.

Mengautentikasi ke Sites API klasik

Library klien Java dapat digunakan untuk bekerja dengan feed publik atau pribadi. Sites Data API menyediakan akses ke feed pribadi dan publik, bergantung pada izin Sites dan operasi yang Anda coba lakukan. Misalnya, Anda mungkin dapat membaca feed konten Situs publik tetapi tidak dapat memperbaruinya - sesuatu yang akan memerlukan klien terautentikasi. Hal ini dapat dilakukan melalui autentikasi nama pengguna/sandi ClientLogin, AuthSub, atau OAuth.

Lihat Ringkasan Autentikasi Google Data API untuk mengetahui informasi selengkapnya tentang AuthSub, OAuth, dan ClientLogin.

Tips: API tersebut 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, setelan 'Wajibkan SSL' di panel kontrol administratif dipatuhi oleh API. Anda dapat memaksa semua permintaan API untuk menggunakan HTTPS dengan memanggil client.useSsl();.

AuthSub untuk aplikasi web

AuthSub Authentication untuk Aplikasi Web harus digunakan oleh aplikasi klien yang perlu mengautentikasi penggunanya ke Akun Google. Operator tidak memerlukan akses ke nama pengguna dan sandi untuk pengguna Google Sites - hanya token AuthSub yang diperlukan.

Lihat petunjuk untuk memasukkan AuthSub ke dalam aplikasi web Anda

Meminta token sekali pakai

Saat pengguna pertama kali mengunjungi aplikasi Anda, mereka harus melakukan autentikasi. Biasanya, developer akan mencetak sejumlah teks dan link yang mengarahkan pengguna ke halaman persetujuan AuthSub untuk mengautentikasi pengguna dan meminta akses ke dokumen mereka. Library klien Google Data Java menyediakan fungsi untuk membuat URL ini. Kode di bawah ini mengatur 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() menggunakan beberapa parameter (sesuai dengan parameter kueri yang digunakan oleh pengendali AuthSubRequest):

  • URL next — URL yang akan dialihkan oleh Google setelah pengguna login ke akun mereka dan memberikan akses; http://www.example.com/welcome.jsp dalam contoh di atas
  • cakupanhttps://sites.google.com/feeds/ pada contoh di atas
  • boolean untuk menunjukkan apakah token akan digunakan dalam mode terdaftar atau tidak; false dalam contoh di atas
  • boolean kedua untuk menunjukkan apakah token nanti 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 untuk AuthSub, dan ditujukan untuk aplikasi web. OAuth mirip dengan menggunakan mode aman dan terdaftar dari AuthSub, yaitu semua permintaan data harus ditandatangani secara digital dan Anda harus mendaftarkan domain Anda.

Lihat petunjuk untuk menyertakan OAuth ke dalam aplikasi yang terinstal

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 yang diinstal/seluler

ClientLogin harus digunakan oleh aplikasi seluler atau yang terinstal yang perlu mengautentikasi penggunanya ke akun Google. Saat pertama kali dijalankan, aplikasi Anda akan meminta nama pengguna/sandi kepada pengguna. Pada permintaan berikutnya, token autentikasi akan direferensikan.

Lihat petunjuk untuk menggabungkan ClientLogin ke dalam aplikasi yang terinstal

Untuk menggunakan ClientLogin, panggil metode setUserCredentials() dari objek SitesService, yang diwarisi dari GoogleService. Tentukan alamat email dan sandi pengguna yang digunakan 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 database Anda agar dapat diingat untuk penggunaan berikutnya. Tidak perlu meminta sandi kepada pengguna setiap kali aplikasi Anda dijalankan. Lihat Mengingat kembali token autentikasi untuk informasi selengkapnya.

Untuk informasi selengkapnya tentang penggunaan ClientLogin pada aplikasi Java, lihat Menggunakan ClientLogin dengan Library Klien Google Data API.

Kembali ke atas

Feed Situs

Feed situs dapat digunakan untuk mencantumkan Google Sites yang dimiliki pengguna atau izin lihatnya dimiliki pengguna. Parameter ini juga dapat digunakan untuk mengubah nama situs yang ada. Untuk domain G Suite, domain ini juga dapat digunakan untuk membuat dan/atau menyalin seluruh situs.

Mencantumkan situs

Untuk membuat kueri feed situs, kirim HTTP GET ke URL feed situs:

https://sites.google.com/feeds/site/site/

Di klien Java, Anda dapat menggunakan class SiteFeed dan SiteEntry untuk menangani 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 mengakses properti tambahan dalam 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() klien 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 di bawah domain G Suite example.com. Dengan demikian, URL situs tersebut akan menjadi https://sites.google.com/a/example.com/my-site-title.

Jika situs berhasil dibuat, server akan merespons dengan objek SiteEntry, yang diisi dengan elemen yang ditambahkan oleh server: link ke situs, link ke feed acl situs, nama situs, judul, ringkasan, dan sebagainya.

Menyalin situs

Catatan: Fitur ini hanya tersedia untuk domain G Suite.

Menyalin situs serupa dengan membuat situs baru. Perbedaannya adalah Anda perlu menetapkan link di SiteEntry baru yang menyertakan link mandiri situs untuk 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 setelan "Publikasikan situs ini sebagai template" dicentang di halaman setelan Google Sites.
  • Anda dapat menyalin situs dari domain lain, dengan menunggu Anda terdaftar sebagai pemilik di situs sumber.

Memperbarui metadata situs

Untuk mengganti nama situs, mengubah tema, tag kategori, atau ringkasannya, Anda harus terlebih dahulu mengambil SiteEntry yang berisi situs yang dimaksud, mengubah satu atau beberapa properti, lalu memanggil 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 Situs Google. Misalnya, http://www.mydomainsite.com dapat digunakan sebagai pengganti http://sites.google.com/a/domain.com/mysite. Bergantung pada tempat situs dihosting, Anda dapat mengubah pemetaan alamat web situs secara manual. Lihat artikel pusat bantuan kami untuk informasi selengkapnya.

Mengambil pemetaan alamat web situs

Untuk menampilkan pemetaan alamat web untuk situs, ambil entri situs/feed 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, pada contoh di atas ada tiga webAddressMapping yang mengarah ke http://sites.google.com/site/myOtherTestSite situs.

Memodifikasi pemetaan alamat web

Catatan: Semua operasi GET/POST/PUT harus menentukan parameter with-mappings=true saat menangani 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 pada 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 ini memperbarui pemetaan http://www.mysitemapping.com ke http://www.my-new-sitemapping.com, dan menghapus http://www.mysitemapping2.com dengan membiarkan link keluar 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, pemetaan alamat web juga dapat ditentukan pada saat membuat/menyalin situs.

Kembali ke atas

Feed Aktivitas

Anda dapat mengambil aktivitas terbaru (perubahan) Situs dengan mengambil feed aktivitas. Setiap entri dalam feed aktivitas berisi informasi tentang perubahan yang dilakukan pada Situs.

Untuk membuat kueri feed aktivitas, kirim HTTP GET 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: Untuk mengakses feed ini, Anda harus menjadi kolaborator atau pemilik Situs. Klien Anda harus melakukan autentikasi dengan menggunakan token AuthSub, OAuth, atau ClientLogin. Baca bagian Mengautentikasi ke layanan Sites.

Kembali ke atas

Feed Revisi

Untuk mengambil histori revisi untuk entri konten apa pun, kirim GET HTTP ke link revisi entri:

https://sites.google.com/feeds/revision/site/siteName/CONTENT_ENTRY_ID

Contoh ini membuat kueri 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: Untuk mengakses feed ini, Anda harus menjadi kolaborator atau pemilik Situs. Klien Anda harus melakukan autentikasi dengan menggunakan token AuthSub, OAuth, atau ClientLogin. Baca bagian Mengautentikasi ke layanan Sites.

Kembali ke atas

Feed Konten

Mengambil feed konten

Feed konten mencantumkan konten terbaru Situs. Feed ini dapat diakses dengan mengirimkan GET HTTP ke URL feed konten:

https://sites.google.com/feeds/content/site/siteName
Parameter feedDeskripsi
site"site" atau domain dari domain yang dihosting G Suite Anda (misalnya example.com).
siteNameNama ruang web situs Anda; ditemukan di URL Situs (misalnya, 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 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; bergantung pada izin berbagi Situs. Jika Situs bersifat non-publik, klien Anda harus mengautentikasi dengan menggunakan token AuthSub, OAuth, atau ClientLogin. Baca bagian Mengautentikasi ke layanan Sites.

Contoh kueri feed konten

Anda dapat menelusuri feed konten menggunakan beberapa parameter kueri Google Data API standar dan parameter khusus untuk Sites API klasik. Untuk mengetahui informasi lebih mendetail 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 entri attachment:

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 entri filecabinet dan listpage:

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 Anda mengetahui jalur relatif halaman dalam Situs Google, Anda dapat menggunakan parameter path untuk mengambil halaman tertentu tersebut. Contoh ini akan menampilkan halaman 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 (misalnya, "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.

Kembali ke atas



Membuat Konten

Catatan: Sebelum membuat konten untuk suatu situs, pastikan Anda telah menetapkan situs Anda 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 di Panduan Referensi.

Membuat item / halaman baru

Contoh ini membuat webpage baru pada level teratas Situs, menyertakan beberapa Xcode untuk isi halaman, dan menetapkan judul judul ke 'New WebPage Title':

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 pada 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 ke new-webpage-title untuk URL. Untuk menyesuaikan jalur URL halaman, Anda dapat menetapkan elemen <sites:pageName>.

Contoh ini membuat halaman filecabinet baru dengan judul 'File Storage', tetapi membuat halaman di bawah 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:

  1. <sites:pageName>, jika ada. Harus memenuhi a-z, A-Z, 0-9, -, _.
  2. <atom:title>, tidak boleh null jika pageName tidak ada. Normalisasi adalah memangkas + menciutkan spasi kosong menjadi '-' dan menghapus karakter yang tidak cocok dengan a-z, A-Z, 0-9, -, _.

Membuat sub-halaman

Untuk membuat subhalaman (turunan) di halaman induk, Anda harus menetapkan link induk di 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 di halaman pengumuman pertama yang ditemukan di feed konten pengguna. Judul pengumuman ditetapkan ke "Pesta!!" dan kontennya menjadi "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 masing-masing 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

Serupa dengan membuat template halaman, Anda dapat membuat instance halaman baru dari template dengan menyertakan <link> dengan rel='http://schemas.google.com/sites/2008#template' yang mengarah ke link mandiri template 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 template menentukan <category>, menyertakan satu template dalam entri Anda tetap 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 induk, 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, tetapkan link induk pada objek AttachmentEntry atau WebAttachmentEntry 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 HR'.

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 atribut 'term' yang ditetapkan 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, {i>file<i} adalah tautan ke file lain di web yang dapat Anda tambahkan ke daftar lemari file Anda. Fitur ini serupa dengan metode unggahan 'Tambahkan file menurut URL' di UI Google Sites.

Catatan: Lampiran web hanya dapat dibuat di lemari file. Materi iklan tersebut tidak dapat diupload ke jenis halaman lain.

Contoh ini membuat WebAttachmentEntry di FileCabinetPageEntry pertama yang ditemukan di feed konten pengguna. Judul dan deskripsinya (opsional) masing-masing 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 dalam lemari file pengguna yang mengarah ke gambar di 'http://www.google.com/images/logo.gif'.

Kembali ke atas



Memperbarui Konten

Memperbarui metadata dan/atau konten html halaman

Metadata (title, pageName, dll.) dan konten halaman dari jenis BaseContentEntry apa pun dapat diedit menggunakan metode update() entri. Tindakan ini akan mengirimkan permintaan PUT HTTP ke link edit entri.

Berikut adalah contoh pembaruan 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 "Pemilik"
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 tersebut mengirimkan permintaan PUT HTTP ke link edit-media entri. AttachmentEntry yang ditampilkan akan berisi konten yang diperbarui.

Memperbarui metadata lampiran + konten

Anda dapat mengupdate metadata lampiran dan kontennya dalam panggilan yang sama menggunakan metode updateMedia(). Jika Anda dapat memperbarui konten file saja, metadata, atau keduanya.

Contoh ini mengubah judul lampiran menjadi 'Judul Baru', memperbarui deskripsinya, dan mengganti konten filenya dengan file .zip baru. Karena permintaan berisi konten file baru, updateMedia() AttachmentEntry akan 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");

Kembali ke atas



Menghapus Konten

Untuk menghapus halaman atau item dari Situs Google, pertama-tama ambil entri konten, lalu panggil delete() entri.

entry.delete();

Anda juga bisa menggunakan metode delete() class layanan dengan meneruskan link edit dan nilai ETag entri:

client.delete(entry.getEditLink().getHref(), "*"); // Note: using "*" may overwrite another client's changes.

Jika entri berhasil dihapus, server merespons dengan HTTP 200 OK.

Kembali ke atas



Mendownload Lampiran

Untuk mendownload AttachmentEntry, kirim permintaan GET HTTP ke link content src entri.

Contoh ini akan mendownload AttachmentEntry pertama yang ditemukan dalam 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.");

Kembali ke atas

Feed ACL

Ringkasan Izin Berbagi (ACL)

Setiap entri ACL dalam feed ACL mewakili peran akses entitas tertentu, baik pengguna, grup pengguna, domain, atau akses default (yang merupakan situs publik). Entri hanya akan ditampilkan untuk entitas yang memiliki akses eksplisit - satu entri akan ditampilkan untuk setiap alamat email di panel "Orang dengan Akses" di layar berbagi UI Google Sites. Dengan demikian, admin domain tidak akan ditampilkan, meskipun mereka memiliki akses implisit ke situs.

Peran

Elemen peran mewakili tingkat akses yang dapat dimiliki suatu entitas. Ada empat kemungkinan nilai elemen gAcl:role:

  • pembaca — pelihat (setara dengan akses hanya baca).
  • writer — seorang kolaborator (setara dengan akses baca/tulis).
  • pemilik — 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:

  • pengguna — nilai alamat email, misalnya "pengguna@gmail.com".
  • grup — alamat email Google Grup, mis. "grup@domain.com".
  • domain — nama domain G Suite, misalnya "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 yang ditetapkan ke akses "pemilik". Domain hanya dapat menjadi pembaca atau penulis.

Mengambil feed ACL

Class AclFeed dan AclEntry dapat digunakan untuk mengontrol izin berbagi situs dan dapat diambil menggunakan metode getFeed() class layanan.

Contoh berikut mengambil feed 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 menangani entri di SiteFeed, setiap SiteEntry berisi link ke feed ACL-nya. Misalnya, cuplikan ini mengambil feed acl dari SiteEntry:

String aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM).getHref();
AclFeed aclFeed = client.getFeed(new URL(aclLink), AclFeed.class);

Berbagi 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 baru dan POST ke server.

Berikut ini 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 kemungkinan nilai AclScope dan AclRoles.

Berbagi tingkat Grup dan Domain

Serupa dengan berbagi situs dengan satu pengguna, Anda dapat berbagi situs di seluruh domain grup Google 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 dihosting. Misalnya, http://sites.google.com/a/domain1.com/siteA hanya dapat membagikan keseluruhan Situs dengan domain1.com, bukan domain2.com. Situs yang tidak dihosting di domain G Suite (misalnya, 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 izin sesuai keinginan, lalu panggil metode update() AclEntry untuk mengubah ACL di 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 informasi selengkapnya tentang ETag, lihat panduan referensi API Data Google.

Menghapus izin berbagi

Untuk menghapus izin berbagi, ambil AclEntry terlebih dahulu, lalu panggil metode delete()-nya:

aclEntry.delete();

// Could also use the client's delete method
// client.delete(new URL(aclEntry.getEditLink().getHref()), aclEntry);

Untuk informasi selengkapnya tentang ETag, lihat panduan referensi API Data Google.

Kembali ke atas

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 atau entri tersebut telah berubah sejak terakhir kali Anda mengambilnya.

Untuk melakukan pengambilan kondisional 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\"");

Saat menerima permintaan ini, server akan memeriksa apakah item yang Anda minta memiliki ETag yang sama dengan ETag yang ditentukan. Jika ETag cocok, maka item tidak berubah, dan server menampilkan pengecualian NotModifiedException HTTP 304 yang akan dilempar.

Jika ETag tidak sesuai, item tersebut telah dimodifikasi sejak terakhir kali Anda memintanya, dan server akan mengembalikan item tersebut.

Untuk informasi selengkapnya tentang ETag, lihat panduan referensi API Data Google.

Kembali ke atas