Java Dil Kılavuzu

Önemli: Bu belge 2012'den önce yazılmıştır. Bu belgede açıklanan kimlik doğrulama seçenekleri (OAuth 1.0, AuthSub ve ClientGiriş) 20 Nisan 2012 tarihinden itibaren resmi olarak kullanımdan kaldırılmıştır ve artık kullanılamamaktadır. En kısa sürede OAuth 2.0'a taşımanızı öneririz.

Google Sites Data API'sı, istemci uygulamaların bir Google Sitesi içindeki 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 etkinlik listesini isteyebilir, düzeltme geçmişini alabilir ve ekleri indirebilir.

Bu kılavuz, Sites Data API'nin özellikleriyle ilgili temel bilgilere ek olarak Java istemci kitaplığı aracılığıyla API ile etkileşim kurmayla ilgili örnekler sunar. İstemci kitaplığını oluşturma konusunda yardım için Google Veri Java İstemci Kitaplığı'nı Kullanmaya Başlama bölümüne bakın. Java istemci kitaplığı tarafından klasik Sites API'yle etkileşimde bulunmak için kullanılan temel protokol hakkında daha fazla bilgi edinmek istiyorsanız lütfen protokol kılavuzuna bakın.

Kitle

Bu doküman, Google Veri Java İstemci Kitaplığı'nı kullanarak Google Sites ile etkileşimde bulunan istemci uygulamaları yazmak isteyen geliştiricilere yöneliktir.

Kullanmaya başlama

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

Kitaplık yükleniyor

İstemci kitaplığını kurma ve yükleme konusunda yardım almak için Google Veri Java İstemci Kitaplığı'nı Kullanmaya Başlama başlıklı makaleye bakın. Eclipse kullanıyorsanız bu makalede Google Veri API'leri Eclipse eklentisini kullanarak projenizi nasıl kuracağınız da açıklanmaktadır. Başlamak için gerekenler aşağıda açıklanmıştır:

  1. Java 1.5 veya sonraki bir sürümü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. Örnek uygulamalarını indirin (gdata-samples.java.zip uygulamasının en son sürümü)

.jars dosyası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 tasarlanmış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 dosyalarını (gdata-media-1.0.jar, mail.jar ve google-collect....jar) eklediğinizden de emin olun.

Örnek uygulamayı çalıştırma

İndirilen gdata-samples.java.zip dizininin /java/sample/sites alt dizininde tam çalışan bir örnek uygulama bulunmaktadır. Kaynak, Kaynak sekmesinden erişilebilen SVN deposundaki /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 eklemeniz gerektiğini unutmayın.

Kendi projenizi başlatma

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

Uygulamanızın ihtiyaçlarına bağlı olarak, çeşitli içe aktarma işlemlerine ihtiyacınız olacaktır. 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'yle istemci bağlantısını temsil eden bir SitesService nesnesi de 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'sine kimlik doğrulama

Java istemci kitaplığı, genel veya özel yayınlarla çalışmak için kullanılabilir. Sites Data API, Sites izinlerine ve gerçekleştirmeye çalıştığınız işleme bağlı olarak özel ve genel feed'lere erişim sağlar. Örneğin, herkese açık bir Sitenin içerik feed'ini okuyabilir ancak bu sitede güncelleme yapamayabilirsiniz. Bu, kimliği doğrulanmış bir istemci gerektirir. Bu işlem ClientLogin kullanıcı adı/şifre kimlik doğrulaması, AuthSub veya OAuth aracılığıyla yapılabilir.

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

İpucu: API SSL'yi (HTTPS) destekler. AuthSub/OAuth kullanıyorsanız feed'leri SSL üzerinden istemek için https://sites.google.com/feeds/ kapsamını belirttiğinizden emin olun. Ayrıca, G Suite alanlarında, API'nin yönetici kontrol panelindeki "SSL Gerektir" ayarının da dikkate alındığını unutmayın. client.useSsl(); yöntemini çağırarak tüm API isteklerini HTTPS üzerinden yapmaya zorlayabilirsiniz.

Web uygulamaları için AuthSub

Web Uygulamaları İçin AuthSub Kimlik Doğrulaması, kullanıcılarının Google hesaplarında kimlik doğrulamasını gerektiren istemci uygulamaları tarafından kullanılmalıdır. Operatörün Google Sites kullanıcısının kullanıcı adına ve şifresine erişmesi gerekmez, yalnızca bir AuthSub jetonu gerekir.

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

Tek kullanımlık jeton isteyin

Kullanıcı, uygulamanızı ilk ziyaret ettiğinde kimliğini doğrulaması gerekir. Genellikle, geliştiriciler, kullanıcının kimliğini doğrulamak ve dokümanlarına erişim talep etmek için metnin bir kısmını ve kullanıcıyı AuthSub onay sayfasına yönlendiren bir bağlantıyı yazdırır. Google Veri Java istemci kitaplığı, bu URL'yi oluşturacak bir işlev sağlar. Aşağıdaki kod, AuthSubRequest sayfasına yönlendiren 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 birkaç parametre alır (AuthSubRequest işleyicisi tarafından kullanılan sorgu parametrelerine karşılık gelir):

  • sonraki URL — Kullanıcı hesabına giriş yapıp erişim izni verdikten sonra Google'ın yönlendirme yapacağı URL; 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; yukarıdaki örnekte false
  • jetonun daha sonra bir oturum jetonuyla değiştirilip değiştirilmeyeceğini belirten ikinci bir boole; yukarıdaki örnekte true

Oturum jetonuna yükseltme

AuthSub'ı Google Veri API'si İstemci Kitaplıklarıyla Kullanma bölümüne bakın.

Oturum jetonu hakkında bilgi alma

AuthSub'ı Google Veri API'si İstemci Kitaplıklarıyla Kullanma bölümüne bakın.

Oturum jetonunu iptal etme

AuthSub'ı Google Veri API'si İstemci Kitaplıklarıyla Kullanma bölümüne bakın.

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

OAuth, AuthSub'a alternatif olarak kullanılabilir ve web uygulamalarına yöneliktir. OAuth, tüm veri isteklerinin dijital olarak imzalanması ve alanınızı kaydetmeniz gerektiği açısından AuthSub'ın güvenli ve kayıtlı modunu kullanmaya benzer.

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

İstek jetonu getirme

Google Veri API'sı İstemci Kitaplıklarıyla OAuth'u Kullanma başlıklı makaleyi inceleyin.

İstek jetonunu yetkilendirme

Google Veri API'sı İstemci Kitaplıklarıyla OAuth'u Kullanma başlıklı makaleyi inceleyin.

Erişim jetonuna yükseltme

Google Veri API'sı İstemci Kitaplıklarıyla OAuth'u Kullanma başlıklı makaleyi inceleyin.

Yüklü/mobil uygulamalar için ClientLog

ClientLogin, kullanıcılarının Google hesaplarında kimlik doğrulamasını gerektiren yüklü uygulamalar veya mobil uygulamalar tarafından kullanılmalıdır. İlk çalıştırmada uygulamanız, kullanıcıdan kullanıcı adını/şifresini ister. Sonraki isteklerde bir kimlik doğrulama jetonuna başvurulur.

ClientGiriş'i yüklü uygulamanıza ekleme talimatlarını inceleyin

ClientLogin'i kullanmak için GoogleService'dan devralınan SitesService nesnesinin setUserCredentials() yöntemini çağırın. İstemciniz adına istek gönderen kullanıcının e-posta adresini ve şifresini belirtin. Ö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 yetkilendirme jetonunu daha sonra kullanmak üzere geri çağırmak için veritabanınızda depolayın. Uygulamanızın her çalıştırıldığında kullanıcıdan şifresini istemeniz gerekmez. Daha fazla bilgi için Yetkilendirme jetonunu geri çağırma sayfasına göz atın.

Java uygulamalarınızda ClientGiriş'i kullanma hakkında daha fazla bilgi edinmek için Google Veri API'sı İstemci Kitaplıklarıyla ClientGiriş'i kullanma bölümüne bakın.

Başa dön

Site İçerik Takibi

Site feed'i, bir kullanıcının sahip olduğu veya görüntüleme iznine 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 sitenin tamamını oluşturmak ve/veya kopyalamak için de kullanılabilir.

Siteleri listeleme

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

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

Java istemcisinde site feed'iyle çalışmak için SiteFeed ve SiteEntry sınıflarını kullanabilirsiniz:

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. Feed'deki ek mülklere erişmek için diğer alıcılar da kullanılabilir.

Yeni site oluşturma

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

Yeni bir SiteEntry oluşturup site feed'inde müşterinin insert() yöntemini çağırarak yeni sitelerin temel hazırlığı yapılabilir.

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

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 adlı G Suite alanı kapsamında yeni bir site oluşturur. Bu nedenle, sitenin URL'si https://sites.google.com/a/example.com/my-site-title olur.

Site başarıyla oluşturulursa sunucu, sunucu tarafından eklenen öğelerle doldurulan bir SiteEntry nesnesiyle yanıt verir: sitenin bağlantısı, sitenin EKL feed'ine bir bağlantı, site adı, başlık, özet vb.

Site kopyalama

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

Site kopyalama işlemi, yeni site oluşturmaya benzer. Aralarındaki fark yeni SiteEntry sitenizde kopyalanacak sitenin öz bağlantısını içeren bir bağlantı oluşturmanızın gerekmesidir. Yeni siteler oluşturma bölümünde oluşturulan sitenin kopyalanmasına ilişkin bir örnek 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ıya ait siteler ve site şablonları kopyalanabilir.
  • Site şablonları da kopyalanabilir. Site, Google Sites ayarlar sayfasında "Bu siteyi şablon olarak yayınla" ayarı işaretlenmişse bir şablondur.
  • Kaynak sitede sahip olarak listelenmeniz koşuluyla bir siteyi başka bir alandan kopyalayabilirsiniz.

Bir sitenin meta verilerini güncelleme

Bir sitenin temasını, kategori etiketini veya özetini değiştirmek için ilk olarak söz konusu siteyi içeren SiteEntry kodunu getirmeniz, bir veya daha fazla mülkü değiştirmeniz ve ardından SiteEntry ürününün update() yöntemini çağırmanız gerekir. Bu örnekte, önceki sitenin teması değiştirilir ve site yeniden adlandırılır:

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 Sites sitesi ile eşlemesine olanak tanır. Örneğin, http://sites.google.com/a/domain.com/mysite yerine http://www.mydomainsite.com kullanılabilir. Sitenizin barındırıldığı yere bağlı olarak, sitenin web adresi eşlemelerini manuel olarak değiştirebilirsiniz. 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 site girişini/feed'ini with-mappings=true parametresiyle 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 link olarak gösterilir. Örneğin, yukarıdaki örnekte http://sites.google.com/site/myOtherTestSite sitesine işaret eden üç webAddressMapping var.

Web adresi eşlemelerini değiştirme

Not: Tüm GET/POST/PUT işlemleri, web adresi eşlemeleriyle çalışırken with-mappings=true parametresini belirtmelidir. Parametre yoksa webAddressMapping'ler site girişlerinde (GET) döndürülmez veya bir girişteki eşlemeler güncellenirken/kaldırılırken (PUT) dikkate alınmaz.

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

Örneğin, aşağıdaki istek http://www.my-new-sitemapping.com ile http://www.mysitemapping.com eşlemesini 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şturulurken/kopyalanırken da belirtilebileceğini unutmayın.

Başa dön

Etkinlik Feed'i

Bir Sitenin son etkinliklerini (değişiklikleri) etkinlik feed'ini getirerek getirebilirsiniz. Etkinlik feed'indeki her giriş, Site'de 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 nesnelerini 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şebilmek için Site'nin ortak çalışanı veya sahibi olmanız gerekir. İstemcinizin bir AuthSub, OAuth veya ClientLog jetonu kullanarak kimlik doğrulaması yapması gerekir. 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 HTTP GET gönderin:

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

Bu örnekte içerik feed'i sorgulanır ve ilk içerik girişi için düzeltme feed'i getirilir:

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şebilmek için Site'nin ortak çalışanı veya sahibi olmanız gerekir. İstemcinizin bir AuthSub, OAuth veya ClientLog jetonu kullanarak kimlik doğrulaması yapması gerekir. 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öndererek 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'inin getirilmesiyle ilgili örnek:

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

Sonuçta elde edilen contentFeed, sunucudan alınan yanıtı içeren bir ContentFeed nesnesi olur. Her contentFeed girişi, kullanıcının Sitesi içindeki farklı bir sayfayı veya öğeyi temsil eder. ContentFeed, tümü BaseContentEntry öğesinden devralınan farklı nesne türleri içerir: ListItemEntry, ListPageEntry, AttachmentEntry, WebAttachmentEntry, FileCabinetPageEntry, AnnouncementsPageEntry, AnnouncementEntry, WebPageEntry, CommentEntry.

Aşağıda, ContentFeed öğesinde farklı giriş türlerinin listelenmesine ilişkin bir örnek verilmiştir. Her giriş türü farklı özellikler içerir, ancak tümü buraya 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: Sitenin paylaşım izinlerine bağlı olarak bu feed, kimlik doğrulama gerektirebilir veya gerektirmeyebilir. Site herkese açık değilse istemciniz bir AuthSub, OAuth veya ClientLog jetonu kullanarak kimlik doğrulaması yapmalıdır. Sites hizmetinde kimlik doğrulama sayfasına göz atın.

İçerik feed'i sorgu örnekleri

Standart Google Data API sorgu parametrelerinden bazılarını ve klasik Sites API'ye özel parametreleri kullanarak içerik feed'inde arama yapabilirsiniz. Daha ayrıntılı bilgiler ve desteklenen parametrelerin tam listesi için Başvuru Kılavuzu'na göz atın.

Not: Bu bölümdeki örneklerde İçerik Feed'ini Alma'da buildContentFeedUrl() yöntemi kullanılmaktadır.

Belirli giriş türlerini alma

Yalnızca belirli bir giriş türünü getirmek için kind parametresini kullanın. Bu örnek yalnızca attachment giriş 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 değerini bir "," ile ayırın. Bu örnek, filecabinet ve listpage girişlerini döndürür:

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

Sayfa yola göre alınıyor

Google Sitesi'ndeki bir sayfanın göreli yolunu biliyorsanız söz konusu sayfayı getirmek için path parametresini kullanabilirsiniz. Bu örnek, http://sites.google.com/site/siteName/path/to/the/page konumunda bulunan sayfayı döndürür:

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

Bir üst sayfanın altındaki tüm girişleri alma

Bir sayfanın içerik giriş kimliğini biliyorsanız (ör. aşağıdaki örnekte "1234567890") tüm alt girişlerini (varsa) getirmek için parent parametresini kullanabilirsiniz:

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

Ek parametreler için Referans 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";

İçerik feed'ine bir HTTP POST gönderilerek yeni içerik (web sayfaları, liste sayfaları, dosya dolabı sayfaları, duyuru sayfaları vb.) oluşturulabilir:

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

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

Yeni öğeler / sayfalar oluşturma

Bu örnek, Site'nin en üst düzeyinin altında yeni bir webpage oluşturur, sayfa gövdesi için bazı XHTML'ler 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/sayfa oluşturma

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

Bu örnekte "Dosya Depolama" başlıklı yeni bir filecabinet sayfası oluşturulur, ancak <sites:pageName> öğesini belirterek sayfayı http://sites.google.com/site/siteName/files URL'si (http://sites.google.com/site/siteName/file-storage yerine) altında oluşturur.

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. <sites:pageName> (varsa). a-z, A-Z, 0-9, -, _ şartını karşılamalıdır.
  2. <atom:title>, pageName mevcut değilse boş olmamalıdır. Normalleştirmede, boşlukların kırpılıp "-" karakteri için daraltılması ve a-z, A-Z, 0-9, -, _ ile eşleşmeyen karakterleri kaldırmanız gerekir.

Alt sayfalar oluşturma

Bir üst sayfa altında alt sayfalar oluşturmak için girişte üst bağlantıyı ayarlamanız gerekir. Üst düğümün öz bağlantısına, bağlantının href özelliği denir.

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, kullanıcının içerik feed'inde bulunan ilk duyurular sayfasının altında yeni bir announcement oluşturur. Duyuru başlığı "Parti!!", içerik ise "Bu hafta sonu benim yerim" olarak ayarlandı.

Sayfa şablonları

Sayfa şablonları oluşturma

Sayfa şablonu oluşturma işlemi, yeni öğeler/sayfa oluşturma ve alt sayfalar oluşturma ile aynıdır.Aradaki fark, sırasıyla "http://schemas.google.com/g/2005#template" ve "template" olarak ayarlanmış category ile birlikte eklenmesidir.

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, bir sayfa şablonunun öz bağlantısına işaret eden rel='http://schemas.google.com/sites/2008#template' özelliğine sahip bir <link> ekleyerek şablondan yeni bir sayfa örnekleyebilirsiniz.

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

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: Girişinizde bir tane de dahil olmak üzere, <category> tanımlayan bir şablon yine de gereklidir. Ayrıca, <content> öğesi eklerseniz sunucunun bunu reddedeceğini de unutmayın.

Dosya yükleme

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

Ü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, bir üst sayfaya yüklenmelidir. Bu nedenle, yüklemeye çalıştığınız AttachmentEntry veya WebAttachmentEntry nesnesinde bir üst bağlantı ayarlarsınız. Daha fazla bilgi için Alt sayfalar oluşturma konusuna bakın.

Ekler yükleniyor

Bu örnek, kullanıcının içerik feed'inde bulunan ilk FileCabinetPageEntry öğesine bir PDF dosyası yükler. Ek, "Başlarken" başlığı ve (isteğe bağlı) bir açıklama olan "İK paketi" ile oluşturulur.

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 "term" özelliği klasörün adına ayarlanmış bir kategori ekleyin. Örneğin, uploadAttachment() alanına ş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. Esas olarak, dosya dolabı girişlerinize ekleyebileceğiniz web'deki diğer dosyaların bağlantılarıdır. Bu özellik, Google Sites kullanıcı arayüzündeki "URL ile dosya ekle" yükleme yöntemine benzer.

Not: Web ekleri yalnızca bir dosya dolabı sayfası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ı sırasıyla 'GoogleLogo' ve 'güzel renkler' olarak ayarlanır.

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ündeki meta veri (title, pageName vb.) ve sayfa içeriği, girişin update() yöntemi kullanılarak düzenlenebilir. Bu işlem, girişin edit bağlantısına bir HTTP PUT isteği gönderir.

Aşağıda, aşağıdaki değişikliklerle bir ListPageEntry güncelleme ö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üncellendi
  • Listenin ilk sütun başlığı "Sahip" olarak değiştirilir
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ı içerikleri güncelleniyor

AttachmentEntry için girişte MediaSource değerini belirleyip girişin updateMedia(boolean) yöntemini kullanarak içeriği de güncelleyebilirsiniz.

Bu örnekte, mevcut bir ekin içeriği güncellenecektir:

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üncellenen içeriği barındırır.

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

updateMedia() yöntemini kullanarak bir ekin meta verilerini ve içeriğini aynı çağrıda güncelleyebilirsiniz. Yalnızca dosya içeriğini, meta verileri veya ikisini birden güncelleyebiliyorsanız.

Bu örnekte ekin başlığı "Yeni Başlık" olarak değiştirilir, ekin açıklaması güncellenir ve dosya içeriği yeni bir .zip dosyasıyla değiştirilir. İstek yeni dosya içeriği barındırdığından AttachmentEntry updateMedia() 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 sayfayı veya öğeyi Google Sitesi'nden kaldırmak için öncelikle içerik girişini alın, ardından girişin delete() öğesini çağırın.

entry.delete();

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 bir 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 örnekte, kullanıcının içerik feed'inde bulunan ilk AttachmentEntry öğesi "/path/to/save/file/" dizinine indirilir:

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

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

EKL feed'indeki her EKL girişi; bir kullanıcı, kullanıcı grubu, alan ya da varsayılan erişim (herkese açık bir site) olmak üzere belirli bir varlığın erişim rolünü temsil eder. Girişler, yalnızca açık erişimi olan varlıklar için gösterilir. Google Sites kullanıcı arayüzünün paylaşım ekranındaki "Erişimi Olan Kişiler" panelinde her e-posta adresi için bir giriş gösterilir. Bu nedenle, bir siteye dolaylı erişimi olsa bile alan yöneticileri gösterilmez.

Roller

Rol öğesi, bir varlığın 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şimidir).
  • writer — Ortak çalışan (okuma/yazma erişimine eşdeğerdir).
  • sahip - genellikle site yöneticisidir (okuma/yazma erişimine eşdeğerdir).

Kapsamlar

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

  • kullanıcı: Bir e-posta adresi değeridir (ör. "kullanici@gmail.com").
  • group: Bir Google Grubu e-posta adresi (ör. "grup@alanadi.com").
  • alan — bir G Suite alan adıdır, ör. "alanadi.com".
  • default: "default" türünde yalnızca bir olası kapsam vardır (ör.<gAcl:scope type="default">). Bu kapsam, herhangi bir kullanıcının herkese açık bir sitede varsayılan olarak sahip olduğu erişimi kontrol eder.

Not: Alanların gAcl:role değeri "sahip" olarak ayarlanamaz. Yalnızca okuyucu veya yazar olabilirler.

EKL feed'i alınıyor

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

Aşağıdaki örnek, belirli bir site için EKL feed'ini getirir ve her AclEntry öğesinin izinlerini yazdırır:

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 özet akışının bağlantısını içerir. Örneğin, bu snippet bir SiteEntry öğesinin EKL 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 EKL'lerin paylaşılması, yalnızca alan bu tür izinlere izin verecek şekilde yapılandırılmışsa (ör.G Suite alanları için alan dışında paylaşım etkinse vb.) mümkün olabilir.

API'yi kullanarak bir Google Sitesi paylaşmak için istemcinizin yeni bir AclEntry oluşturup bunu sunucuya POST kullanması gerekir.

"user@example.com" adresinin siteye reader olarak eklendiği bir örneği burada bulabilirsiniz:

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 ve AclRoles değerleri için EKL feed'ine genel bakış bölümüne bakın.

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ında paylaşabilirsiniz.

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ı için ve yalnızca sitenin barındırıldığı alan için desteklenir. Örneğin, http://sites.google.com/a/alan1.com/siteA, sitenin tamamını alan1.com ile paylaşabilir, alan2.com ile paylaşamaz. G Suite alanında barındırılmayan siteler (ör. http://sites.google.com/site/siteB) alan davet edemez.

Paylaşım izinlerini değiştirme

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

Bu örnek, önceki aclEntry örneğimizi Site paylaşma bölümünden değiştirir ve "kullanici@example.com" adresini writer (ortak çalışan) olarak günceller:

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

Bir feed'i veya girişi tekrar alma

Daha önce aldığınız bir feed'i veya girişi almak istiyorsanız sunucuya yalnızca listeyi veya girişi, yalnızca son aldığınız zamandan bu yana değiştiyse göndermesini söyleyerek verimliliği artırabilirsiniz.

Bu tür bir koşullu geri alma işlemi yapmak amacıyla 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 sağlar. Bir girişin etiketlerine entry.getEtag() adresinden erişebilirsiniz.

Bu örnekte, içerik web sayfası girişi için koşullu bir alma işlemi gerçekleştirilir:

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 ile aynı ETag'e sahip olup olmadığını kontrol eder. ETag'ler eşleşirse öğe değişmemiştir ve sunucu bir HTTP 304 NotModifiedException istisnası döndürür.

ETag'ler eşleşmezse öğe, son isteğinizden sonra değiştirilmiş ve sunucu öğeyi döndürmüş demektir.

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

Başa dön