Java Dil Kılavuzu

Önemli: Bu doküman 2012'den önce yazılmıştır. Kimlik doğrulama seçenekleri (OAuth 1.0, AuthSub ve ClientLogin) yukarıda açıklandığı gibi resmi olarak kullanımdan kaldırıldı 20 Nisan 2012'de tamamlanmıştır ve artık kullanılamamaktadır. Şu Google Hesabı'na geçiş yapmanızı öneririz: OAuth 2.0 kullanmaya başlayın.

Google Sites Data API'sı, istemci uygulamaların bir Google Sitesindeki içeriğe erişmesine, bu içeriği yayınlamasına ve değiştirmesine olanak tanır. İstemci uygulamanız ayrıca son etkinliklerin listesini isteyebilir, düzeltme geçmişini alabilir ve ekleri indirebilir.

Bu kılavuz, Sites Data API'nın özelliklerine dair biraz arka plan sağlamanın yanı sıra, API ile etkileşime geçme hakkında örnekler de sunar. Java istemci kitaplığını kullanın. İstemci kitaplığını oluşturma konusunda yardım almak için Google Data Java İstemci Kitaplığı'nı Kullanmaya Başlama. Bu konuyla ilgileniyorsanız Klasik Sites API ile etkileşimde bulunmak için Java istemci kitaplığı tarafından kullanılan temel protokol hakkında daha fazla bilgi edinmek için lütfen protokol kılavuzuna bakın.

Kitle

Bu doküman, Google Sites ile etkileşimde bulunan istemci uygulamaları yazmak isteyen geliştiricilere yöneliktir. Bunun için Google Data Java İstemci Kitaplığı'nı kullanın.

Başlarken

Google Sites, kimlik doğrulama için Google Hesaplarını veya G Suite hesaplarını kullanır. Halihazırda bir hesabınız varsa hazırsınız demektir. Aksi takdirde yeni bir hesap oluşturabilirsiniz.

Kitaplığı yükleme

İstemci kitaplığını ayarlama ve yükleme konusunda yardım almak için Google Data Java İstemci Kitaplığı'nı Kullanmaya Başlama başlıklı makaleyi inceleyin. Eclipse kullanıyorsanız bu makalede ayrıca Google Data APIs Eclipse eklentisini kullanarak projenizi nasıl kuracağınızı anlatacağız. Başlamanız için gerekenler:

  1. Java 1.5 veya üstünü yükleme
  2. İstemci kitaplığını indirin (gdata-src.java.zip uygulamasının en son sürümü)
  3. Bağımlılıkların listesini indirin
  4. samples uygulamaları indirin (gdata-samples.java.zip uygulamasının en son sürümü)

.jar dosyalarını yükledikten sonra, projenize aşağıdakileri eklemeniz gerekir:

  1. java/lib/gdata-sites-2.0.jar - Buradaki 2.0 sürümü, klasik Sites API'nin 1.4 sürümü için hazırlanmıştır.
  2. java/lib/gdata-core-1.0.jar
  3. java/lib/gdata-client-1.0.jar
  4. java/lib/gdata-spreadsheet-3.0.jar (liste sayfaları / liste öğeleriyle çalışıyorsanız)

Ayrıca, bağımlılık jar'larını (gdata-media-1.0.jar, mail.jar ve google-collect....jar) eklediğinizden emin olun.

Örnek uygulamayı çalıştırma

Tam çalışan bir örnek uygulama, indirilen gdata-samples.java.zip dosyasının /java/sample/sites alt dizininde bulunmaktadır. Kaynak /trunk/java/sample/sites/ adresinde de mevcuttur. . SitesDemo.java, kullanıcının klasik Sites API'nin nasıl kullanılacağını gösteren çeşitli işlemler yapmasına olanak tanır.

Örneği çalıştırmak için java/sample/util/lib/sample-util.jar öğesini eklemeniz gerektiğini unutmayın.

Kendi projenizi başlatma

İpucu: Eclipse eklentimizle hızlı kurulum için Eclipse'i Google Veri API'leriyle Kullanma başlıklı makaleye bakın.

Uygulamanızın ihtiyaçlarına bağlı olarak, birkaç içe aktarma işlemi gerçekleştirmeniz gerekecektir. Aşağıdaki içe aktarma işlemleriyle başlamanızı öneririz:

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.*;

Ardından, klasik Sites API'ye istemci bağlantısını temsil eden bir SitesService nesnesi oluşturmanız gerekir:

SitesService client = new SitesService("yourCo-yourAppName-v1");

applicationName bağımsız değişkeni şu biçimde olmalıdır: company-applicationname-version. Bu parametre, günlük kaydı amacıyla kullanılır.

Not: Bu kılavuzun geri kalanında, client değişkeninde bir SitesService oluşturduğunuz varsayılmaktadır.

Klasik Sites API için kimlik doğrulama

Java istemci kitaplığı, genel veya gizli feed'lerle çalışmak için kullanılabilir. Sites Data API, gizli ve herkese açık verilere erişim sağlar ve gerçekleştirmeye çalıştığınız işleme bağlı olarak Sites izinlerine ve Örneğin içerik feed'ini okuyabilir ve ancak üzerinde güncelleme yapmaması (kimliği doğrulanmış istemci gerektirir). Bu işlem, ClientLogin kullanıcı adı/şifre kimlik doğrulaması, AuthSub veya OAuth.

AuthSub, OAuth ve ClientLogin hakkında daha fazla bilgi için lütfen Google Veri API'leri Kimlik Doğrulaması'na Genel Bakış sayfasına bakın.

İpucu: API, SSL'yi (HTTPS) destekler. AuthSub/OAuth kullanıyorsanız https://sites.google.com/feeds/ kapsamında yer alır. Ayrıca G Suite alanları, "SSL gerektir" ayarı, API, yönetim kontrol panelindeki geçerlidir. Tamamen API isteklerinin HTTPS üzerinden gönderilmesi için client.useSsl(); çağrısı yapılır.

Web uygulamaları için AuthSub

Web Uygulamaları için AuthSub Kimlik Doğrulaması, aşağıdaki değişikliği yapması gereken istemci uygulamaları tarafından kullanılmalıdır: kullanıcılarının kimliklerini Google Hesaplarına doğrulatmaları. Operatörün, Google Sites kullanıcısının kullanıcı adı ve şifresine erişmesi gerekmez. Yalnızca AuthSub jetonu gereklidir.

AuthSub'ı web uygulamanıza entegre etme talimatlarını görüntüleyin

Tek kullanımlık jeton isteyin

Kullanıcı, uygulamanızı ilk kez ziyaret ettiğinde kimlik doğrulaması yapması gerekir. Genellikle, geliştiriciler bazı metinler ve kullanıcıyı yönlendiren bir bağlantı yazdırır kullanıcının kimliğini doğrulamak ve dokümanlarına erişim isteğinde bulunmak için AuthSub onay sayfasına gidin. Google Data Java istemci kitaplığı şu işlevi sağlar: bu URL'yi oluştur. Aşağıdaki kod AuthSubRequest sayfasına bir bağlantı oluşturur.

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);

G Suite tarafından barındırılan alanınızdaki kullanıcıların kimliğini doğrulamak istiyorsanız:

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);

getRequestUrl() yöntemi, AuthSubRequest işleyicisi tarafından kullanılan sorgu parametrelerine karşılık gelen birkaç parametre alır:

  • sonraki URL: Google'ın yönlendirme yapacağı URL Kullanıcı hesabına giriş yapıp erişim izni verdikten sonra; Yukarıdaki örnekte http://www.example.com/welcome.jsp
  • kapsam — yukarıdaki örnekte https://sites.google.com/feeds/
  • jetonun kayıtlı modda kullanılıp kullanılmayacağını belirten bir boole değeri; Yukarıdaki örnekte false
  • jetonun daha sonra bir oturum jetonuyla değiştirilip değiştirilmeyeceğini belirten ikinci bir boole değeri; Yukarıdaki örnekte true

Oturum jetonuna yükseltme

AuthSub'ı Google Data API İstemci Kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.

Oturum jetonu hakkında bilgi alma

AuthSub'ı Google Data API İstemci Kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.

Oturum jetonunu iptal etme

AuthSub'ı Google Data API İstemci Kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.

Web veya yüklü/mobil uygulamalar için OAuth

OAuth, AuthSub'a alternatif olarak kullanılabilir ve web uygulamaları için tasarlanmıştır. OAuth, AuthSub'ın güvenli ve kayıtlı modunu kullanmaya benzerdir .

OAuth'u yüklü uygulamanıza entegre etme talimatlarını görüntüleyin

İstek jetonu getiriliyor

Google Data API İstemci Kitaplıklarıyla OAuth Kullanma başlıklı makaleyi inceleyin.

İstek jetonunu yetkilendirme

Google Data API İstemci Kitaplıklarıyla OAuth Kullanma başlıklı makaleyi inceleyin.

Erişim jetonuna yükseltme

Google Data API İstemci Kitaplıklarıyla OAuth Kullanma başlıklı makaleyi inceleyin.

Yüklü/mobil uygulamalar için ClientLogin

ClientLogin, şunları yapması gereken yüklü veya mobil uygulamalar tarafından kullanılmalıdır: kullanıcılarının kimliklerini Google Hesaplarına doğrulatmaları. İlk çalıştırmada, uygulamanız kullanıcıdan kullanıcı adını/şifresini ister. Sonraki taleplerde, bir kimlik doğrulama jetonuna başvuruldu.

ClientLogin'i yüklü uygulamanıza dahil etme talimatlarını görüntüleyin

ClientLogin'i kullanmak için setUserCredentials() SitesService nesnesinin yöntemi (şundan devralınan): GoogleService. Kullanıcının e-posta adresini ve şifresini belirtin müşteriniz kimin adına istekte bulunduğunu gösterir. Örneğin:

SitesService client = new SitesService("yourCo-yourAppName-v1");
client.setUserCredentials("example@gmail.com", "pa$$word");

İpucu: Uygulamanız kullanıcının kimliğini ilk kez başarıyla doğruladıktan sonra kimlik doğrulama jetonunu geri çağırmak için kullanılır. Uygulamanızı her çalıştırmada kullanıcıdan şifresini istemenize gerek yoktur. Daha fazla bilgi için Yetkilendirme jetonunu geri çağırma bölümüne bakın.

Java uygulamalarınızda ClientLogin'i kullanma hakkında daha fazla bilgi için Google Data API İstemci Kitaplıklarıyla ClientLogin'i Kullanma başlıklı makaleye bakın.

Başa dön

Site Özet Akışı

Site özet akışı, bir kullanıcının sahip olduğu veya görüntüleme izinlerine sahip olduğu Google Sites sitelerini listelemek için kullanılabilir. Mevcut bir sitenin adını değiştirmek için de kullanılabilir. G Suite alanlarında, bir alan adını oluşturmak ve/veya kopyalamak için bir şablondur.

Site listeleme

Site özet akışını sorgulamak için site özet akışı URL'sine bir HTTP GET gönderin:

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

Java istemcisinde SiteFeed ve SiteEntry sınıflarını kullanarak ekleme:

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("");
  }
}

Yukarıdaki snippet sitenin başlığını, site adını ve sitenin temasını yazdırır. Diğer alıcılar da feed'deki ek özelliklere erişerek.

Yeni site oluşturma

Not: Bu özellik yalnızca G Suite alanlarında kullanılabilir.

Yeni bir SiteEntry oluşturup istemcinin insert() yöntemini kullanabilirsiniz.

Bu örnek, "seçenek listesi" temasıyla yepyeni bir site oluşturuyor (isteğe bağlı ayar) sağlar ve site adı (gerekli) ve açıklama (isteğe bağlı):

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");

Yukarıdaki istek, example.com G Suite alanı altında yeni bir site oluşturacak. Bu nedenle, sitenin URL'si https://sites.google.com/a/example.com/sitemin-başlığı olur.

Site başarıyla oluşturulursa sunucu bir SiteEntry ile yanıt verir. nesne; sunucu tarafından eklenen öğelerle doldurulur: site bağlantısı, sitenin EKL özet akışı. Site adı, başlık, özet vb.

Site kopyalama

Not: Bu özellik yalnızca G Suite alanlarında kullanılabilir.

Bir siteyi kopyalamak yeni site oluşturmaya benzer. Aralarındaki fark şu: bağlantısını (yeni SiteEntry) eklemeniz gerekir. Yeni site oluşturma bölümünde oluşturulan siteyi kopyalama örneği aşağıda verilmiştir:

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);

Önemli noktalar:

  • Yalnızca kimliği doğrulanmış kullanıcının sahip olduğu siteler ve site şablonları kopyalanabilir.
  • Site şablonu da kopyalanabilir. "Bu siteyi şablon olarak yayınla" seçeneği sunulduğunda site, şablondur ayarının işaretli olup olmadığını kontrol edin.
  • Kaynak sitede sahip olarak listelenmediğiniz sürece, başka bir alandan site kopyalayabilirsiniz.

Bir sitenin meta verilerini güncelleme

Bir siteyi yeniden adlandırmak, temasını, kategori etiketini veya özetini değiştirmek için öncelikle söz konusu siteyi içeren SiteEntry web sitesini getirmeniz gerekir. bir veya daha fazla özelliği değiştirip SiteEntry update() yöntemini çağırın. Şu örnek, önceki sitenin temasını değiştiriyor ve siteyi yeniden adlandırıyor:

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();

Web adresi eşlemeleri

Web adresi eşlemeleri, Sites kullanıcılarının kendi alanlarını bir Google sitesi ile eşlemesine olanak tanır. Örneğin, http://www.mydomainsite.com http://sites.google.com/a/domain.com/mysite yerine kullanılabilir. Sitenizin nerede barındırıldığına bağlı olarak, bir sitenizin web adresi eşlemeleridir. Daha fazla bilgi edinmek için Yardım Merkezi makalemizi inceleyebilirsiniz.

Bir sitenin web adresi eşlemelerini getirme

Bir sitenin web adresi eşlemelerini döndürmek için with-mappings=true parametresiyle site girişini/feed'ini getirin:

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());
  }
}

Mevcut eşlemeler rel='webAddress Matching' ile links olarak gösterilir. Örneğin, yukarıdaki örnekte siteye işaret eden üç webAddressMapping var http://sites.google.com/site/myOtherTestSite.

Web adresi eşlemelerini değiştirme

Not: Tüm GET/POST/PUT işlemleri, çalışırken with-mappings=true parametresini belirtmelidir. web adresi eşlemeleri kullanın. Parametre yoksa webAddressMapping öğeleri, site girişlerinde (GET) döndürülmez veya (PUT) eşlemeleri güncellenirken/kaldırılırken.

Bir eşlemeyi eklemek, güncellemek ya da silmek için yeni siteler oluştururken söz konusu bağlantıyı belirtmeniz, değiştirmeniz veya kaldırmanız yeterlidir. bir sitenin meta verilerini güncelleme. with-mappings=true parametresi, site feed'i URI'sine eklenmelidir. Not: Adres eşlemelerini güncellemek için site yöneticisi veya G Suite tarafından barındırılan bir site kullanıyorsanız alan yöneticisi olmanız gerekir.

Örneğin, aşağıdaki istek http://www.mysitemapping.com eşlemesini http://www.my-new-sitemapping.com olarak günceller. ve bağlantıyı girişin dışında bırakarak http://www.mysitemapping2.com öğesini kaldırır:

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();

Web adresi eşlemelerinin, site oluşturma/kopyalama sırasında da belirtilebileceğini unutmayın.

Başa dön

Etkinlik Feed'i

Etkinlik feed'ini getirerek bir Site'nin son etkinliğini (değişiklikleri) getirebilirsiniz. Bu etkinlik feed'i, Sitede yapılan bir değişiklikle ilgili bilgileri içerir.

Etkinlik feed'ini sorgulamak için etkinlik feed'i URL'sine bir HTTP GET gönderin:

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

Java istemcisinde ActivityEntry nesneleri döndürmek için ActivityFeed sınıfını kullanın:

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());
  }
}

Not: Bu feed'e erişmek için sitenin ortak çalışanı veya sahibi olmanız gerekir. İstemciniz bir AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulamalıdır. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.

Başa dön

Düzeltme Özet Akışı

Herhangi bir içerik girişinin düzeltme geçmişini getirmek için girişin düzeltme bağlantısına bir HTTP GET gönderin:

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

Bu örnek, içerik feed'ini sorgular ve ardından ilk içerik girişi için düzeltme feed'ini getirir:

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());
  }
}

Not: Bu feed'e erişmek için Sitenin ortak çalışanı veya sahibi olmanız gerekir. İstemciniz bir AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulamalıdır. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.

Başa dön

İçerik Feed'i

İçerik feed'ini alma

İçerik feed'i bir sitenin en son içeriğini listeler. İçerik feed'i URL'sine bir HTTP GET gönderilerek erişilebilir:

https://sites.google.com/feeds/content/site/siteName
Feed parametresiAçıklama
site"site" veya G Suite tarafından barındırılan alanınızın alanı (ör. example.com).
siteNameSitenizin web alanı adı; sitenin URL'sinde bulunur (ör. mySite).

İçerik feed'ini getirme örneği:

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);

Elde edilen contentFeed, sunucudan gelen yanıtı içeren bir ContentFeed nesnesidir. Her giriş / contentFeed, kullanıcının Sitesindeki farklı bir sayfayı veya öğeyi temsil eder. ContentFeed, farklı türler içeriyor Tümü BaseContentEntry kaynağından devralındı: ListItemEntry, ListPageEntry, AttachmentEntry, WebAttachmentEntry, FileCabinetPageEntry, AnnouncementsPageEntry, AnnouncementEntry, WebPageEntry, CommentEntry.

ContentFeed öğesindeki farklı giriş türlerinin listelenmesine ilişkin bir örneği burada bulabilirsiniz. Her giriş türü farklı özellikler içerir, ancak bunların tümü burada yazdırılmaz.

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());
  }
}

Not: Bu feed, kimlik doğrulama gerektirebilir veya gerekmeyebilir; (Sitenin paylaşım izinlerine bağlı olarak). Site herkese açık değilse istemciniz bir AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulaması yapmalıdır. Görüntüleyin Sites hizmeti için kimlik doğrulama.

İçerik feed'i sorgu örnekleri

Standart Google Data API sorgu parametrelerinden bazılarını kullanarak içerik feed'inde arama yapabilirsiniz. ve klasik Sites API'sine özel olanlar. Daha ayrıntılı bilgi ve desteklenen parametrelerin tam listesi için Başvuru Kılavuzu.

Not: Bu bölümdeki örnekler, İçerik Feed'ini Alma bölümündeki buildContentFeedUrl() yöntemini kullanır.

Belirli giriş türlerini alma

Yalnızca belirli bir giriş türünü getirmek için kind parametresini kullanın. Şu örnek yalnızca attachment girişi döndürür:

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());
}

Birden fazla giriş türü döndürmek için her kind öğesini ',' ile ayırın. Bu örnek, filecabinet ve listpage giriş:

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());
}

Yola göre sayfa alma

Google Sitesindeki bir sayfanın göreli yolunu biliyorsanız o sayfayı getirmek için path parametresini kullanabilirsiniz. Bu örnek, şu adreste bulunan sayfayı döndürür: 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());
}

Üst sayfa altındaki tüm girişleri alma

Bir sayfanın içerik giriş kimliğini biliyorsanız (ör. aşağıdaki örnekte "1234567890") parent parametresini kullanabilirsiniz öğesini eklemeniz gerekir:

ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl()));
query.setParent("1234567890");
ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);

Diğer parametreler için Başvuru Kılavuzu'na bakın.

Başa dön



İçerik Oluşturma

Not: Bir site için içerik oluşturmadan önce istemcide sitenizi ayarladığınızdan emin olun.
client.site = "siteName";

Yeni içerikler (web sayfaları, liste sayfaları, dosya dolabı sayfaları, duyuru sayfaları vb.) HTTP POST ekleme:

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

Destek düğümü türlerinin listesi için Başvuru Kılavuzu'ndaki kind parametresine bakın.

Yeni öğeler / sayfalar oluşturma

Bu örnek, Site'nin üst düzeyi altında yeni bir webpage oluşturur ve sayfa gövdesi için bir XHTML içerir. ve başlık başlığını 'Yeni Web Sayfası Başlığı' olarak ayarlar:

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());

İstek başarılı olursa createdEntry, sunucuda oluşturulan girişin bir kopyasını içerir.

Özel URL yolları altında öğeler/sayfalar oluşturma

Varsayılan olarak önceki örnek, URL altında oluşturulur http://sites.google.com/site/siteName/new-webpage-title ve "Yeni Web Sayfası Başlığı" şeklinde bir sayfa başlığına sahip olmalıdır. Yani <atom:title>, URL için new-webpage-title değerine normalleştirilir. Bir sayfanın URL yolunu özelleştirmek için <sites:pageName> öğesini ayarlayabilirsiniz.

Bu örnekte, "File Storage" başlıklı yeni bir filecabinet sayfası oluşturuluyor, ancak sayfa oluşturuluyor http://sites.google.com/site/siteName/files URL altında (http://sites.google.com/site/siteName/file-storage yerine) <sites:pageName> öğesini belirterek

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());

Sunucu, bir sayfanın URL yolunu adlandırmak için aşağıdaki öncelik kurallarını kullanır:

  1. Varsa <sites:pageName>. a-z, A-Z, 0-9, -, _ şartlarını karşılamalıdır.
  2. <atom:title>, pageName yoksa boş olmamalıdır. Normalleştirme, boşlukları "-" olacak şekilde kırpmak ve daraltmak için kullanılır ve a-z, A-Z, 0-9, -, _ ile eşleşmeyen karakterleri kaldırın.

Alt sayfalar oluşturma

Bir üst sayfa altında alt sayfalar (alt sayfalar) oluşturmak için girişte üst bağlantıyı ayarlamanız gerekir. Bağlantının href özelliği ana düğümün öz bağlantısı.

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());

Yukarıdaki örnek, şurada bulunan ilk duyurular sayfasının altında yeni bir announcement oluşturur: kullanıcının içerik feed'i. Duyuru başlığı "Parti!" olarak ayarlandı "Bu hafta sonu yerim" olarak da ayarlayabilirsiniz.

Sayfa şablonları

Sayfa şablonları oluşturma

Sayfa şablonu oluşturma süreci yeni öğeler/sayfalar oluşturma ve alt sayfalar oluşturmak. Aradaki fark, category öğesinin terimin ve etiketin "http://schemas.google.com/g/2005#template" olarak ayarlandığı şekilde eklenmesidir. ve "template" öğelerini seçin.

Bu örnek yeni bir webpage şablonu oluşturur.

// 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);

Şablondan sayfa oluşturma

Sayfa şablonları oluşturmaya benzer şekilde, rel='http://schemas.google.com/sites/2008#template' ile bir <link> ekleyerek şablondan yeni bir sayfa oluşturabilirsiniz. nişan alma .

Bu örnek, yeni bir filecabinet şablonu oluşturur ve ardından bu şablondan yeni bir filecabinet sayfası oluşturur.

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);

Not: <category> tanımlayan bir şablona rağmen, yine de girilmesi gerekir. Ayrıca, bir <content> öğesi eklerseniz sunucunun bunu reddedeceğini unutmayın.

Dosya yükleme

Google Sites'ta olduğu gibi API, dosya dolabı sayfasına veya bir üst sayfaya ek yüklemeyi destekler.

Bir üst öğeye ek yüklemek için içerik feed'i URL'sine HTTP POST isteği gönderin:

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

Tüm ek türleri, üst sayfaya yüklenmelidir. Bu nedenle, AttachmentEntry veya WebAttachmentEntry nesnesini yükleyebilirsiniz. Daha fazla bilgi için Alt sayfa oluşturma bölümüne bakın.

Ekler yükleniyor

Bu örnekte, kullanıcının içerik feed'inde bulunan ilk FileCabinetPageEntry dosyaya bir PDF dosyası yükleniyor. Ek, "Başlarken" başlığıyla oluşturulur. ve (isteğe bağlı) bir açıklama, "HR paketi" ile birlikte ekleyin.

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!");

Yükleme başarılı olursa attachment, oluşturulan ek girişinin bir kopyasını içerir.

Klasöre ek yükleme

FileCabinetPageEntry klasöründeki mevcut bir klasöre ek yüklemek için "terim" içeren bir kategori ekleyin özelliği klasörün adına ayarlandı. Örneğin, uploadAttachment() bölümüne şu satırı ekleyin:

newAttachment.getCategories().add(new Category("http://schemas.google.com/sites/2008#folder", "FolderName"));

Web ekleri

Web ekleri, özel ek türleridir. Kısaca, web'deki diğer dosyaların bağlantılarıdır girişlerinize ekleyebilirsiniz. Bu özellik, "URL ile dosya ekle"ye benzerdir. yükleme yöntemini kullanabilirsiniz.

Not: Web ekleri yalnızca dosya dolabı sayfası altında oluşturulabilir. Diğer sayfa türlerine yüklenemezler.

Bu örnek, kullanıcının içerik feed'inde bulunan ilk FileCabinetPageEntry altında bir WebAttachmentEntry oluşturur. Başlığı ve (isteğe bağlı) açıklaması "GoogleLogo" olarak ayarlanmıştır ve "güzel renkler" seçeneklerini görebilirsiniz.

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, kullanıcının dosya dolabında 'http://www.google.com/images/logo.gif' adresindeki resmi işaret eden bir bağlantı oluşturur.

Başa dön



İçerik güncelleniyor

Bir sayfanın meta verilerini ve/veya html içeriğini güncelleme

Herhangi bir BaseContentEntry türünün meta verileri (başlık, pageName vb.) ve sayfa içeriği girişin update() yöntemini kullanarak. Bu işlem, girişin edit öğesine bir HTTP PUT isteği gönderir bağlantısını tıklayın.

Aşağıda, aşağıdaki değişikliklerle bir ListPageEntry güncellemesinin bir örneği verilmiştir:

  • Başlık "Güncellenmiş Başlık" olarak değiştirildi
  • Sayfanın HTML içeriği "<p>Güncellenmiş HTML İçeriği</p>" olarak güncellenir
  • Listenin ilk sütun başlığı "Sahip" olarak değiştirildi
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!");

Ek dosyasının içeriğini güncelleme

AttachmentEntry için girişin MediaSource değerini ayarlayarak ve ardından girişin updateMedia(boolean) yöntemi.

Bu örnek, mevcut bir ekin içeriğini günceller:

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);
}

Örnek, girişin edit-media bağlantısına bir HTTP PUT isteği gönderir. Döndürülen AttachmentEntry, güncellenmiş içeriği içerecek.

Ek meta verilerini ve içeriğini güncelleme

Bir ekin meta verilerini ve içeriğini aynı görüşmede updateMedia() yöntemini kullanarak güncelleyebilirsiniz. Yalnızca dosya içeriğini, meta verileri veya her ikisini birden güncelleyebilirseniz.

Bu örnek, ekin başlığını "Yeni Başlık" olarak değiştirir, açıklamasını günceller ve dosya içeriğini yeni bir .zip dosyasıyla değiştirir. İstek yeni dosya içeriği barındırdığından AttachmentEntry öğesinin updateMedia() değeri kullanılır.

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");

Başa dön



İçerik Siliniyor

Bir Google Sitesinden bir sayfayı veya öğeyi kaldırmak için öncelikle içerik girişini alın, ardından girişin delete() işlevini çağırın.

entry.delete();

Ayrıca, hizmet sınıfının delete() yöntemini girişin edit bağlantısını ve ETag değerini ileterek de kullanabilirsiniz:

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

Giriş başarıyla silindiyse sunucu HTTP 200 OK ile yanıt verir.

Başa dön



Ekleri İndirme

AttachmentEntry indirmek için girişin content src bağlantısına HTTP GET isteği gönderin.

Bu örnek, kullanıcının içerik feed'inde bulunan ilk AttachmentEntry dosyasını indirir "/path/to/save/file/" dizinine ekleyin:

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.");

Başa dön

EKL Feed'i

Paylaşım İzinlerine (EKL'ler) Genel Bakış

EKL feed'indeki her EKL girişi, belirli bir varlığın erişim rolünü temsil eder: Kullanıcı, kullanıcı grubu, alan adı, veya varsayılan erişim (herkese açık site). Girişler yalnızca açık erişime sahip varlıklar için gösterilir; bir giriş gösterilir "Erişimi Olan Kişiler"deki her bir e-posta adresi için Google Sites arayüzünün paylaşım ekranındaki paneli açın. Bu nedenle, alan yöneticileri bir siteye erişimleri vardır.

Roller

Rol öğesi, bir öğenin sahip olabileceği erişim düzeyini temsil eder. gAcl:role öğesinin dört olası değeri vardır:

  • reader: Görüntüleyen (salt okuma erişimine eşdeğerdir).
  • writer — bir ortak çalışan (okuma/yazma erişimine eşdeğerdir).
  • owner — genellikle site yöneticisi (okuma/yazma erişimine eşdeğer)

Kapsamlar

Kapsam öğesi, bu erişim düzeyine sahip olan varlığı temsil eder. gAcl:scope öğesinin dört olası türü vardır:

  • user — bir e-posta adresi değeri (ör. "user@gmail.com").
  • group — bir Google Grubu e-posta adresi, ör. "grup@alan.com".
  • alanadi: Bir G Suite alan adı (ör. "alanadi.com").
  • default: "Varsayılan" türünde yalnızca bir olası kapsam vardır ve değer yoktur. (örn.<gAcl:scope type="default">). Bu kapsam, herhangi bir kullanıcının varsayılan olarak sahip olduğu erişimi kontrol eder yayınlayabilirsiniz.

Not: Alanların değeri gAcl:role olamaz. "sahip" olarak ayarla yalnızca okuyucu veya yazar olabilirler.

EKL feed'ini alma

Bir sitenin paylaşımını kontrol etmek için AclFeed ve AclEntry sınıfları kullanılabilir izinleri vardır ve hizmet sınıfının getFeed() yöntemi kullanılarak getirilebilir.

Aşağıdaki örnekte belirli bir sitenin EKL feed'i getirilir ve her 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');

SiteFeed'deki girişlerle çalışıyorsanız her SiteEntry, kendi EKL feed'inin bir bağlantısını içerir. Örneğin, bu snippet bir SiteEntry öğesinin Ecl feed'ini getirir:

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

Site paylaşma

Not: Belirli paylaşım EKL'leri, yalnızca alan yapılandırılmışsa mümkün olabilir tıklayın.

API'yi kullanarak bir Google Sites sitesini paylaşmak için müşterinizin, yeni bir AclEntry ve POST olarak da sunucuya gönderir.

Aşağıda, "kullanici@example.com" adresinin eklendiği bir örnek verilmiştir. sitede reader olarak:

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);
}

Olası AclScope için EKL feed'ine Genel Bakış bölümüne bakın ve AclRoles değerleridir.

Grup ve Alan düzeyinde paylaşım

Bir siteyi tek bir kullanıcıyla paylaşmaya benzer şekilde, bir siteyi bir Google grubu veya G Suite alanı.

Bir grup e-posta adresiyle paylaşma:

AclScope scope = new AclScope(AclScope.Type.GROUP, "group_name@example.com");

Alanın tamamıyla paylaşma:

AclScope scope = new AclScope(AclScope.Type.DOMAIN, "example.com");

Alan düzeyinde paylaşım yalnızca G Suite alanlarında ve yalnızca sitenin barındırıldığı alan için desteklenir. Örneğin http://sites.google.com/a/alanadi1.com/siteA, Sitenin tamamını alanadi2.com ile paylaşamaz, yalnızca alanadi1.com ile paylaşabilir. Aşağıdakiler bir G Suite alanında barındırılmayan (ör. http://sites.google.com/site/siteB) alan adı davet edemez.

Paylaşım izinlerini değiştirme

Bir sitedeki mevcut bir paylaşım izni için önce söz konusu AclEntry öğesini getirin, izni değiştirin ve ardından sunucudaki EKL'yi değiştirmek için AclEntry öğesinin update() yöntemini çağırın.

Bu örnekte, Site paylaşma bölümündeki önceki aclEntry örneğimiz değiştirilmiştir. 'kullanici@example.com' adresini güncelleyerek writer (ortak çalışan) olmak için:

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);

ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.

Paylaşım izinleri kaldırılıyor

Bir paylaşım iznini kaldırmak için önce AclEntry öğesini alın, ardından delete() yöntemini çağırın:

aclEntry.delete();

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

ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.

Başa dön

Özel Konular

Tekrar yayın veya giriş alma

Daha önce aldığınız bir feed'i veya girişi almak isterseniz şunu söyleyerek verimliliği artırabilirsiniz: sunucunun listeyi veya girişi, yalnızca son almanızdan sonra değişmişse göndermesini.

Bu tür bir koşullu alma işlemi gerçekleştirmek için hem getFeed() hem de getEntry() yöntemleri If-Modified-Since başlığı için ETag değerini veya DateTime nesnesini kabul eden ek bir bağımsız değişken. Bir girişin e etiketine entry.getEtag() adresinden erişebilirsiniz.

Bu örnekte, bir içerik web sayfası girişi için koşullu alma işlemi yapılır:

String feedUrl = "https://sites.google.com/feeds/content/site/siteName/123456789";
WebPageEntry entry = client.getEntry(new URL(feedUrl), WebPageEntry.class, "\"GVQHSARDQyp7ImBq\"");

Sunucu bu isteği aldığında, istediğiniz öğenin belirttiğiniz ETag. ETag'ler eşleşirse öğe değişmemiştir ve sunucu bir HTTP 304 NotModifiedException istisnası atılacak.

ETag'ler eşleşmezse öğe son istekte bulunduğunuzdan beri değiştirilmiştir ve sunucu öğeyi döndürür.

ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.

Başa dön