Ö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:
- Java 1.5 veya sonraki bir sürümü yükleyin
- İstemci kitaplığını indirin (
gdata-src.java.zip
'nin en son sürümü) - Bağımlılıkların listesini indirin
- Ö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:
java/lib/gdata-sites-2.0.jar
: Buradaki 2.0 sürümü, klasik Sites API'nin 1.4 sürümü içindir.java/lib/gdata-core-1.0.jar
java/lib/gdata-client-1.0.jar
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.
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 link
s 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.
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.
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.
İç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 parametresi | Açıklama |
---|---|
site | "site " veya G Suite tarafından barındırılan alanınızın alanı (ör. example.com ). |
siteName | Sitenizin 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.
İç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:
- Varsa
<sites:pageName>
.a-z, A-Z, 0-9, -, _
koşulunu karşılamalıdır. <atom:title>
, pageName yoksa boş olmamalıdır. Normalleştirme, boşlukları "-" olacak şekilde kırpıp daraltmak vea-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.
İç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");
İç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.
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.");
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.
Ö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.