Java Dil Kılavuzu

Önemli: Bu doküman 2012'den önce yazılmıştır. Bu dokümanda açıklanan kimlik doğrulama seçenekleri (OAuth 1.0, AuthSub ve ClientLogin), 20 Nisan 2012 itibarıyla resmi olarak kullanımdan kaldırıldı ve artık kullanılamıyor. En kısa sürede OAuth 2.0'a geçmenizi öneririz.

Google Sites Data API, istemci uygulamalarının Google Sites'teki 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ılavuzda, Sites Data API'nin özellikleri hakkında bilgi vermenin yanı sıra Java istemci kitaplığını kullanarak API ile etkileşime geçmeye yönelik örnekler de sunulmaktadır. İstemci kitaplığını oluşturma konusunda yardım almak için Google Data Java İstemci Kitaplığı'nı Kullanmaya Başlama bölümüne bakın. Java istemci kitaplığının klasik Sites API ile etkileşime geçmek için kullandığı temel protokol hakkında daha fazla bilgi edinmek istiyorsanız lütfen protokol kılavuzuna bakın.

Kitle

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

Başlarken

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ığı yükleme

İstemci kitaplığını ayarlama ve yüklemeyle ilgili yardım için Google Data Java İstemci Kitaplığını Kullanmaya Başlama başlıklı makaleyi inceleyin. Eclipse kullanıyorsanız bu makalede, Google Data APIs Eclipse eklentisini kullanarak projenizi nasıl ayarlayacağınız da açıklanmaktadır. Başlamak için şunları yapmanız gerekir:

  1. Java 1.5 veya sonraki bir sürümü yükleyin
  2. İstemci kitaplığını indirin (gdata-src.java.zip'nin en son sürümü)
  3. Bağımlılıkların listesini indirin
  4. Örnek uygulamaları (gdata-samples.java.zip'nin en son sürümü) indirin.

.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çindir.
  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 emin olun.

Örnek uygulamayı çalıştırma

Tam olarak çalışan bir örnek uygulama, gdata-samples.java.zip indirmesinin /java/sample/sites alt klasöründe yer alı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ıldığını gösteren çeşitli işlemleri gerçekleştirmesine olanak tanır.

Sana Özel özelliğini çalıştırmak için java/sample/util/lib/sample-util.jar özelliğini 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ı makaleyi inceleyin.

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'sine 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 için kimlik doğrulama

Java istemci kitaplığı, herkese açık veya özel feed'lerle ç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 herkese açık feed'lere erişim sağlar. Örneğin, herkese açık bir sitenin içerik feed'ini okuyabilir ancak bu feed'de güncelleme yapamazsınız. Bu işlem için kimliği doğrulanmış bir istemci gerekir. Bu işlem ClientLogin kullanıcı adı/şifre doğrulaması, AuthSub veya OAuth aracılığıyla yapılabilir.

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 SSL üzerinden feed isteğinde bulunmak için https://sites.google.com/feeds/ kapsamını belirttiğinizden emin olun. Ayrıca, API, G Suite alanları için yönetici kontrol panelindeki "SSL Gerektir" ayarına uyar. client.useSsl(); işlevini çağırarak tüm API isteklerinin HTTPS üzerinden yapılmasını zorunlu kılabilirsiniz.

Web uygulamaları için AuthSub

Web Uygulamaları için AuthSub Kimlik Doğrulaması, kullanıcılarının Google Hesaplarıyla kimlik doğrulaması yapması gereken 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 kez ziyaret ettiğinde kimliğini doğrulaması gerekir. Geliştiriciler genellikle kullanıcının kimliğini doğrulamak ve dokümanları için erişim isteğinde bulunmak üzere kullanıcıyı AuthSub onay sayfasına yönlendiren bir metin ve bağlantı yazdırır. Google Data Java istemci kitaplığı, bu URL'yi oluşturmak için bir işlev sağlar. 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 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önlendireceği 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 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 geçme

AuthSub'u Google Data API istemci kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.

Oturum jetonuyla ilgili bilgi alma

AuthSub'u Google Data API istemci kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.

Oturum jetonunu iptal etme

AuthSub'u Google Data API istemci 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, tüm veri isteklerinin dijital olarak imzalanması ve alanınızın kaydedilmesi gerektiği açısından AuthSub'un güvenli ve kayıtlı modunu kullanmaya benzer.

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

İstek jetonu getirme

Google Data API istemci 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 geçme

Google Data API istemci kitaplıklarıyla OAuth'ı kullanma başlıklı makaleyi inceleyin.

Yüklü/mobil uygulamalar için ClientLogin

ClientLogin, kullanıcılarının Google Hesapları için kimliğini doğrulaması gereken yüklü 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 referans verilir.

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

ClientLogin'i kullanmak için GoogleService'dan devralınan SitesService nesnesinin setUserCredentials() yöntemini çağırın. İstemcinizin istekte bulunduğu 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 veritabanınızda depolayın. Uygulamanızı her çalıştırdığınızda 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 ClientLogin'i kullanma hakkında daha fazla bilgi için ClientLogin'i Google Data API istemci kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.

Başa dön

Site Feed'i

Site feed'i, kullanıcının sahibi 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ı için bir sitenin tamamını oluşturmak ve/veya kopyalamak amacıyla da kullanılabilir.

Listeleme siteleri

Site feed'ini sorgulamak için site feed'i URL'sine bir 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 başka alıcılar da kullanılabilir.

Yeni site oluşturma

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

Yeni siteler, yeni bir SiteEntry oluşturarak ve site feed'inde istemcinin insert() yöntemini çağırarak hazırlanabilir.

Bu örnekte, "slate" temasıyla (isteğe bağlı ayar) yepyeni bir site oluşturulur ve site adı (zorunlu) ile açıklaması (isteğe bağlı) sağlanır:

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 durumda 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 doldurulmuş bir SiteEntry nesnesi ile yanıt verir: sitenin bağlantısı, sitenin acl feed'inin bağlantısı, 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. Tek fark, yeni SiteEntry öğenize kopyalanacak sitenin kendi bağlantısını içeren bir bağlantı ayarlamanız gerektiğidir. Yeni site oluşturma bölümünde oluşturulan sitenin kopyalanmasına dair 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ının sahip olduğu siteler ve site şablonları kopyalanabilir.
  • Site şablonları da kopyalanabilir. Google Sites ayarları sayfasında "Bu siteyi şablon olarak yayınla" ayarı işaretliyse site şablondur.
  • 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, sitenin temasını, kategori etiketini veya özetini değiştirmek için önce söz konusu siteyi içeren SiteEntry sitesini getirmeniz, bir veya daha fazla özelliği değiştirmeniz ve ardından SiteEntry için update() yöntemini çağırmanız gerekir. Ş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 Sites sitesiyle eşlemelerine 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 için Yardım Merkezi makalemizi inceleyin.

Bir sitenin web adresi eşlemelerini getirme

Bir sitenin web adresi eşlemelerini döndürmek için with-mappings=true parametresini kullanarak site girişini/feed'ini alın:

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 http://sites.google.com/site/myOtherTestSite sitesini gösteren üç webAddressMapping vardır.

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 döndürülmez (GET) veya bir girişteki eşlemeleri güncellerken/kaldırırken (PUT) dikkate alınmaz.

Eşleme eklemek, güncellemek veya silmek için yeni siteler oluştururken ya da bir sitenin meta verilerini güncellerken bu tür bir bağlantıyı belirtmeniz, değiştirmeniz veya 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 veya G Suite tarafından barındırılan bir site söz konusu olduğunda 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şturulurken/kopyalanırken de belirtilebileceğini unutmayın.

Başa dön

Etkinlik Feed'i

Etkinlik feed'ini getirerek bir sitenin son etkinliğini (değişiklikleri) 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 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 AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulaması yapmalıdır. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.

Başa dön

Düzeltme Feed'i

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 örnekte, içerik feed'i sorgulanır ve ardından ilk içerik girişinin 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şmek için sitenin iş ortağı 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, 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 getirilmesi ö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 nesnesi olur. Her contentFeed girişi, kullanıcının Sitesindeki farklı bir sayfayı veya öğeyi temsil eder. ContentFeed, tümü BaseContentEntry kaynağından devralınan farklı nesne türleri içerir: 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: Sitenin paylaşım izinlerine bağlı olarak bu feed, kimlik doğrulama gerektirebilir veya gerektirmeyebilir. Site herkese açık değilse istemcinizin kimlik doğrulaması için AuthSub, OAuth veya ClientLogin jetonu kullanması gerekir. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.

İçerik feed'i sorgu örnekleri

Standart Google Data API sorgu parametrelerinden bazılarını ve klasik Sites API'ye özgü parametreleri kullanarak içerik feed'inde arama yapabilirsiniz. Daha ayrıntılı bilgi ve desteklenen parametrelerin tam listesi için Referans Kılavuzu'na bakın.

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ü almak için kind parametresini kullanın. Bu örnekte yalnızca attachment giriş döndürülü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 örnekte filecabinet ve listpage girişleri döndürülü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());
}

Sayfayı yola göre alma

Google sitesindeki bir sayfanın göreli yolunu biliyorsanız söz konusu sayfayı almak için path parametresini kullanabilirsiniz. Bu örnek, http://sites.google.com/site/siteName/path/to/the/page adresinde 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());
}

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

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

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

Diğer 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çerikler (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 Başvuru Kılavuzu'ndaki kind parametresine bakın.

Yeni öğe/sayfa oluşturma

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

Varsayılan olarak, önceki örnek http://sites.google.com/site/siteName/new-webpage-title URL'si altında oluşturulur ve "Yeni Web Sayfası Başlığı" sayfa başlığına sahiptir. 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 "Dosya Depolama" başlığıyla yeni bir filecabinet sayfası oluşturulur, ancak <sites:pageName> öğesini belirterek sayfayı http://sites.google.com/site/siteName/files (http://sites.google.com/site/siteName/file-storage yerine) URL'si 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. Varsa <sites:pageName>. a-z, A-Z, 0-9, -, _ koşulunu karşılamalıdır.
  2. <atom:title>, pageName yoksa boş olmamalıdır. Normalleştirme, boşlukları "-" olacak şekilde kırpıp daraltmak ve a-z, A-Z, 0-9, -, _ ile eşleşmeyen karakterleri kaldırmaktır.

Alt sayfa 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, üst öğenin kendi bağlantısına yönelik href özelliği.

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 örnekte, kullanıcının içerik feed'inde bulunan ilk duyurular sayfası altında yeni bir announcement oluşturulur. Duyuru başlığı "Parti!!", içeriği ise "Bu hafta sonu evimde" olarak ayarlanır.

Sayfa şablonları

Sayfa şablonları oluşturma

Sayfa şablonu oluşturma işlemi, yeni öğe/sayfa oluşturma ve alt sayfa oluşturma ile aynıdır. Aradaki fark, terim ve etiketi sırasıyla "http://schemas.google.com/g/2005#template" ve "template" olarak ayarlanmış category öğesinin 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 kendi bağlantısına işaret eden rel='http://schemas.google.com/sites/2008#template' içeren bir <link> ekleyerek şablondan yeni bir sayfa oluşturabilirsiniz.

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: Bir şablonda <category> tanımlanmış olsa bile girişinize bir <category> eklemeniz gerekir. Ayrıca, bir <content> öğesi eklerseniz sunucunun bunu reddedeceğini unutmayın.

Dosya yükleme

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

Bir ebeveyne 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, yüklemeye çalıştığınız AttachmentEntry veya WebAttachmentEntry nesnesinde bir üst bağlantı ayarladınız. Daha fazla bilgi için Alt sayfa oluşturma başlıklı makaleyi inceleyin.

Ekler yükleniyor

Bu örnekte, kullanıcının içerik feed'inde bulunan ilk FileCabinetPageEntry dosyaya bir PDF dosyası yükleniyor. Ek, "Başlangıç" başlığı ve (isteğe bağlı) "İK paketi" açıklamasıyla 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.

Bir klasöre ek yükleme

FileCabinetPageEntry içinde mevcut bir klasöre ek yüklemek için "term" özelliği klasörün adına ayarlanmış bir kategori ekleyin. Örneğin, uploadAttachment() dosyası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. Kısacası, 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ının altında oluşturulabilir. Diğer sayfa türlerine yüklenemezler.

Bu örnekte, kullanıcının içerik feed'inde bulunan ilk FileCabinetPageEntry altında bir WebAttachmentEntry oluşturulur. Başlığı ve (isteğe bağlı) açıklaması sırasıyla "GoogleLogo" ve "güzel renkler" olarak ayarlanmıştı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 veriler (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, bir ListPageEntry öğesinin aşağıdaki değişikliklerle güncellenmesine ilişkin bir örnek verilmiştir:

  • Başlık "Güncellenen Başlık" olarak değiştirilir.
  • Sayfanın HTML içeriği "<p>Güncellenen HTML İçeriği</p>' olarak güncellenir.
  • 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 dosya içeriklerini güncelleme

AttachmentEntry için girişin MediaSource değerini ayarlayıp girişin updateMedia(boolean) yöntemini kullanarak da içeriği güncelleyebilirsiniz.

Bu örnekte, mevcut bir eki güncelleyeceğiz:

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çerir.

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üncelleyip güncelleyemeyeceğinizi belirtin.

Bu örnekte, ekteki başlığı "Yeni Başlık" olarak değiştiriyor, açıklamayı güncelliyor ve dosya içeriğini yeni bir .zip dosyasıyla değiştiriyoruz. İ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 sayfayı veya öğeyi Google sitesinden kaldırmak için önce içerik girişini alın, ardından girişin delete() işlevini çağırın.

entry.delete();

Ayrıca, girişin edit bağlantısını ve ETag değerini ileterek hizmet sınıfının delete() yöntemini 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 indirme

Bir AttachmentEntry indirmek için girişin content src bağlantısına bir 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

Paylaşım izinlerine (ACL'ler) genel bakış

ACL feed'indeki her ACL girişi, belirli bir öğenin (kullanıcı, kullanıcı grubu, alan veya varsayılan erişim (herkese açık site)) erişim rolünü temsil eder. Girişler yalnızca açıkça erişime sahip olan varlıklar için gösterilir. Google Sites 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şimleri olsa bile alan yöneticileri gösterilmez.

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).
  • yazar: Ortak çalışan (okuma/yazma erişimine eşdeğer).
  • owner — genellikle site yöneticisi (okuma/yazma erişimine eşdeğer)

Kapsamlar

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

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

Not: Alan adları "sahip" erişimine ayarlanmış bir gAcl:role değerine sahip olamaz. Yalnızca okuyucu veya yazar olabilirler.

EKL feed'ini alma

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 sitenin ACL 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, ACL feed'inin bağlantısını içerir. Örneğin, bu snippet bir SiteEntry öğesinin acl 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 ACL'leri yalnızca alan bu tür izinlere izin verecek şekilde yapılandırılmışsa (ör. G Suite alanları için alanın dışında paylaşım etkinleştirilmişse) kullanılabilir.

API'yi kullanarak bir Google Sites sitesini paylaşmak için istemcinizin yeni bir AclEntry oluşturması ve POST sunucuya göndermesi gerekir.

"user@example.com" adresinin siteye reader olarak eklendiği bir örneği aşağıda 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ı genelinde paylaşabilirsiniz.

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ı ve yalnızca sitenin barındırıldığı alan için desteklenir. Örneğin, http://sites.google.com/a/alanim1.com/siteA, sitenin tamamını yalnızca 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 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 istediğiniz şekilde değiştirin ve ardından AclEntry öğesinin update() yöntemini çağırarak sunucuda ACL'yi değiştirin.

Bu örnekte, Site paylaşma bölümündeki önceki aclEntry örneğimizi "kullanıcı@example.com"u writer (ortak çalışan) olarak güncelleyerek değiştiriyoruz:

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

ETags hakkında daha fazla bilgi için Google Veri API'leri referans kılavuzuna bakın.

Paylaşım izinlerini kaldırma

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

E-etiketler hakkında daha fazla bilgi için Google Veri API'leri referans 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, listeyi veya girişi yalnızca son aldığınızdan beri değiştiyse göndermesini söyleyerek verimliliği artırabilirsiniz.

Bu tür koşullu getirme işlemini yapmak için hem getFeed() hem de getEntry() yöntemleri, If-Modified-Since başlığı için bir ETag değeri veya DateTime nesnesi kabul eden ek bir bağımsız değişken sağlar. Bir girişin etag'ine entry.getEtag() adresinden erişebilirsiniz.

Bu örnekte, içerik web sayfası girişi için koşullu getirme işlemi yapılmaktadı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 ile aynı ETag'a sahip olup olmadığını kontrol eder. ETags eşleşirse öğe değişmemiştir ve sunucu HTTP 304 döndürür veya NotModifiedException istisnası atılır.

ETags eşleşmezse öğe, son isteğinizden bu yana değiştirilmiş demektir ve sunucu öğeyi döndürür.

E-etiketler hakkında daha fazla bilgi için Google Veri API'leri referans kılavuzuna bakın.

Başa dön