Önemli: Bu belge 2012'den önce yazılmıştır. Bu belgede açıklanan kimlik doğrulama seçeneklerinin (OAuth 1.0, AuthSub ve ClientLogin) desteği 20 Nisan 2012'de resmi olarak sonlandı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 içindeki içeriğe erişmesine, bu içeriği yayınlamasına ve değiştirmesine olanak tanır. İstemci uygulamanız, son etkinliklerin listesini isteyebilir, düzeltme geçmişini getirebilir ve ekleri indirebilir.
Bu kılavuz, Sites Data API'nin özellikleri hakkında bazı bilgiler vermenin yanı sıra Java istemci kitaplığını kullanarak API ile etkileşim kurma örnekleri de sunar. İstemci kitaplığını ayarlama konusunda yardım için Google Data Java İstemci Kitaplığı'nı Kullanmaya Başlama başlıklı makaleyi inceleyin. Java istemci kitaplığının klasik Sites API ile etkileşim kurmak için kullandığı temel protokol hakkında daha fazla bilgi edinmek istiyorsanız lütfen protokol kılavuzuna bakın.
Kitle
Bu belge, Google Data Java İstemci Kitaplığı'nı kullanarak Google Siteler ile etkileşim kuran istemci uygulamaları yazmak isteyen geliştiriciler içindir.
Başlarken
Google Sites, kimlik doğrulama için Google Hesapları veya G Suite hesaplarını kullanır. Hesabınız varsa başka bir şey yapmanız gerekmez. Aksi takdirde yeni bir hesap oluşturabilirsiniz.
Kitaplığı yükleme
İstemci kitaplığını ayarlama ve yükleme konusunda 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 Veri API'leri Eclipse eklentisi ile projenizi nasıl ayarlayacağınız da açıklanmaktadır. Başlamak için gerekenler:
- Java 1.5 veya daha yeni bir sürümü yükleyin.
- İstemci kitaplığını indirin (
gdata-src.java.zip'ın en son sürümü) - Bağımlılıklar listesini indirin.
- Örnek uygulamaları (
gdata-samples.java.zip'ın en yeni sürümü) indirin.
.jar dosyalarını yükledikten sonra projenize aşağıdakileri eklemeniz gerekir:
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.java/lib/gdata-core-1.0.jarjava/lib/gdata-client-1.0.jarjava/lib/gdata-spreadsheet-3.0.jar(liste sayfaları / liste öğeleriyle çalışıyorsanız)
Ayrıca, bağımlılık JAR'larını (gdata-media-1.0.jar, mail.jar ve google-collect....jar) eklediğinizden emin olun.
Örnek uygulamayı çalıştırma
Tamamen çalışan bir örnek uygulama, gdata-samples.java.zip indirilenler klasörünün /java/sample/sites alt dizininde bulunur.
Kaynak, Kaynak sekmesinden erişilebilen SVN kod 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 bir dizi işlem gerçekleştirmesine 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'leriyle Kullanma başlıklı makaleye bakın.
Uygulamanızın ihtiyaçlarına bağlı olarak çeşitli içe aktarma işlemleri yapmanız gerekir. Aşağıdaki içe aktarmalarla başlamanızı öneririz:
import com.google.gdata.client.*; import com.google.gdata.client.sites.*; import com.google.gdata.data.*; import com.google.gdata.data.acl.*; import com.google.gdata.data.media.*; import com.google.gdata.data.sites.*; import com.google.gdata.data.spreadsheet.*; // If working with listpages / listitems import com.google.gdata.util.*;
Ardından, klasik Sites API'ye istemci bağlantısını temsil eden bir SitesService nesnesi 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 gizli 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 okuyabilirsiniz ancak kimliği doğrulanmış bir istemci gerektiren güncellemeler yapamazsınız. Bu işlem; ClientLogin kullanıcı adı/şifre kimlik 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ış başlıklı makaleyi inceleyin.
İpucu: API, SSL'yi (HTTPS) destekler. AuthSub/OAuth kullanıyorsanız SSL üzerinden feed istemek için https://sites.google.com/feeds/ kapsamını belirttiğinizden emin olun. Ayrıca, G Suite alanları için yönetim kontrol panelindeki "SSL zorunlu kıl" ayarının API tarafından dikkate alındığını da unutmayın. client.useSsl(); işlevini çağırarak tüm API isteklerinin HTTPS üzerinden yapılmasını zorunlu kılabilirsiniz.
Web uygulamaları için AuthSub
Kullanıcılarının Google Hesapları'nda kimliğini doğrulaması gereken istemci uygulamaları Web Uygulamaları İçin AuthSub Kimlik Doğrulaması'nı kullanmalı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 gereklidir.
AuthSub'ı web uygulamanıza dahil etme talimatlarını görüntüleme
Tek kullanımlık jeton isteğinde bulunma
Kullanıcı uygulamanızı ilk kez ziyaret ettiğinde kimliğini doğrulaması gerekir. Genellikle geliştiriciler, kullanıcıyı kimlik doğrulamak ve dokümanlarına erişim isteğinde bulunmak için AuthSub onay sayfasına yönlendiren bir bağlantı ve metin 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'te 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'dir.
http://www.example.com/welcome.jspYukarıdaki örnekte - 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 oturum jetonuyla değiştirilip değiştirilmeyeceğini belirten ikinci bir Boole değeri;
trueyukarıdaki örnekte
Oturum jetonuna yükseltme
Google Data API İstemci Kitaplıkları ile AuthSub'ı Kullanma başlıklı makaleyi inceleyin.
Oturum jetonu hakkında bilgi alma
Google Data API İstemci Kitaplıkları ile AuthSub'ı Kullanma başlıklı makaleyi inceleyin.
Oturum jetonunu iptal etme
Google Data API İstemci Kitaplıkları ile AuthSub'ı Kullanma başlıklı makaleyi inceleyin.
Web veya yüklü/mobil uygulamalar için OAuth
OAuth, AuthSub'a alternatif olarak kullanılabilir ve web uygulamaları için tasarlanmıştır. OAuth, AuthSub'ın güvenli ve kayıtlı modunu kullanmaya benzer. Tüm veri isteklerinin dijital olarak imzalanması ve alanınızı kaydetmeniz gerekir.
OAuth'u yüklü uygulamanıza dahil etme talimatlarını görüntüleme
İstek jetonu getirme
Google Data API İstemci Kitaplıkları ile OAuth Kullanma başlıklı makaleyi inceleyin.
İstek jetonunu yetkilendirme
Google Data API İstemci Kitaplıkları ile OAuth Kullanma başlıklı makaleyi inceleyin.
Erişim jetonuna yükseltme
Google Data API İstemci Kitaplıkları ile OAuth Kullanma başlıklı makaleyi inceleyin.
Yüklü/mobil uygulamalar için ClientLogin
ClientLogin, kullanıcılarının Google Hesapları'nda kimliğini doğrulaması gereken yüklü veya mobil uygulamalar tarafından kullanılmalıdır. Uygulamanız ilk çalıştırıldığında kullanıcıdan kullanıcı adı/şifre girmesini ister. Sonraki isteklerde kimlik doğrulama jetonuna başvurulur.
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 adına 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ıyı ilk kez başarıyla doğruladıktan sonra, kimlik doğrulama jetonunu daha sonra kullanmak üzere veritabanınızda saklayın. Uygulamanız her çalıştırıldığında kullanıcıdan şifresini girme isteğinde bulunmanız gerekmez. Daha fazla bilgi için Yetkilendirme jetonunu geri çağırma başlıklı makaleyi inceleyin.
Java uygulamalarınızda ClientLogin'i kullanma hakkında daha fazla bilgi için Using ClientLogin with the Google Data API Client Libraries (Google Veri API'si İstemci Kitaplıkları ile ClientLogin'i Kullanma) başlıklı makaleyi inceleyin.
Site Feed'i
Site feed'i, kullanıcının sahibi olduğu veya görüntüleme izni olan Google Sites'ları 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.
Listeleme siteleri
Site feed'ini sorgulamak için site feed'i URL'sine bir HTTP GET isteği 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 özelliklere erişmek için başka alıcılar da kullanılabilir.
Yeni siteler oluşturma
Not: Bu özellik yalnızca G Suite alanlarında kullanılabilir.
Yeni siteler, yeni bir SiteEntry oluşturularak ve site feed'inde istemcinin insert() yöntemi çağrılarak sağlanabilir.
Bu örnekte, "slate" temasıyla (isteğe bağlı ayar) yepyeni bir site oluşturuluyor ve site adı (zorunlu) ile açıklama (isteğe bağlı) sağlanıyor:
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ı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 doldurulmuş bir SiteEntry nesnesiyle yanıt verir: siteye giden bir bağlantı, sitenin ACL feed'ine giden 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, yeni site oluşturmaya benzer. Tek fark, kopyalanacak sitenin kendi bağlantısını içeren yeni SiteEntry öğenizde bir bağlantı ayarlamanız gerekmesidir.
Yeni site oluşturma bölümünde oluşturulan siteyi kopyalama örneğini aşağıda bulabilirsiniz:
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 Siteler ayarları sayfasında "Bu siteyi şablon olarak yayınla" ayarı işaretliyse site şablondur.
- Kaynak sitede sahibi olarak listeleniyorsanız başka bir alandaki siteyi kopyalayabilirsiniz.
Bir sitenin meta verilerini güncelleme
Bir siteyi yeniden adlandırmak, temasını, kategori etiketini veya özetini değiştirmek için önce söz konusu siteyi içeren SiteEntry'yı getirmeniz, bir veya daha fazla özelliği değiştirmeniz ve ardından SiteEntry'nın update() yöntemini çağırmanız gerekir.
Bu örnekte, önceki sitenin teması değiştiriliyor ve site yeniden adlandırılı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 ile eşlemesini sağlar. Ö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, bir 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 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='webAddressMapping' ile link olarak gösterilir. Örneğin, yukarıdaki örnekte siteye yönlendiren üç webAddressMapping vardır
http://sites.google.com/site/myOtherTestSite.
Web adresi eşlemelerini değiştirme
Not: Web adresi eşlemeleriyle çalışırken tüm GET/POST/PUT işlemleri with-mappings=true parametresini belirtmelidir. Parametre yoksa site girişlerinde (GET) webAddressMapping döndürülmez veya bir girişteki eşlemeler güncellenirken/kaldırılırken (PUT) dikkate alınmaz.
Bir 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 olmanız veya G Suite'te barındırılan bir site söz konusuysa alan yöneticisi olmanız gerekir.
Örneğin, aşağıdaki istek http://www.mysitemapping.com eşlemesini http://www.my-new-sitemapping.com olarak günceller ve bağlantıyı girişin dışında bırakarak http://www.mysitemapping2.com öğesini kaldırır:
SiteEntry entry = client.getEntry(new URL("https://sites.google.com/feeds/site/site/siteName?with-mappings=true"), SiteEntry.class); // Modify mappings (remove all mappings, add some of them again, add modified mappings) entry.removeLinks(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML); entry.addLink(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML, "http://www.my-new-sitemapping.com"); // Update the entry with the mappings. entry.update();
Web adresi eşlemelerinin, site oluşturma/kopyalama sırasında da belirtilebileceğini unutmayın.
Etkinlik Feed'i
Etkinlik feed'ini getirerek bir sitenin son etkinliğini (değişikliklerini) getirebilirsiniz. Etkinlik feed'indeki her giriş, Sitede yapılan bir değişiklikle ilgili bilgileri içerir.
Etkinlik feed'ini sorgulamak için etkinlik feed'i URL'sine bir HTTP GET isteği 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şmek için sitenin sahibi veya ortak çalışanı 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.
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 isteği gönderin:
https://sites.google.com/feeds/revision/site/siteName/CONTENT_ENTRY_ID
Bu örnekte, önce içerik feed'i sorgulanır, ardından 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şmek için sitenin sahibi veya ortak çalışanı 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.
İçerik feed'i
İçerik feed'ini alma
İçerik feed'inde bir sitenin en son içeriği listelenir. İçerik feed'i URL'sine bir HTTP GET gönderilerek erişilebilir:
https://sites.google.com/feeds/content/site/siteName
| Feed parametresi | Açıklama |
|---|---|
site | "site" veya G Suite'te barındırılan alanınızın alan adı (ör. example.com). |
siteName | Sitenizin web alanı adı; sitenin URL'sinde bulunur (ör. mySite). |
İçerik feed'ini getirme örneği:
public String buildContentFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) String siteName = "mySite"; return "https://sites.google.com/feeds/content/" + domain + "/" + siteName + "/"; } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class);
Sonuçta elde edilen contentFeed, sunucudan gelen yanıtı içeren bir ContentFeed nesnesidir. contentFeed içindeki her giriş, kullanıcının sitesindeki farklı bir sayfayı veya öğeyi temsil eder. ContentFeed, BaseContentEntry'ten devralınan farklı türlerde nesneler içerir: ListItemEntry, ListPageEntry, AttachmentEntry, WebAttachmentEntry,
FileCabinetPageEntry, AnnouncementsPageEntry, AnnouncementEntry, WebPageEntry, CommentEntry.
Aşağıda, farklı giriş türlerinin ContentFeed içinde listelendiği bir örnek verilmiştir.
Her giriş türü farklı özellikler içerir ancak bunların tümü burada yazılmaz.
public String getContentBlob(BaseContentEntry<?> entry) { return ((XhtmlTextConstruct) entry.getTextContent().getContent()).getXhtml().getBlob(); } // Extracts an entry's numeric ID. private String getEntryId(String selfLink) { return selfLink.substring(selfLink.lastIndexOf("/") + 1); } public void printContentEntries(ContentFeed contentFeed) { System.out.println("Listing all WebPageEntry:"); for (WebPageEntry entry : contentFeed.getEntries(WebPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" author: " + entry.getAuthors().get(0).getEmail()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all ListPageEntry:"); for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); for (Column col : entry.getData().getColumns()) { System.out.print(" [" + col.getIndex() + "] " + col.getName() + "\t"); } } for (ListItemEntry entry : contentFeed.getEntries(ListItemEntry.class)) { for (Field field : entry.getFields()) { System.out.print(" [" + field.getIndex() + "] " + field.getValue() + "\t"); } System.out.println("\n"); } System.out.println("Listing all FileCabinetPageEntry:"); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all CommentEntry:"); for (CommentEntry entry : contentFeed.getEntries(CommentEntry.class)) { System.out.println(" in-reply-to: " + entry.getInReplyTo().toString()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementsPageEntry:"); for (AnnouncementsPageEntry entry : contentFeed.getEntries(AnnouncementsPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementEntry:"); for (AnnouncementEntry entry : contentFeed.getEntries(AnnouncementEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" draft?: " + entry.isDraft()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AttachmentEntry:"); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" revision: " + entry.getRevision().getValue()); MediaContent content = (MediaContent) entry.getContent(); System.out.println(" src: " + content.getUri()); System.out.println(" content type: " + content.getMimeType().getMediaType()); } System.out.println("Listing all WebAttachmentEntry:"); for (WebAttachmentEntry entry : contentFeed.getEntries(WebAttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" src: " + ((MediaContent) entry.getContent()).getUri()); } }
Not: Bu feed, sitenin paylaşım izinlerine bağlı olarak kimlik doğrulama gerektirebilir veya gerektirmeyebilir. Site herkese açık değilse istemciniz AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulaması yapmalıdır. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.
İçerik feed'i sorgu örnekleri
Standart Google Data API sorgu parametrelerinin ve klasik Sites API'ye özgü olanların bir kısmını 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 örneklerde, İçerik Feed'ini Alma bölümündeki 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 öğ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()); }
Bir sayfayı yola göre alma
Google Sites'taki bir sayfanın göreli yolunu biliyorsanız bu sayfayı getirmek 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()); }
Bir ü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") 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.
İçerik Oluşturma
Not: Bir site için içerik oluşturmadan önce sitenizi istemcide ayarladığınızdan emin olun.client.site = "siteName";
İçerik feed'ine bir HTTP POST göndererek yeni içerik (web sayfaları, liste sayfaları, dosya dolabı sayfaları, duyuru sayfaları vb.) oluşturulabilir:
https://sites.google.com/feeds/content/site/siteName
Desteklenen düğüm türlerinin listesi için Referans Kılavuzu'ndaki kind parametresine bakın.
Yeni öğe / sayfa oluşturma
Bu örnek, sitenin üst düzeyinde yeni bir webpage oluşturur, sayfa gövdesi için bazı XHTML'ler içerir ve başlık adı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 öğe/sayfa 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 sahip olur. Yani, URL için <atom:title>, 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ığına sahip yeni bir filecabinet sayfası oluşturuluyor ancak <sites:pageName> öğesi belirtilerek sayfa http://sites.google.com/site/siteName/file-storage yerine http://sites.google.com/site/siteName/files URL'si altında oluşturuluyor.
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ırırken aşağıdaki öncelik kurallarını kullanır:
- Varsa
<sites:pageName>.a-z, A-Z, 0-9, -, _koşulunu karşılamalıdır. <atom:title>, pageName mevcut değilse boş olmamalıdır. Normalleştirme, boşlukları kırpıp "-" ile daraltmak vea-z, A-Z, 0-9, -, _ile eşleşmeyen karakterleri kaldırmaktır.
Alt sayfalar oluşturma
Bir üst sayfanın altında alt sayfalar (çocuklar) oluşturmak için girişte üst bağlantıyı ayarlamanız gerekir. Bağlantının href özelliği, üst düğümün kendi bağlantısına.
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 evimde" olarak ayarlanmış.
Sayfa şablonları
Sayfa şablonları oluşturma
Sayfa şablonu oluşturma süreci, yeni öğeler/sayfalar oluşturma ve alt sayfalar oluşturma ile aynıdır.Aradaki fark, terim ve etiket kümesi sırasıyla "http://schemas.google.com/g/2005#template" ve "template" olarak ayarlanmış category öğesinin eklenmesidir.
Bu örnekte yeni bir webpage şablonu oluşturulur.
// 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' ile bir <link> ekleyerek şablondan yeni bir sayfa örneklendirebilirsiniz.
Bu örnekte yeni bir filecabinet şablonu oluşturulur ve ardından bu şablondan yeni bir filecabinet sayfası oluşturulur.
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: Şablon <category> tanımlasa da girişinize bir tane eklemeniz gerekir. Ayrıca, <content> öğesi eklerseniz sunucunun bunu reddedeceğini unutmayın.
Dosya yükleme
Google Sites'ta olduğu gibi, API de dosya dolabı sayfasına veya üst sayfaya ek yüklemeyi destekler.
Bir üst öğeye ek yüklemek için içerik feed'i URL'sine bir 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ısı ayarlarsınız. Daha fazla bilgi için Alt sayfalar oluşturma başlıklı makaleyi inceleyin.
Ekler yükleniyor
Bu örnekte, kullanıcının içerik feed'inde bulunan ilk FileCabinetPageEntry öğesine bir PDF dosyası yüklenir.
Ek, "Başlarken" başlığı ve "İK paketi" (isteğe bağlı) 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.
Klasöre ek yükleme
FileCabinetPageEntry içindeki mevcut bir klasöre ek yüklemek için "terim" ö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. Bunlar, web'deki diğer dosyalara yönelik bağlantılardır ve dosya dolabı listelerinize ekleyebilirsiniz. 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 örnek, kullanıcının içerik feed'inde bulunan ilk FileCabinetPageEntry öğesinin altına WebAttachmentEntry oluşturur.
Başlığı ve (isteğe bağlı) açıklaması sırasıyla "GoogleLogo" ve "nice colors" 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 resme yönlendiren bir bağlantı oluşturur.
İçeriği Güncelleme
Bir sayfanın meta verilerini ve/veya HTML içeriğini güncelleme
Herhangi bir BaseContentEntry türündeki meta veriler (başlık, 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üncellenmiş Başlık" olarak değiştirildi.
- Sayfanın HTML içeriği "<p>Updated HTML Content</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 özelliğini ayarlayıp girişin updateMedia(boolean) yöntemini kullanarak da içeriği güncelleyebilirsiniz.
Bu örnek, mevcut bir ekteki içeriği günceller:
public AttachmentEntry updateFile(AttachmentEntry entry, File newFile) throws IOException, ServiceException { // See Uploading Attachments for the definition of mediaTypes. entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile))); return entry.updateMedia(false); }
Örnek, girişin edit-media bağlantısına bir HTTP PUT isteği gönderir. Döndürülen AttachmentEntry, güncellenmiş içeriği içerir.
Ek meta verilerini ve içeriğini güncelleme
updateMedia() yöntemini kullanarak bir ek meta verilerini ve içeriğini aynı çağrıda güncelleyebilirsiniz.
Yalnızca dosya içeriğini, meta verileri veya her ikisini de güncelleyebilirsiniz.
Bu örnekte, eklerin başlığı "Yeni Başlık" olarak değiştiriliyor, açıklaması güncelleniyor ve dosya içeriği yeni bir .zip dosyasıyla değiştiriliyor.
İstek yeni dosya içeriği içerdiğinden AttachmentEntry'nın 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");
İçeriği Silme
Bir sayfayı veya öğeyi Google Sites'tan kaldırmak için önce içerik girişini alın, ardından girişin delete() yöntemini çağırın.
entry.delete();
Ayrıca, girişe 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 HTTP 200 OK ile yanıt verir.
Ekleri İndirme
AttachmentEntry indirmek için girişin içerik src bağlantısına bir HTTP GET isteği gönderin.
Bu örnek, kullanıcının içerik feed'inde bulunan ilk AttachmentEntry öğesini "/path/to/save/file/" dizinine indirir:
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.");
EKL Feed'i
Paylaşım İzinlerine (EKL'ler) Genel Bakış
Erişim kontrol listesi feed'indeki her erişim kontrol listesi girişi, belirli bir varlığın (kullanıcı, kullanıcı grubu, alan veya varsayılan erişim (genel site)) erişim rolünü temsil eder. Girişler yalnızca açık erişime sahip öğeler için gösterilir. Google Siteler 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 örtülü 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üleyici (salt okuma erişimine eşdeğerdir).
- writer: Ortak çalışan (okuma/yazma erişimine eşdeğerdir).
- owner: Genellikle site yöneticisidir (okuma/yazma erişimine eşdeğerdir).
Kapsamlar
Kapsam öğesi, bu erişim düzeyine sahip olan öğeyi temsil eder. gAcl:scope öğesinin dört olası türü vardır:
- user: "user@gmail.com" gibi bir e-posta adresi değeri.
- group: Google Grubu e-posta adresi (ör. "group@domain.com").
- domain: G Suite alan adı (ör. "domain.com")
- default: "default" türünde yalnızca bir olası kapsam vardır ve bu kapsamın değeri yoktur
(ö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" erişimi olarak ayarlanamaz. Alanlar yalnızca okuyucu veya yazar olabilir.
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 site için 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'ine giden bir bağlantı 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ında alan dışında paylaşım etkinleştirilmişse vb.) mümkün olabilir.
API'yi kullanarak bir Google Sites sitesini paylaşmak için istemcinizin yeni bir
AclEntry
oluşturması ve bunu sunucuya POST gerekir.
Aşağıda, siteye reader olarak "user@example.com" adresini ekleyen bir örnek verilmiştir:
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 ACL feed'e 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 Google Grubu veya G Suite alanı genelinde paylaşabilirsiniz.
Grup e-posta adresiyle paylaşma:
AclScope scope = new AclScope(AclScope.Type.GROUP, "group_name@example.com");
Alan genelinde paylaşım:
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/domain1.com/siteA yalnızca domain1.com ile paylaşılabilir, domain2.com ile paylaşılamaz. 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
Bir sitede mevcut bir paylaşma iznini değiştirmek için önce söz konusu AclEntry'ı getirin, izni istediğiniz gibi değiştirin ve ardından sunucudaki EKL'yi değiştirmek için AclEntry'ın update() yöntemini çağırın.
Bu örnek, Site paylaşma bölümündeki önceki aclEntry örneğimizi, "user@example.com" adresini writer (ortak çalışan) olarak güncelleyerek değiştirir:
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 izinlerini kaldırma
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.
Özel Konular
Feed'i veya girişi tekrar alma
Daha önce aldığınız bir feed'i veya girişi tekrar almak istiyorsanız sunucuya listeyi ya da 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 koşullu alma işlemini yapmak için hem getFeed() hem de getEntry() yöntemleri, If-Modified-Since üstbilgisi 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 bir alma 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'e sahip olup olmadığını kontrol eder. ETag'ler eşleşiyorsa öğe değişmemiştir ve sunucu bir HTTP 304 NotModifiedException istisnası döndürür.
ETag'ler eşleşmiyorsa öğe, son isteğinizden bu yana değiştirilmiş demektir ve sunucu öğeyi döndürür.
ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.