Önemli: Bu doküman 2012'den önce yazılmıştır. Kimlik doğrulama seçenekleri (OAuth 1.0, AuthSub ve ClientLogin) yukarıda açıklandığı gibi resmi olarak kullanımdan kaldırıldı 20 Nisan 2012'de tamamlanmıştır ve artık kullanılamamaktadır. Şu Google Hesabı'na geçiş yapmanızı öneririz: OAuth 2.0 kullanmaya başlayın.
Google Sites Data API'sı, istemci uygulamaların bir Google Sitesindeki içeriğe erişmesine, bu içeriği yayınlamasına ve değiştirmesine olanak tanır. İstemci uygulamanız ayrıca son etkinliklerin listesini isteyebilir, düzeltme geçmişini alabilir ve ekleri indirebilir.
Bu kılavuz, Sites Data API'nın özelliklerine dair biraz arka plan sağlamanın yanı sıra, API ile etkileşime geçme hakkında örnekler de sunar. Java istemci kitaplığını kullanın. İstemci kitaplığını oluşturma konusunda yardım almak için Google Data Java İstemci Kitaplığı'nı Kullanmaya Başlama. Bu konuyla ilgileniyorsanız Klasik Sites API ile etkileşimde bulunmak için Java istemci kitaplığı tarafından kullanılan temel protokol hakkında daha fazla bilgi edinmek için lütfen protokol kılavuzuna bakın.
Kitle
Bu doküman, Google Sites ile etkileşimde bulunan istemci uygulamaları yazmak isteyen geliştiricilere yöneliktir. Bunun için Google Data Java İstemci Kitaplığı'nı kullanın.
Başlarken
Google Sites, kimlik doğrulama için Google Hesaplarını veya G Suite hesaplarını kullanır. Halihazırda bir hesabınız varsa hazırsınız demektir. Aksi takdirde yeni bir hesap oluşturabilirsiniz.
Kitaplığı yükleme
İstemci kitaplığını ayarlama ve yükleme konusunda yardım almak için Google Data Java İstemci Kitaplığı'nı Kullanmaya Başlama başlıklı makaleyi inceleyin. Eclipse kullanıyorsanız bu makalede ayrıca Google Data APIs Eclipse eklentisini kullanarak projenizi nasıl kuracağınızı anlatacağız. Başlamanız için gerekenler:
- Java 1.5 veya üstünü yükleme
- İstemci kitaplığını indirin (
gdata-src.java.zip
uygulamasının en son sürümü) - Bağımlılıkların listesini indirin
- samples uygulamaları indirin (
gdata-samples.java.zip
uygulamasının en son sürümü)
.jar dosyalarını yükledikten sonra, projenize aşağıdakileri eklemeniz gerekir:
java/lib/gdata-sites-2.0.jar
- Buradaki 2.0 sürümü, klasik Sites API'nin 1.4 sürümü için hazırlanmıştır.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'larını (gdata-media-1.0.jar
, mail.jar
ve google-collect....jar
) eklediğinizden emin olun.
Örnek uygulamayı çalıştırma
Tam çalışan bir örnek uygulama, indirilen gdata-samples.java.zip
dosyasının /java/sample/sites
alt dizininde bulunmaktadır.
Kaynak /trunk/java/sample/sites/ adresinde de mevcuttur.
. SitesDemo.java
, kullanıcının klasik Sites API'nin nasıl kullanılacağını gösteren çeşitli işlemler yapmasına olanak tanır.
Örneği çalıştırmak için java/sample/util/lib/sample-util.jar
öğesini eklemeniz gerektiğini unutmayın.
Kendi projenizi başlatma
İpucu: Eclipse eklentimizle hızlı kurulum için Eclipse'i Google Veri API'leriyle Kullanma başlıklı makaleye bakın.
Uygulamanızın ihtiyaçlarına bağlı olarak, birkaç içe aktarma işlemi gerçekleştirmeniz gerekecektir. Aşağıdaki içe aktarma işlemleriyle başlamanızı öneririz:
import com.google.gdata.client.*; import com.google.gdata.client.sites.*; import com.google.gdata.data.*; import com.google.gdata.data.acl.*; import com.google.gdata.data.media.*; import com.google.gdata.data.sites.*; import com.google.gdata.data.spreadsheet.*; // If working with listpages / listitems import com.google.gdata.util.*;
Ardından, klasik Sites API'ye istemci bağlantısını temsil eden bir SitesService
nesnesi oluşturmanız gerekir:
SitesService client = new SitesService("yourCo-yourAppName-v1");
applicationName
bağımsız değişkeni şu biçimde olmalıdır: company-applicationname-version
. Bu parametre, günlük kaydı amacıyla kullanılır.
Not: Bu kılavuzun geri kalanında, client
değişkeninde bir SitesService
oluşturduğunuz varsayılmaktadır.
Klasik Sites API için kimlik doğrulama
Java istemci kitaplığı, genel veya gizli feed'lerle çalışmak için kullanılabilir. Sites Data API, gizli ve herkese açık verilere erişim sağlar ve gerçekleştirmeye çalıştığınız işleme bağlı olarak Sites izinlerine ve Örneğin içerik feed'ini okuyabilir ve ancak üzerinde güncelleme yapmaması (kimliği doğrulanmış istemci gerektirir). Bu işlem, ClientLogin kullanıcı adı/şifre kimlik doğrulaması, AuthSub veya OAuth.
AuthSub, OAuth ve ClientLogin hakkında daha fazla bilgi için lütfen Google Veri API'leri Kimlik Doğrulaması'na Genel Bakış sayfasına bakın.
İpucu: API, SSL'yi (HTTPS) destekler. AuthSub/OAuth kullanıyorsanız
https://sites.google.com/feeds/
kapsamında yer alır. Ayrıca
G Suite alanları, "SSL gerektir" ayarı, API, yönetim kontrol panelindeki geçerlidir. Tamamen
API isteklerinin HTTPS üzerinden gönderilmesi için client.useSsl();
çağrısı yapılır.
Web uygulamaları için AuthSub
Web Uygulamaları için AuthSub Kimlik Doğrulaması, aşağıdaki değişikliği yapması gereken istemci uygulamaları tarafından kullanılmalıdır: kullanıcılarının kimliklerini Google Hesaplarına doğrulatmaları. Operatörün, Google Sites kullanıcısının kullanıcı adı ve şifresine erişmesi gerekmez. Yalnızca AuthSub jetonu gereklidir.
AuthSub'ı web uygulamanıza entegre etme talimatlarını görüntüleyin
Tek kullanımlık jeton isteyin
Kullanıcı, uygulamanızı ilk kez ziyaret ettiğinde kimlik doğrulaması yapması gerekir. Genellikle, geliştiriciler bazı metinler ve kullanıcıyı yönlendiren bir bağlantı yazdırır kullanıcının kimliğini doğrulamak ve dokümanlarına erişim isteğinde bulunmak için AuthSub onay sayfasına gidin. Google Data Java istemci kitaplığı şu işlevi sağlar: bu URL'yi oluştur. Aşağıdaki kod AuthSubRequest sayfasına bir bağlantı oluşturur.
import com.google.gdata.client.*; String nextUrl = "http://www.example.com/welcome.jsp"; String scope = "https://sites.google.com/feeds/"; boolean secure = true; boolean session = true; String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);
G Suite tarafından barındırılan alanınızdaki kullanıcıların kimliğini doğrulamak istiyorsanız:
import com.google.gdata.client.*; String hostedDomain = "example.com"; String nextUrl = "http://www.example.com/welcome.jsp"; String scope = "https://sites.google.com/feeds/"; // SSL is also supported boolean secure = true; boolean session = true; String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);
getRequestUrl()
yöntemi, AuthSubRequest işleyicisi tarafından kullanılan sorgu parametrelerine karşılık gelen birkaç parametre alır:
- sonraki URL: Google'ın yönlendirme yapacağı URL
Kullanıcı hesabına giriş yapıp erişim izni verdikten sonra;
Yukarıdaki örnekte
http://www.example.com/welcome.jsp
- kapsam — yukarıdaki örnekte
https://sites.google.com/feeds/
- jetonun kayıtlı modda kullanılıp kullanılmayacağını belirten bir boole değeri; Yukarıdaki örnekte
false
- jetonun daha sonra bir oturum jetonuyla değiştirilip değiştirilmeyeceğini belirten ikinci bir boole değeri; Yukarıdaki örnekte
true
Oturum jetonuna yükseltme
AuthSub'ı Google Data API İstemci Kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.
Oturum jetonu hakkında bilgi alma
AuthSub'ı Google Data API İstemci Kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.
Oturum jetonunu iptal etme
AuthSub'ı Google Data API İstemci Kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.
Web veya yüklü/mobil uygulamalar için OAuth
OAuth, AuthSub'a alternatif olarak kullanılabilir ve web uygulamaları için tasarlanmıştır. OAuth, AuthSub'ın güvenli ve kayıtlı modunu kullanmaya benzerdir .
OAuth'u yüklü uygulamanıza entegre etme talimatlarını görüntüleyin
İstek jetonu getiriliyor
Google Data API İstemci Kitaplıklarıyla OAuth Kullanma başlıklı makaleyi inceleyin.
İstek jetonunu yetkilendirme
Google Data API İstemci Kitaplıklarıyla OAuth Kullanma başlıklı makaleyi inceleyin.
Erişim jetonuna yükseltme
Google Data API İstemci Kitaplıklarıyla OAuth Kullanma başlıklı makaleyi inceleyin.
Yüklü/mobil uygulamalar için ClientLogin
ClientLogin, şunları yapması gereken yüklü veya mobil uygulamalar tarafından kullanılmalıdır: kullanıcılarının kimliklerini Google Hesaplarına doğrulatmaları. İlk çalıştırmada, uygulamanız kullanıcıdan kullanıcı adını/şifresini ister. Sonraki taleplerde, bir kimlik doğrulama jetonuna başvuruldu.
ClientLogin'i yüklü uygulamanıza dahil etme talimatlarını görüntüleyin
ClientLogin'i kullanmak için
setUserCredentials()
SitesService
nesnesinin yöntemi (şundan devralınan):
GoogleService
. Kullanıcının e-posta adresini ve şifresini belirtin
müşteriniz kimin adına istekte bulunduğunu gösterir. Örneğin:
SitesService client = new SitesService("yourCo-yourAppName-v1"); client.setUserCredentials("example@gmail.com", "pa$$word");
İpucu: Uygulamanız kullanıcının kimliğini ilk kez başarıyla doğruladıktan sonra kimlik doğrulama jetonunu geri çağırmak için kullanılır. Uygulamanızı her çalıştırmada kullanıcıdan şifresini istemenize gerek yoktur. Daha fazla bilgi için Yetkilendirme jetonunu geri çağırma bölümüne bakın.
Java uygulamalarınızda ClientLogin'i kullanma hakkında daha fazla bilgi için Google Data API İstemci Kitaplıklarıyla ClientLogin'i Kullanma başlıklı makaleye bakın.
Site Özet Akışı
Site özet akışı, bir kullanıcının sahip olduğu veya görüntüleme izinlerine sahip olduğu Google Sites sitelerini listelemek için kullanılabilir. Mevcut bir sitenin adını değiştirmek için de kullanılabilir. G Suite alanlarında, bir alan adını oluşturmak ve/veya kopyalamak için bir şablondur.
Site listeleme
Site özet akışını sorgulamak için site özet akışı URL'sine bir HTTP GET
gönderin:
https://sites.google.com/feeds/site/site/
Java istemcisinde SiteFeed
ve SiteEntry
sınıflarını kullanarak
ekleme:
public String getSiteFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) return "https://sites.google.com/feeds/site/" + domain + "/"; } public void getSiteFeed() throws IOException, ServiceException { SiteFeed siteFeed = client.getFeed(new URL(getSiteFeedUrl()), SiteFeed.class); for (SiteEntry entry : siteFeed.getEntries()){ System.out.println("title: " + entry.getTitle().getPlainText()); System.out.println("site name: " + entry.getSiteName().getValue()); System.out.println("theme: " + entry.getTheme().getValue()); System.out.println(""); } }
Yukarıdaki snippet sitenin başlığını, site adını ve sitenin temasını yazdırır. Diğer alıcılar da feed'deki ek özelliklere erişerek.
Yeni site oluşturma
Not: Bu özellik yalnızca G Suite alanlarında kullanılabilir.
Yeni bir SiteEntry
oluşturup istemcinin
insert()
yöntemini kullanabilirsiniz.
Bu örnek, "seçenek listesi" temasıyla yepyeni bir site oluşturuyor (isteğe bağlı ayar) sağlar ve site adı (gerekli) ve açıklama (isteğe bağlı):
public String getSiteFeedUrl() { String domain = "example.com"; return "https://sites.google.com/feeds/site/" + domain + "/"; } public SiteEntry createSite(String title, String summary, String theme, String tag) throws MalformedURLException, IOException, ServiceException { SiteEntry entry = new SiteEntry(); entry.setTitle(new PlainTextConstruct(title)); entry.setSummary(new PlainTextConstruct(summary)); Theme tt = new Theme(); tt.setValue(theme); entry.setTheme(tt); entry.getCategories().add(new Category(TagCategory.Scheme.TAG, tag, null)); return client.insert(new URL(getSiteFeedUrl()), entry); } SiteEntry newSiteEntry = createSite("My Site Title", "summary for site", "slate", "tag");
Yukarıdaki istek, example.com
G Suite alanı altında yeni bir site oluşturacak.
Bu nedenle, sitenin URL'si https://sites.google.com/a/example.com/sitemin-başlığı olur.
Site başarıyla oluşturulursa sunucu bir SiteEntry
ile yanıt verir.
nesne; sunucu tarafından eklenen öğelerle doldurulur: site bağlantısı, sitenin EKL özet akışı.
Site adı, başlık, özet vb.
Site kopyalama
Not: Bu özellik yalnızca G Suite alanlarında kullanılabilir.
Bir siteyi kopyalamak yeni site oluşturmaya benzer. Aralarındaki fark şu:
bağlantısını (yeni SiteEntry
) eklemeniz gerekir.
Yeni site oluşturma bölümünde oluşturulan siteyi kopyalama örneği aşağıda verilmiştir:
public SiteEntry copySite(String title, String summary, String sourceHref) throws MalformedURLException, IOException, ServiceException { SiteEntry entry = new SiteEntry(); entry.setTitle(new PlainTextConstruct(title)); entry.setSummary(new PlainTextConstruct(summary)); entry.addLink(SitesLink.Rel.SOURCE, Link.Type.ATOM, sourceHref); return client.insert(new URL(getSiteFeedUrl()), entry); } String sourceHref = newSiteEntry.getLink(SitesLink.Rel.SOURCE, Link.Type.ATOM).getHref(); SiteEntry myTwin = copySite("Duplicate Site", "A copy", sourceHref);
Önemli noktalar:
- Yalnızca kimliği doğrulanmış kullanıcının sahip olduğu siteler ve site şablonları kopyalanabilir.
- Site şablonu da kopyalanabilir. "Bu siteyi şablon olarak yayınla" seçeneği sunulduğunda site, şablondur ayarının işaretli olup olmadığını kontrol edin.
- Kaynak sitede sahip olarak listelenmediğiniz sürece, başka bir alandan site kopyalayabilirsiniz.
Bir sitenin meta verilerini güncelleme
Bir siteyi yeniden adlandırmak, temasını, kategori etiketini veya özetini değiştirmek için öncelikle söz konusu siteyi içeren SiteEntry
web sitesini getirmeniz gerekir.
bir veya daha fazla özelliği değiştirip SiteEntry
update()
yöntemini çağırın.
Şu örnek, önceki sitenin temasını değiştiriyor ve siteyi yeniden adlandırıyor:
myTwin.setTitle(new PlainTextConstruct("better-title")); Theme theme = myTwin.getTheme(); theme.setValue('iceberg'); myTwin.setTheme(theme); myTwin.getCategories().add(new Category(TagCategory.Scheme.TAG, "newTag", null)); SiteEntry updatedSiteEntry = myTwin.update(); System.out.println(updatedSiteEntry.getTitle().getPlainText();
Web adresi eşlemeleri
Web adresi eşlemeleri, Sites kullanıcılarının kendi alanlarını bir Google sitesi ile eşlemesine olanak tanır. Örneğin, http://www.mydomainsite.com
http://sites.google.com/a/domain.com/mysite
yerine kullanılabilir. Sitenizin nerede barındırıldığına bağlı olarak, bir
sitenizin web adresi eşlemeleridir. Daha fazla bilgi edinmek için Yardım Merkezi makalemizi inceleyebilirsiniz.
Bir sitenin web adresi eşlemelerini getirme
Bir sitenin web adresi eşlemelerini döndürmek için with-mappings=true
parametresiyle site girişini/feed'ini getirin:
SiteQuery query = new SiteQuery(new URL("https://sites.google.com/feeds/site/siteName")); query.setWithMappings(true); SiteFeed feed = service.getFeed(query, SiteFeed.class); for (SiteEntry entry : feed.getEntries()) { System.out.println("Mappings for '" + entry.getSiteName().getValue() + "':"); for (Link link : entry.getWebAddressMappingLinks()) { System.out.println(" " + link.getHref()); } }
Mevcut eşlemeler rel='webAddress Matching' ile link
s olarak gösterilir. Örneğin, yukarıdaki örnekte
siteye işaret eden üç webAddressMapping
var
http://sites.google.com/site/myOtherTestSite
.
Web adresi eşlemelerini değiştirme
Not: Tüm GET/POST/PUT işlemleri, çalışırken with-mappings=true
parametresini belirtmelidir.
web adresi eşlemeleri kullanın. Parametre yoksa webAddressMapping
öğeleri, site girişlerinde (GET) döndürülmez veya
(PUT) eşlemeleri güncellenirken/kaldırılırken.
Bir eşlemeyi eklemek, güncellemek ya da silmek için yeni siteler oluştururken söz konusu bağlantıyı belirtmeniz, değiştirmeniz veya kaldırmanız yeterlidir.
bir sitenin meta verilerini güncelleme. with-mappings=true
parametresi, site feed'i URI'sine eklenmelidir.
Not: Adres eşlemelerini güncellemek için site yöneticisi veya G Suite tarafından barındırılan bir site kullanıyorsanız alan yöneticisi olmanız gerekir.
Örneğin, aşağıdaki istek http://www.mysitemapping.com
eşlemesini http://www.my-new-sitemapping.com
olarak günceller.
ve bağlantıyı girişin dışında bırakarak http://www.mysitemapping2.com
öğesini kaldırır:
SiteEntry entry = client.getEntry(new URL("https://sites.google.com/feeds/site/site/siteName?with-mappings=true"), SiteEntry.class); // Modify mappings (remove all mappings, add some of them again, add modified mappings) entry.removeLinks(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML); entry.addLink(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML, "http://www.my-new-sitemapping.com"); // Update the entry with the mappings. entry.update();
Web adresi eşlemelerinin, site oluşturma/kopyalama sırasında da belirtilebileceğini unutmayın.
Etkinlik Feed'i
Etkinlik feed'ini getirerek bir Site'nin son etkinliğini (değişiklikleri) getirebilirsiniz. Bu etkinlik feed'i, Sitede yapılan bir değişiklikle ilgili bilgileri içerir.
Etkinlik feed'ini sorgulamak için etkinlik feed'i URL'sine bir HTTP GET
gönderin:
https://sites.google.com/feeds/activity/site/siteName
Java istemcisinde ActivityEntry
nesneleri döndürmek için ActivityFeed
sınıfını kullanın:
public String buildActivityFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) String siteName = "mySite"; return "https://sites.google.com/feeds/activity/" + domain + "/" + siteName + "/"; } public void getActivityFeed() throws IOException, ServiceException { ActivityFeed activityFeed = client.getFeed(new URL(buildActivityFeedUrl()), ActivityFeed.class); for (BaseActivityEntry<?> entry : activityFeed.getEntries()){ System.out.println(entry.getSummary().getPlainText()); System.out.println(" revisions link: " + entry.getRevisionLink().getHref()); } }
Not: Bu feed'e erişmek için sitenin ortak çalışanı veya sahibi olmanız gerekir. İstemciniz bir AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulamalıdır. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.
Düzeltme Özet Akışı
Herhangi bir içerik girişinin düzeltme geçmişini getirmek için girişin düzeltme bağlantısına bir HTTP GET
gönderin:
https://sites.google.com/feeds/revision/site/siteName/CONTENT_ENTRY_ID
Bu örnek, içerik feed'ini sorgular ve ardından ilk içerik girişi için düzeltme feed'ini getirir:
ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class); URL revisionFeedUrl = new URL(contentFeed.getEntries().get(0).getRevisionLink().getHref()); // use first entry public void getRevisionFeed(String revisionFeedUrl) throws IOException, ServiceException { RevisionFeed revisionFeed = client.getFeed(revisionFeedUrl, RevisionFeed.class); for (BaseContentEntry<?> entry : revisionFeed.getEntries()){ System.out.println(entry.getTitle().getPlainText()); System.out.println(" updated: " + entry.getUpdated().toUiString() + " by " + entry.getAuthors().get(0).getEmail()); System.out.println(" revision #: " + entry.getRevision().getValue()); } }
Not: Bu feed'e erişmek için Sitenin ortak çalışanı veya sahibi olmanız gerekir. İstemciniz bir AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulamalıdır. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.
İçerik Feed'i
İçerik feed'ini alma
İçerik feed'i bir sitenin en son içeriğini listeler. İçerik feed'i URL'sine bir HTTP GET
gönderilerek erişilebilir:
https://sites.google.com/feeds/content/site/siteName
Feed 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'ini getirme örneği:
public String buildContentFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) String siteName = "mySite"; return "https://sites.google.com/feeds/content/" + domain + "/" + siteName + "/"; } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class);
Elde edilen contentFeed
, sunucudan gelen yanıtı içeren bir ContentFeed
nesnesidir. Her giriş
/ contentFeed
, kullanıcının Sitesindeki farklı bir sayfayı veya öğeyi temsil eder. ContentFeed
, farklı türler içeriyor
Tümü BaseContentEntry
kaynağından devralındı: ListItemEntry
, ListPageEntry
, AttachmentEntry
, WebAttachmentEntry
,
FileCabinetPageEntry
, AnnouncementsPageEntry
, AnnouncementEntry
, WebPageEntry
, CommentEntry
.
ContentFeed
öğesindeki farklı giriş türlerinin listelenmesine ilişkin bir örneği burada bulabilirsiniz.
Her giriş türü farklı özellikler içerir, ancak bunların tümü burada yazdırılmaz.
public String getContentBlob(BaseContentEntry<?> entry) { return ((XhtmlTextConstruct) entry.getTextContent().getContent()).getXhtml().getBlob(); } // Extracts an entry's numeric ID. private String getEntryId(String selfLink) { return selfLink.substring(selfLink.lastIndexOf("/") + 1); } public void printContentEntries(ContentFeed contentFeed) { System.out.println("Listing all WebPageEntry:"); for (WebPageEntry entry : contentFeed.getEntries(WebPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" author: " + entry.getAuthors().get(0).getEmail()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all ListPageEntry:"); for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); for (Column col : entry.getData().getColumns()) { System.out.print(" [" + col.getIndex() + "] " + col.getName() + "\t"); } } for (ListItemEntry entry : contentFeed.getEntries(ListItemEntry.class)) { for (Field field : entry.getFields()) { System.out.print(" [" + field.getIndex() + "] " + field.getValue() + "\t"); } System.out.println("\n"); } System.out.println("Listing all FileCabinetPageEntry:"); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all CommentEntry:"); for (CommentEntry entry : contentFeed.getEntries(CommentEntry.class)) { System.out.println(" in-reply-to: " + entry.getInReplyTo().toString()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementsPageEntry:"); for (AnnouncementsPageEntry entry : contentFeed.getEntries(AnnouncementsPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementEntry:"); for (AnnouncementEntry entry : contentFeed.getEntries(AnnouncementEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" draft?: " + entry.isDraft()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AttachmentEntry:"); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" revision: " + entry.getRevision().getValue()); MediaContent content = (MediaContent) entry.getContent(); System.out.println(" src: " + content.getUri()); System.out.println(" content type: " + content.getMimeType().getMediaType()); } System.out.println("Listing all WebAttachmentEntry:"); for (WebAttachmentEntry entry : contentFeed.getEntries(WebAttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" src: " + ((MediaContent) entry.getContent()).getUri()); } }
Not: Bu feed, kimlik doğrulama gerektirebilir veya gerekmeyebilir; (Sitenin paylaşım izinlerine bağlı olarak). Site herkese açık değilse istemciniz bir AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulaması yapmalıdır. Görüntüleyin Sites hizmeti için kimlik doğrulama.
İçerik feed'i sorgu örnekleri
Standart Google Data API sorgu parametrelerinden bazılarını kullanarak içerik feed'inde arama yapabilirsiniz. ve klasik Sites API'sine özel olanlar. Daha ayrıntılı bilgi ve desteklenen parametrelerin tam listesi için Başvuru Kılavuzu.
Not: Bu bölümdeki örnekler, İçerik Feed'ini Alma bölümündeki buildContentFeedUrl()
yöntemini kullanır.
Belirli giriş türlerini alma
Yalnızca belirli bir giriş türünü getirmek için kind
parametresini kullanın. Şu örnek yalnızca attachment
girişi döndürür:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setKind("webpage"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(entry.getTitle().getPlainText()); }
Birden fazla giriş türü döndürmek için her kind
öğesini ',' ile ayırın. Bu örnek, filecabinet
ve
listpage
giriş:
URL url = new URL(buildContentFeedUrl() + "?kind=filecabinet,listpage"); ContentFeed contentFeed = client.getFeed(url, ContentFeed.class); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); } for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); }
Yola göre sayfa alma
Google Sitesindeki bir sayfanın göreli yolunu biliyorsanız o sayfayı getirmek için path
parametresini kullanabilirsiniz.
Bu örnek, şu adreste bulunan sayfayı döndürür:
http://sites.google.com/site/siteName/path/to/the/page
:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setPath("/path/to/the/page"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class); for (BaseContentEntry<?> entry : contentFeed.getEntries()) { System.out.println(" title: " + entry.getTitle().getPlainText()); }
Üst sayfa altındaki tüm girişleri alma
Bir sayfanın içerik giriş kimliğini biliyorsanız (ör. aşağıdaki örnekte "1234567890") parent
parametresini kullanabilirsiniz
öğesini eklemeniz gerekir:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setParent("1234567890"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
Diğer parametreler için Başvuru Kılavuzu'na bakın.
İçerik Oluşturma
Not: Bir site için içerik oluşturmadan önce istemcide sitenizi ayarladığınızdan emin olun.client.site = "siteName";
Yeni içerikler (web sayfaları, liste sayfaları, dosya dolabı sayfaları, duyuru sayfaları vb.) HTTP POST
ekleme:
https://sites.google.com/feeds/content/site/siteName
Destek düğümü türlerinin listesi için Başvuru Kılavuzu'ndaki kind
parametresine bakın.
Yeni öğeler / sayfalar oluşturma
Bu örnek, Site'nin üst düzeyi altında yeni bir webpage
oluşturur ve sayfa gövdesi için bir XHTML içerir.
ve başlık başlığını 'Yeni Web Sayfası Başlığı' olarak ayarlar:
private void setContentBlob(BaseContentEntry<?> entry, String pageContent) { XmlBlob xml = new XmlBlob(); xml.setBlob(pageContent); entry.setContent(new XhtmlTextConstruct(xml)); } public WebPageEntry createWebPage(String title, String content) throws MalformedURLException, IOException, ServiceException { WebPageEntry entry = new WebPageEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content return client.insert(new URL(buildContentFeedUrl()), entry); } WebPageEntry createdEntry = createWebPage("New Webpage Title", "<b>HTML content</b>"); System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());
İstek başarılı olursa createdEntry
, sunucuda oluşturulan girişin bir kopyasını içerir.
Özel URL yolları altında öğeler/sayfalar oluşturma
Varsayılan olarak önceki örnek, URL altında oluşturulur
http://sites.google.com/site/siteName/new-webpage-title
ve
"Yeni Web Sayfası Başlığı" şeklinde bir sayfa başlığına sahip olmalıdır. Yani <atom:title>
, URL için new-webpage-title
değerine normalleştirilir.
Bir sayfanın URL yolunu özelleştirmek için <sites:pageName>
öğesini ayarlayabilirsiniz.
Bu örnekte, "File Storage" başlıklı yeni bir filecabinet
sayfası oluşturuluyor, ancak sayfa oluşturuluyor
http://sites.google.com/site/siteName/files
URL altında
(http://sites.google.com/site/siteName/file-storage
yerine)
<sites:pageName>
öğesini belirterek
public FileCabinetPageEntry createFileCabinetPage(String title, String content, String customPageName) throws MalformedURLException, IOException, ServiceException { FileCabinetPageEntry entry = new FileCabinetPageEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content entry.setPageName(new PageName(customPageName)); // Upload to a custom page path return client.insert(new URL(buildContentFeedUrl()), entry); } FileCabinetPageEntry createdEntry = createFileCabinetPage("File Storage", "<b>HTML content</b>", "files"); System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());
Sunucu, bir sayfanın URL yolunu adlandırmak için aşağıdaki öncelik kurallarını kullanır:
- Varsa
<sites:pageName>
.a-z, A-Z, 0-9, -, _
şartlarını karşılamalıdır. <atom:title>
, pageName yoksa boş olmamalıdır. Normalleştirme, boşlukları "-" olacak şekilde kırpmak ve daraltmak için kullanılır vea-z, A-Z, 0-9, -, _
ile eşleşmeyen karakterleri kaldırın.
Alt sayfalar oluşturma
Bir üst sayfa altında alt sayfalar (alt sayfalar) oluşturmak için girişte üst bağlantıyı ayarlamanız gerekir. Bağlantının href
özelliği
ana düğümün öz bağlantısı.
public AnnouncementEntry postAnnouncement(String title, String content, AnnouncementsPageEntry parentPage) throws MalformedURLException, IOException, ServiceException { AnnouncementEntry entry = new AnnouncementEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content // Set the entry's parent link to create the announcement under that page. entry.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), entry); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=announcementspage"), ContentFeed.class); AnnouncementEntry createdEntry = postAnnouncement("Party!!", "My place, this weekend", contentFeed.getEntries().get(0)); System.out.println("New post by " + createdEntry.getAuthors().get(0).getName());
Yukarıdaki örnek, şurada bulunan ilk duyurular sayfasının altında yeni bir announcement
oluşturur:
kullanıcının içerik feed'i. Duyuru başlığı "Parti!" olarak ayarlandı "Bu hafta sonu yerim" olarak da ayarlayabilirsiniz.
Sayfa şablonları
Sayfa şablonları oluşturma
Sayfa şablonu oluşturma süreci yeni öğeler/sayfalar oluşturma ve
alt sayfalar oluşturmak. Aradaki fark, category
öğesinin terimin ve etiketin "http://schemas.google.com/g/2005#template" olarak ayarlandığı şekilde eklenmesidir.
ve "template" öğelerini seçin.
Bu örnek yeni bir webpage
şablonu oluşturur.
// The template webpage entry. WebPageEntry entry = new WebPageEntry(); // Set title and content. entry.setTitle(new PlainTextConstruct("Page template title")); XmlBlob xml = new XmlBlob(); xml.setBlob("Content for page template"); entry.setContent(new XhtmlTextConstruct(xml)); // Set the template category Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS, TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE); entry.getCategories().add(TEMPLATE_CATEGORY); // Insert the template webpage entry. WebPageEntry createdEntry = client.insert(new URL("https://sites.google.com/feeds/content/site/siteName"), entry);
Şablondan sayfa oluşturma
Sayfa şablonları oluşturmaya benzer şekilde, rel='http://schemas.google.com/sites/2008#template' ile bir <link>
ekleyerek şablondan yeni bir sayfa oluşturabilirsiniz. nişan alma
.
Bu örnek, yeni bir filecabinet
şablonu oluşturur ve ardından bu şablondan yeni bir filecabinet
sayfası oluşturur.
URL feedUrl = new URL("https://sites.google.com/feeds/content/site/siteName"); // 1. Create file cabinet page template FileCabinetPageEntry inputTemplateEntry = new FileCabinetPageEntry(); inputTemplateEntry.setTitle(new PlainTextConstruct("File cabinet page template title")); XmlBlob xml = new XmlBlob(); xml.setBlob("Content for page template"); inputTemplateEntry.setContent(new XhtmlTextConstruct(xml)); // Set the template category Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS, TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE); inputTemplateEntry.getCategories().add(TEMPLATE_CATEGORY); // 2. Create file cabinet page template instance FileCabinetPageEntry templateEntry = client.insert(feedUrl, inputTemplateEntry); // Specify link to the page template FileCabinetPageEntry templateInstanceEntry = new FileCabinetPageEntry(); templateInstanceEntry.setTitle(new PlainTextConstruct("File cabinet template instance")); templateInstanceEntry.addLink(new Link(SitesLink.Rel.TEMPLATE, Link.Type.ATOM, templateEntry.getSelfLink().getHref())); FileCabinetPageEntry createdFileCabinetFromTemplate = client.insert(feedUrl, templateInstanceEntry);
Not: <category>
tanımlayan bir şablona rağmen,
yine de girilmesi gerekir. Ayrıca, bir <content>
öğesi eklerseniz sunucunun bunu reddedeceğini unutmayın.
Dosya yükleme
Google Sites'ta olduğu gibi API, dosya dolabı sayfasına veya bir üst sayfaya ek yüklemeyi destekler.
Bir üst öğeye ek yüklemek için içerik feed'i URL'sine HTTP POST
isteği gönderin:
https://sites.google.com/feeds/content/site/siteName
Tüm ek türleri, üst sayfaya yüklenmelidir. Bu nedenle, AttachmentEntry
veya WebAttachmentEntry
nesnesini yükleyebilirsiniz. Daha fazla bilgi için Alt sayfa oluşturma bölümüne bakın.
Ekler yükleniyor
Bu örnekte, kullanıcının içerik feed'inde bulunan ilk FileCabinetPageEntry
dosyaya bir PDF dosyası yükleniyor.
Ek, "Başlarken" başlığıyla oluşturulur. ve (isteğe bağlı) bir açıklama, "HR paketi" ile birlikte ekleyin.
MimetypesFileTypeMap mediaTypes = new MimetypesFileTypeMap(); mediaTypes.addMimeTypes("application/msword doc"); mediaTypes.addMimeTypes("application/vnd.ms-excel xls"); mediaTypes.addMimeTypes("application/pdf pdf"); mediaTypes.addMimeTypes("text/richtext rtx"); // ... See a more complete list of mime types in the SitesHelper.java public AttachmentEntry uploadAttachment(File file, BasePageEntry<?> parentPage, String title, String description) throws IOException, ServiceException { AttachmentEntry newAttachment = new AttachmentEntry(); newAttachment.setMediaSource(new MediaFileSource(file, mediaTypes.getContentType(file))); newAttachment.setTitle(new PlainTextConstruct(title)); newAttachment.setSummary(new PlainTextConstruct(description)); newAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), newAttachment); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class); FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0); AttachmentEntry attachment = uploadAttachment( new File("/path/to/your/file.pdf"), parentPage, "Getting Started", "HR packet"); System.out.println("Uploaded!");
Yükleme başarılı olursa attachment
, oluşturulan ek girişinin bir kopyasını içerir.
Klasöre ek yükleme
FileCabinetPageEntry
klasöründeki mevcut bir klasöre ek yüklemek için "terim" içeren bir kategori ekleyin özelliği klasörün adına ayarlandı.
Örneğin, uploadAttachment()
bölümüne şu satırı ekleyin:
newAttachment.getCategories().add(new Category("http://schemas.google.com/sites/2008#folder", "FolderName"));
Web ekleri
Web ekleri, özel ek türleridir. Kısaca, web'deki diğer dosyaların bağlantılarıdır girişlerinize ekleyebilirsiniz. Bu özellik, "URL ile dosya ekle"ye benzerdir. yükleme yöntemini kullanabilirsiniz.
Not: Web ekleri yalnızca dosya dolabı sayfası altında oluşturulabilir. Diğer sayfa türlerine yüklenemezler.
Bu örnek, kullanıcının içerik feed'inde bulunan ilk FileCabinetPageEntry
altında bir WebAttachmentEntry
oluşturur.
Başlığı ve (isteğe bağlı) açıklaması "GoogleLogo" olarak ayarlanmıştır ve "güzel renkler"
seçeneklerini görebilirsiniz.
public WebAttachmentEntry uploadWebAttachment(String contentUrl, FileCabinetPageEntry filecabinet, String title, String description) throws MalformedURLException, IOException, ServiceException { MediaContent content = new MediaContent(); content.setUri(contentUrl); WebAttachmentEntry webAttachment = new WebAttachmentEntry(); webAttachment.setTitle(new PlainTextConstruct(title)); webAttachment.setSummary(new PlainTextConstruct(description)); webAttachment.setContent(content); webAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, filecabinet.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), webAttachment); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class); FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0); WebAttachmentEntry webAttachment = uploadWebAttachment("http://www.google.com/images/logo.gif", parentPage, "Google's Logo", "nice colors"); System.out.println("Web attachment created!");
POST
, kullanıcının dosya dolabında 'http://www.google.com/images/logo.gif' adresindeki resmi işaret eden bir bağlantı oluşturur.
İçerik güncelleniyor
Bir sayfanın meta verilerini ve/veya html içeriğini güncelleme
Herhangi bir BaseContentEntry
türünün meta verileri (başlık, pageName vb.) ve sayfa içeriği
girişin update()
yöntemini kullanarak. Bu işlem, girişin edit
öğesine bir HTTP PUT
isteği gönderir
bağlantısını tıklayın.
Aşağıda, aşağıdaki değişikliklerle bir ListPageEntry
güncellemesinin bir örneği verilmiştir:
- Başlık "Güncellenmiş Başlık" olarak değiştirildi
- Sayfanın HTML içeriği "<p>Güncellenmiş HTML İçeriği</p>" olarak güncellenir
- Listenin ilk sütun başlığı "Sahip" olarak değiştirildi
ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=listpage"), ContentFeed.class); ListPageEntry listPage = contentFeed.getEntries(ListPageEntry.class).get(0); // Update first list page found // Update title listPage.setTitle(new PlainTextConstruct("Updated Title")); // Update HTML content XmlBlob xml = new XmlBlob(); xml.setBlob("<p>Updated HTML Content</p>"); listPage.setContent(new XhtmlTextConstruct(xml)); // Change first column's heading listPage.getData().getColumns().get(0).setName("Owner"); // listPage.setPageName(new PageName("new-page-path")); // You can also change the page's URL path ListPageEntry updatedEntry = listPage.update(); System.out.println("ListPage updated!");
Ek dosyasının içeriğini güncelleme
AttachmentEntry
için girişin MediaSource
değerini ayarlayarak ve ardından
girişin updateMedia(boolean)
yöntemi.
Bu örnek, mevcut bir ekin içeriğini günceller:
public AttachmentEntry updateFile(AttachmentEntry entry, File newFile) throws IOException, ServiceException { // See Uploading Attachments for the definition of mediaTypes. entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile))); return entry.updateMedia(false); }
Örnek, girişin edit-media
bağlantısına bir HTTP PUT
isteği gönderir. Döndürülen
AttachmentEntry
, güncellenmiş içeriği içerecek.
Ek meta verilerini ve içeriğini güncelleme
Bir ekin meta verilerini ve içeriğini aynı görüşmede updateMedia()
yöntemini kullanarak güncelleyebilirsiniz.
Yalnızca dosya içeriğini, meta verileri veya her ikisini birden güncelleyebilirseniz.
Bu örnek, ekin başlığını "Yeni Başlık" olarak değiştirir, açıklamasını günceller ve dosya içeriğini yeni bir .zip dosyasıyla değiştirir.
İstek yeni dosya içeriği barındırdığından AttachmentEntry
öğesinin updateMedia()
değeri kullanılır.
public AttachmentEntry updateAttachment(AttachmentEntry entry, File newFile, String newTitle, String newDescription) throws IOException, ServiceException { // See Uploading Attachments for the definition of mediaTypes. entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile))); entry.setTitle(new PlainTextConstruct(newTitle)); entry.setSummary(new PlainTextConstruct(newDescription)); return entry.updateMedia(true); } ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=attachment&max-results=1"), ContentFeed.class); AttachmentEntry attachment = contentFeed.getEntries(AttachmentEntry.class).get(0); // Update first attachment found AttachmentEntry updatedAttachment = updateAttachment(attachment, new File("/path/to/file.zip"), "New Title", "better stuff");
İçerik Siliniyor
Bir Google Sitesinden bir sayfayı veya öğeyi kaldırmak için öncelikle içerik girişini alın, ardından girişin delete()
işlevini çağırın.
entry.delete();
Ayrıca, hizmet sınıfının delete()
yöntemini girişin edit
bağlantısını ve ETag değerini ileterek de kullanabilirsiniz:
client.delete(entry.getEditLink().getHref(), "*"); // Note: using "*" may overwrite another client's changes.
Giriş başarıyla silindiyse sunucu HTTP 200 OK
ile yanıt verir.
Ekleri İndirme
AttachmentEntry
indirmek için girişin content src bağlantısına HTTP GET
isteği gönderin.
Bu örnek, kullanıcının içerik feed'inde bulunan ilk AttachmentEntry
dosyasını indirir
"/path/to/save/file/" dizinine ekleyin:
private void downloadFile(String downloadUrl, String fullFilePath) throws IOException, ServiceException { System.out.println("Downloading file from: " + downloadUrl); MediaContent mc = new MediaContent(); mc.setUri(downloadUrl); MediaSource ms = service.getMedia(mc); InputStream inStream = null; FileOutputStream outStream = null; try { inStream = ms.getInputStream(); outStream = new FileOutputStream(fullFilePath); int c; while ((c = inStream.read()) != -1) { outStream.write(c); } } finally { if (inStream != null) { inStream.close(); } if (outStream != null) { outStream.flush(); outStream.close(); } } } public void downloadAttachment(AttachmentEntry entry, String directory) throws IOException, ServiceException { String url = ((OutOfLineContent) entry.getContent()).getUri(); downloadFile(url, directory + entry.getTitle().getPlainText()); // Use entry's title for the save filename } ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=attachment&max-results=1"), ContentFeed.class); downloadAttachment(contentFeed.getEntries(AttachmentEntry.class).get(0), "/path/to/save/file/"); System.out.println("Downloaded.");
EKL Feed'i
Paylaşım İzinlerine (EKL'ler) Genel Bakış
EKL feed'indeki her EKL girişi, belirli bir varlığın erişim rolünü temsil eder: Kullanıcı, kullanıcı grubu, alan adı, veya varsayılan erişim (herkese açık site). Girişler yalnızca açık erişime sahip varlıklar için gösterilir; bir giriş gösterilir "Erişimi Olan Kişiler"deki her bir e-posta adresi için Google Sites arayüzünün paylaşım ekranındaki paneli açın. Bu nedenle, alan yöneticileri bir siteye erişimleri vardır.
Roller
Rol öğesi, bir öğenin sahip olabileceği erişim düzeyini temsil eder. gAcl:role
öğesinin dört olası değeri vardır:
- reader: Görüntüleyen (salt okuma erişimine eşdeğerdir).
- writer — bir ortak çalışan (okuma/yazma erişimine eşdeğerdir).
- owner — genellikle site yöneticisi (okuma/yazma erişimine eşdeğer)
Kapsamlar
Kapsam öğesi, bu erişim düzeyine sahip olan varlığı temsil eder. gAcl:scope
öğesinin dört olası türü vardır:
- user — bir e-posta adresi değeri (ör. "user@gmail.com").
- group — bir Google Grubu e-posta adresi, ör. "grup@alan.com".
- alanadi: Bir G Suite alan adı (ör. "alanadi.com").
- default: "Varsayılan" türünde yalnızca bir olası kapsam vardır ve değer yoktur.
(örn.
<gAcl:scope type="default">
). Bu kapsam, herhangi bir kullanıcının varsayılan olarak sahip olduğu erişimi kontrol eder yayınlayabilirsiniz.
Not: Alanların değeri gAcl:role
olamaz.
"sahip" olarak ayarla yalnızca okuyucu veya yazar olabilirler.
EKL feed'ini alma
Bir sitenin paylaşımını kontrol etmek için AclFeed
ve AclEntry
sınıfları kullanılabilir
izinleri vardır ve hizmet sınıfının getFeed()
yöntemi kullanılarak getirilebilir.
Aşağıdaki örnekte belirli bir sitenin EKL feed'i getirilir ve
her AclEntry
:
public String getAclFeedUrl(String siteName) { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) return "https://sites.google.com/feeds/acl/site/" + domain + "/" + siteName + "/"; } public void getAclFeed(String siteName) throws IOException, ServiceException { AclFeed aclFeed = client.getFeed(new URL(getAclFeedUrl(siteName)), AclFeed.class); for (AclEntry entry : aclFeed.getEntries()) { System.out.println(entry.getScope().getValue() + " (" + entry.getScope().getType() + ") : " + entry.getRole().getValue()); } } getAclFeed('my-site-name');
SiteFeed'deki girişlerle çalışıyorsanız her SiteEntry
, kendi EKL feed'inin bir bağlantısını içerir.
Örneğin, bu snippet bir SiteEntry
öğesinin Ecl feed'ini getirir:
String aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM).getHref(); AclFeed aclFeed = client.getFeed(new URL(aclLink), AclFeed.class);
Site paylaşma
Not: Belirli paylaşım EKL'leri, yalnızca alan yapılandırılmışsa mümkün olabilir tıklayın.
API'yi kullanarak bir Google Sites sitesini paylaşmak için müşterinizin, yeni bir
AclEntry
ve POST
olarak da sunucuya gönderir.
Aşağıda, "kullanici@example.com" adresinin eklendiği bir örnek verilmiştir. sitede reader
olarak:
AclRole role = new AclRole("reader"); AclScope scope = new AclScope(AclScope.Type.USER, "user@example.com"); AclEntry aclEntry = addAclRole(role, scope, entry); public AclEntry addAclRole(AclRole role, AclScope scope, SiteEntry siteEntry) throws IOException, MalformedURLException, ServiceException { AclEntry aclEntry = new AclEntry(); aclEntry.setRole(role); aclEntry.setScope(scope); Link aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM); return client.insert(new URL(aclLink.getHref()), aclEntry); }
Olası AclScope
için EKL feed'ine Genel Bakış bölümüne bakın
ve AclRoles
değerleridir.
Grup ve Alan düzeyinde paylaşım
Bir siteyi tek bir kullanıcıyla paylaşmaya benzer şekilde, bir siteyi bir Google grubu veya G Suite alanı.
Bir grup e-posta adresiyle paylaşma:
AclScope scope = new AclScope(AclScope.Type.GROUP, "group_name@example.com");
Alanın tamamıyla paylaşma:
AclScope scope = new AclScope(AclScope.Type.DOMAIN, "example.com");
Alan düzeyinde paylaşım yalnızca G Suite alanlarında ve yalnızca sitenin barındırıldığı alan için desteklenir. Örneğin http://sites.google.com/a/alanadi1.com/siteA, Sitenin tamamını alanadi2.com ile paylaşamaz, yalnızca alanadi1.com ile paylaşabilir. Aşağıdakiler bir G Suite alanında barındırılmayan (ör. http://sites.google.com/site/siteB) alan adı davet edemez.
Paylaşım izinlerini değiştirme
Bir sitedeki mevcut bir paylaşım izni için önce söz konusu AclEntry
öğesini getirin, izni değiştirin
ve ardından sunucudaki EKL'yi değiştirmek için AclEntry
öğesinin update()
yöntemini çağırın.
Bu örnekte, Site paylaşma bölümündeki önceki aclEntry
örneğimiz değiştirilmiştir.
'kullanici@example.com' adresini güncelleyerek writer
(ortak çalışan) olmak için:
aclEntry.setRole(new AclRole("writer")); AclEntry updatedAclEntry = aclEntry.update(); // Could also use the client's update method // client.update(new URL(aclEntry.getEditLink().getHref()), aclEntry);
ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.
Paylaşım izinleri kaldırılıyor
Bir paylaşım iznini kaldırmak için önce AclEntry
öğesini alın, ardından delete()
yöntemini çağırın:
aclEntry.delete(); // Could also use the client's delete method // client.delete(new URL(aclEntry.getEditLink().getHref()), aclEntry);
ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.
Özel Konular
Tekrar yayın veya giriş alma
Daha önce aldığınız bir feed'i veya girişi almak isterseniz şunu söyleyerek verimliliği artırabilirsiniz: sunucunun listeyi veya girişi, yalnızca son almanızdan sonra değişmişse göndermesini.
Bu tür bir koşullu alma işlemi gerçekleştirmek için hem getFeed()
hem de getEntry()
yöntemleri
If-Modified-Since
başlığı için ETag değerini veya DateTime
nesnesini kabul eden ek bir bağımsız değişken.
Bir girişin e etiketine entry.getEtag()
adresinden erişebilirsiniz.
Bu örnekte, bir içerik web sayfası girişi için koşullu alma işlemi yapılır:
String feedUrl = "https://sites.google.com/feeds/content/site/siteName/123456789"; WebPageEntry entry = client.getEntry(new URL(feedUrl), WebPageEntry.class, "\"GVQHSARDQyp7ImBq\"");
Sunucu bu isteği aldığında, istediğiniz öğenin
belirttiğiniz ETag. ETag'ler eşleşirse öğe değişmemiştir ve sunucu bir
HTTP 304 NotModifiedException
istisnası atılacak.
ETag'ler eşleşmezse öğe son istekte bulunduğunuzdan beri değiştirilmiştir ve sunucu öğeyi döndürür.
ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.