Java 言語ガイド

重要: このドキュメントは 2012 年より前に作成されたものです。このドキュメントで説明する認証オプション(OAuth 1.0、AuthSub、ClientLogin)は、2012 年 4 月 20 日をもって正式に非推奨となり、使用できなくなりました。できるだけ早く OAuth 2.0 に移行することをおすすめします。

Google Sites Data API を使用すると、クライアント アプリケーションから Google サイト内のコンテンツへのアクセス、公開、変更を行うことができます。 クライアント アプリケーションは、最近のアクティビティのリストをリクエストしたり、リビジョン履歴を取得したり、添付ファイルをダウンロードしたりすることもできます。

このガイドでは、Sites Data API の機能に関する背景情報に加えて、Java クライアント ライブラリを使用して API を操作する例についても説明します。クライアント ライブラリの設定については、Google Data Java クライアント ライブラリ スタートガイドをご覧ください。Java クライアント ライブラリが従来の Sites API とのやり取りに使用する基盤となるプロトコルの詳細については、プロトコル ガイドをご覧ください。

オーディエンス

このドキュメントは、Google Data Java クライアント ライブラリを使用して Google Sites とやり取りするクライアント アプリケーションを作成するデベロッパーを対象としています。

スタートガイド

Google サイトでは、認証に Google アカウントまたは G Suite アカウントが使用されます。すでにアカウントをお持ちの場合は、設定は完了しています。アカウントをお持ちでない場合は、新しいアカウントを作成してください。

ライブラリのインストール

クライアント ライブラリの設定とインストールについては、Google Data Java クライアント ライブラリ スタートガイドをご覧ください。Eclipse を使用している場合は、Google Data APIs Eclipse プラグインを使用してプロジェクトを設定する方法も説明されています。利用を開始するには、以下が必要です。

  1. Java 1.5 以降をインストールする
  2. クライアント ライブラリをダウンロードするgdata-src.java.zip の最新バージョン)
  3. 依存関係のリストをダウンロードする
  4. サンプル アプリケーションgdata-samples.java.zip の最新バージョン)をダウンロードする

.jars をインストールしたら、プロジェクトに次の行を追加する必要があります。

  1. java/lib/gdata-sites-2.0.jar - ここでのバージョン 2.0 は、従来の Sites API のバージョン 1.4 を対象としています。
  2. java/lib/gdata-core-1.0.jar
  3. java/lib/gdata-client-1.0.jar
  4. java/lib/gdata-spreadsheet-3.0.jar(リストページまたはリストアイテムを操作する場合)

また、依存関係の JAR(gdata-media-1.0.jarmail.jargoogle-collect....jar)も必ず含めてください。

サンプル アプリケーションの実行

完全なサンプル アプリケーションは、gdata-samples.java.zip ダウンロードの /java/sample/sites サブディレクトリにあります。ソースは、[ソース] タブからアクセスできる SVN リポジトリの /trunk/java/sample/sites/ でも入手できます。SitesDemo.java では、従来の Google サイト API の使い方を示すさまざまな操作を行えます。

サンプルを実行するには、java/sample/util/lib/sample-util.jar を含める必要があります。

独自のプロジェクトを開始する

ヒント: Eclipse プラグインを使用して簡単にセットアップする方法については、Eclipse で Google Data API を使用するをご覧ください。

アプリケーションのニーズに応じて、複数のインポートが必要になります。最初に次のインポートを行うことをおすすめします。

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.*;

次に、従来の Sites API へのクライアント接続を表す SitesService オブジェクトを設定する必要があります。

SitesService client = new SitesService("yourCo-yourAppName-v1");

applicationName 引数は company-applicationname-version の形式で指定する必要があります。このパラメータはロギングに使用されます。

: このガイドの残りの部分では、変数 clientSitesService が作成されていることを前提としています。

従来の Sites API に対する認証

Java クライアント ライブラリを使用すると、公開フィードまたは限定公開フィードを操作できます。Sites Data API は、サイトの権限と実行しようとしているオペレーションに応じて、限定公開フィードと公開フィードにアクセスできます。たとえば、公開サイトのコンテンツ フィードを読み取ることはできても、更新することはできない場合があります。更新には認証済みクライアントが必要になります。これは、ClientLogin のユーザー名 / パスワード認証、AuthSub、または OAuth を使用して行うことができます。

AuthSub、OAuth、ClientLogin の詳細については、Google Data APIs 認証の概要をご覧ください。

ヒント: この API は SSL(HTTPS)をサポートしています。AuthSub / OAuth を使用している場合は、SSL 経由でフィードをリクエストするために、https://sites.google.com/feeds/ のスコープを指定してください。また、G Suite ドメインの場合、管理コントロール パネルの [SSL を必須にする] 設定が API で考慮されます。client.useSsl(); を呼び出すと、すべての API リクエストを強制的に HTTPS で送信できます。

ウェブ アプリケーション用の AuthSub

ウェブ アプリケーションの AuthSub 認証は、ユーザーを Google アカウントで認証する必要があるクライアント アプリケーションで使用する必要があります。オペレーターは、Google Sites ユーザーのユーザー名とパスワードにアクセスする必要はありません。必要なのは AuthSub トークンのみです。

AuthSub をウェブ アプリケーションに組み込む手順を確認する

1 回限りのトークンをリクエストする

ユーザーが初めてアプリケーションにアクセスする際には、認証を行う必要があります。通常、デベロッパーは、ユーザーを認証してドキュメントへのアクセスをリクエストするため、ユーザーを AuthSub 承認ページに誘導するテキストとリンクを出力します。Google Data Java クライアント ライブラリには、この URL を生成する関数があります。以下のコードは、AuthSubRequest ページへのリンクを設定します。

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 でホストされているドメインのユーザーを認証するには:

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() メソッドは、AuthSubRequest ハンドラで使用されるクエリ パラメータに対応するいくつかのパラメータを取ります。

  • 次の URL - ユーザーがアカウントにログインしてアクセス権を付与した後に Google がリダイレクトする URL(上記の例では http://www.example.com/welcome.jsp)。
  • スコープ - 上記の例では https://sites.google.com/feeds/
  • トークンを登録モードで使用するかどうかを示すブール値(上記の例では false
  • トークンを後でセッション トークンと交換するかどうかを示す 2 つ目のブール値(上記の例では true

セッション トークンへのアップグレード

Google Data API クライアント ライブラリで AuthSub を使用するをご覧ください。

セッション トークンに関する情報の取得

Google Data API クライアント ライブラリで AuthSub を使用するをご覧ください。

セッション トークンの取り消し

Google Data API クライアント ライブラリで AuthSub を使用するをご覧ください。

ウェブ アプリケーション、インストール型アプリケーション、モバイルアプリの OAuth

OAuthOAuth は、ウェブ アプリケーションを対象としたもので、AuthSub の代わりに使用できます。OAuth では、すべてのデータ リクエストにデジタル署名が必要で、ドメインを登録する必要があるという点で、AuthSub のセキュア モードかつ登録済みモードの使用と似ています。

インストール済みのアプリに OAuth を組み込む手順を確認する

リクエスト トークンの取得

Google Data API クライアント ライブラリでの OAuth の使用をご覧ください。

リクエスト トークンの承認

Google Data API クライアント ライブラリでの OAuth の使用をご覧ください。

アクセス トークンへのアップグレード

Google Data API クライアント ライブラリでの OAuth の使用をご覧ください。

インストール済み / モバイルアプリの ClientLogin

ClientLogin は、Google アカウントに対するユーザーの認証が必要なインストール済みアプリケーションまたはモバイルアプリで使用されます。初回実行時に、ユーザー名とパスワードの入力を求めるメッセージが表示されます。後続のリクエストでは認証トークンが参照されます。

インストールされたアプリケーションに ClientLogin を組み込む手順を確認する

ClientLogin を使用するには、GoogleService から継承された SitesService オブジェクトの setUserCredentials() メソッドを呼び出します。クライアントに代わってリクエストを行うユーザーのメールアドレスとパスワードを指定します。例:

SitesService client = new SitesService("yourCo-yourAppName-v1");
client.setUserCredentials("example@gmail.com", "pa$$word");

ヒント: アプリでユーザーの初回認証に成功したら、認証トークンをデータベースに保存して、後で使用できるようにします。アプリケーションの実行のたびにユーザーにパスワードを尋ねる必要はありません。詳細については、認証トークンの再取得をご覧ください。

Java アプリケーションで ClientLogin を使用する方法については、Google Data API クライアント ライブラリで ClientLogin を使用するをご覧ください。

トップへ戻る

サイト フィード

サイトフィードを使用すると、ユーザーが所有している Google サイトや、ユーザーが閲覧権限を持っている Google サイトを一覧表示できます。また、既存のサイトの名前を変更する場合にも使用できます。G Suite ドメインの場合は、サイト全体の作成やコピーにも使用できます。

リスティング サイト

サイトフィードにクエリを実行するには、サイトフィード URL に HTTP GET を送信します。

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

Java クライアントでは、SiteFeed クラスと SiteEntry クラスを使用してサイトフィードを操作できます。

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

上記のスニペットは、サイトのタイトル、サイト名、サイトのテーマを出力します。フィード内の追加のプロパティにアクセスするには、他のゲッターを使用できます。

新しいサイトを作成する

: この機能は G Suite ドメインでのみご利用いただけます。

新しいサイトをプロビジョニングするには、新しい SiteEntry を作成し、サイトフィードでクライアントの insert() メソッドを呼び出します。

この例では、テーマ「slate」(オプションの設定)を使用して新しいサイトを作成し、サイト名(必須)と説明(省略可)を指定します。

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

上記のリクエストでは、G Suite ドメイン example.com に新しいサイトが作成されます。サイトの URL は https://sites.google.com/a/example.com/my-site-title となります。

サイトが正常に作成されると、サーバーは SiteEntry オブジェクトをレスポンスとして返します。このオブジェクトには、サイトへのリンク、サイトの ACL フィードへのリンク、サイト名、タイトル、概要などのサーバーが追加した要素が設定されます。

サイトのコピー

: この機能は G Suite ドメインでのみご利用いただけます。

サイトのコピーは、新しいサイトの作成に似ています。違いは、複製するサイトのセルフリンクを含むリンクを新しい SiteEntry で設定する必要があります。新しいサイトを作成するで作成したサイトを複製する例を次に示します。

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

注意事項:

  • コピーできるのは、認証されたユーザーが所有するサイトとサイト テンプレートのみです。
  • サイト テンプレートをコピーすることもできます。Google サイトの設定ページで [このサイトをテンプレートとして公開] がオンになっているサイトは、テンプレートです。
  • 別のドメインからサイトをコピーできます。ただし、移行元のサイトでオーナーとして登録されている必要があります。

サイトのメタデータの更新

サイトの名前を変更したり、テーマ、カテゴリタグ、概要を変更したりするには、まず該当するサイトを含む SiteEntry を取得し、1 つ以上のプロパティを変更してから、SiteEntryupdate() メソッドを呼び出す必要があります。次の例では、以前のサイトのテーマを変更し、サイトの名前を変更しています。

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

ウェブアドレスのマッピング

ウェブアドレスのマッピングを使用すると、サイトのユーザーは独自のドメインを Google サイトにマッピングできます。たとえば、http://sites.google.com/a/domain.com/mysite の代わりに http://www.mydomainsite.com を使用できます。サイトのホスト場所によっては、サイトのウェブアドレスのマッピングを手動で変更できます。詳しくは、ヘルプセンターの記事をご覧ください。

サイトのウェブアドレスのマッピングの取得

サイトのウェブアドレスのマッピングを返すには、with-mappings=true パラメータを使用してサイトのエントリ / フィードを取得します。

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

既存のマッピングは、rel='webAddressMapping' を持つ link として表示されます。たとえば、上記の例では、サイト http://sites.google.com/site/myOtherTestSite を指す 3 つの webAddressMapping があります。

ウェブアドレスのマッピングを変更する

: ウェブアドレス マッピングを操作するすべての GET / POST / PUT オペレーションで、with-mappings=true パラメータを指定する必要があります。パラメータが存在しない場合、webAddressMapping はサイトエントリ(GET)で返されず、エントリからマッピングを更新/削除(PUT)する際に考慮されません。

マッピングを追加、更新、削除するには、新しいサイトを作成する際やサイトのメタデータを更新する際に、そのようなリンクを指定し、変更または削除します。with-mappings=true パラメータはサイトフィード URI に含める必要があります。注: アドレスのマッピングを更新するには、サイト管理者である必要があります。G Suite でホストされているサイトの場合は、ドメイン管理者である必要があります。

たとえば、次のリクエストは http://www.mysitemapping.com マッピングを http://www.my-new-sitemapping.com に更新し、エントリからリンクを除外して http://www.mysitemapping2.com を削除します。

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

ウェブアドレスのマッピングは、サイトの作成時またはコピー時に指定することもできます。

トップへ戻る

アクティビティ フィード

アクティビティ フィードを取得することで、サイトの最近のアクティビティ(変更)を取得できます。アクティビティ フィードの各エントリには、サイトに加えられた変更に関する情報が含まれます。

アクティビティ フィードをクエリするには、アクティビティ フィードの URL に HTTP GET を送信します。

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

Java クライアントでは、ActivityFeed クラスを使用して ActivityEntry オブジェクトを返します。

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

: このフィードにアクセスするには、サイトのコラボレーターまたはオーナーである必要があります。クライアントは、AuthSub、OAuth、または ClientLogin トークンを使用して認証する必要があります。Google サイトサービスへの認証をご覧ください。

トップへ戻る

リビジョン フィード

コンテンツ エントリの変更履歴を取得するには、エントリの変更リンクに HTTP GET を送信します。

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

この例では、コンテンツフィードに対してクエリを実行し、最初のコンテンツ エントリの変更フィードを取り出します。

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

注: このフィードにアクセスするには、サイトのコラボレーターまたはオーナーである必要があります。クライアントは、AuthSub、OAuth、または ClientLogin トークンを使用して認証する必要があります。Google サイトサービスの認証をご覧ください。

トップへ戻る

コンテンツ フィード

コンテンツ フィードの取得

コンテンツフィードには、サイトの最新のコンテンツが表示されます。コンテンツ フィード URL に HTTP GET を送信することでアクセスできます。

https://sites.google.com/feeds/content/site/siteName
フィード パラメータ説明
sitesite」または G Suite でホストされているドメインのドメイン(example.com など)。
siteNameサイトの URL に含まれる、サイトのウェブスペース名(例: mySite)。

コンテンツ フィードの取得例:

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

結果の contentFeed は、サーバーからのレスポンスを含む ContentFeed オブジェクトです。contentFeed の各エントリは、ユーザーのサイト内の異なるページまたはアイテムを表します。ContentFeed には、BaseContentEntry から継承されたさまざまなタイプのオブジェクト(ListItemEntryListPageEntryAttachmentEntryWebAttachmentEntryFileCabinetPageEntryAnnouncementsPageEntryAnnouncementEntryWebPageEntryCommentEntry)が含まれます。

ContentFeed 内のさまざまなタイプのエントリを一覧表示する例を次に示します。各タイプのエントリには異なるプロパティが含まれますが、すべてがここに出力されるわけではありません。

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

注: このフィードには、サイトの共有権限に応じて認証が必要な場合があります。サイトが公開されていない場合は、クライアントが AuthSub、OAuth、または ClientLogin トークンを使用して認証する必要があります。Google サイトサービスへの認証をご覧ください。

コンテンツ フィードのクエリ例

コンテンツ フィードを検索するには、標準の Google Data API クエリ パラメータの一部と、従来の Sites API に固有のパラメータを使用します。詳細とサポートされているパラメータの一覧については、リファレンス ガイドをご覧ください。

: このセクションの例では、コンテンツ フィードの取得buildContentFeedUrl() メソッドを使用しています。

特定のエントリの種類を取得する

特定のタイプのエントリのみを取得するには、kind パラメータを使用します。この例では、attachment エントリのみが返されます。

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

複数のエントリタイプを返すには、各 kind を「,」で区切ります。この例では、filecabinet エントリと listpage エントリが返されます。

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

パスでページを取得する

Google サイト内のページの相対パスがわかっている場合は、path パラメータを使用してその特定のページを取得できます。 この例では、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());
}

親ページのすべてのエントリを取得する

ページのコンテンツ エントリ ID(以下の例では「1234567890」)がわかっている場合は、parent パラメータを使用して、その子エントリをすべて取得できます(存在する場合)。

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

その他のパラメータについては、リファレンス ガイドをご覧ください。

トップへ戻る



コンテンツの作成

注: サイトのコンテンツを作成する前に、クライアントでサイトが設定されていることを確認してください。
client.site = "siteName";

新しいコンテンツ(ウェブページ、リストページ、ファイル キャビネット ページ、お知らせページなど)は、コンテンツフィードに HTTP POST を送信することで作成できます。

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

サポートされているノードタイプの一覧については、リファレンス ガイドkind パラメータをご覧ください。

新しいアイテム / ページの作成

この例では、サイトの最上位の下に新しい webpage を作成し、ページ本文の XHTML を追加し、ヘッダー タイトルを「New WebPage Title」に設定します。

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

リクエストが成功すると、createdEntry にサーバーで作成されたエントリのコピーが含まれます。

カスタム URL パスでアイテム/ページを作成する

デフォルトでは、上記の例は URL http://sites.google.com/site/siteName/new-webpage-title の下に作成され、ページの見出しは「新しいウェブページのタイトル」になります。つまり、<atom:title> は URL の new-webpage-title に正規化されます。ページの URL パスをカスタマイズするには、<sites:pageName> 要素を設定します。

この例では、「ファイル ストレージ」という見出しを持つ新しい filecabinet ページを作成しますが、<sites:pageName> 要素を指定して(http://sites.google.com/site/siteName/file-storage ではなく)URL http://sites.google.com/site/siteName/files にページを作成します。

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

サーバーは、ページの URL パスの命名に次の優先ルールを使用します。

  1. <sites:pageName>(存在する場合)。a-z, A-Z, 0-9, -, _ を満たす必要があります。
  2. <atom:title>。pageName が存在しない場合は、null にすることはできません。正規化では、空白文字を削除して「-」に圧縮し、a-z, A-Z, 0-9, -, _ と一致しない文字を削除します。

サブページを作成する

親ページの下にサブページ(子ページ)を作成するには、エントリで親リンクを設定する必要があります。親ノードのセルフリンクへのリンクの href 属性。

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

上記の例では、ユーザーのコンテンツ フィードにある最初のお知らせページの下に新しい announcement を作成します。通知のタイトルは「パーティー!!」に、内容は「今週末、私の家」に設定されています。

ページ テンプレート

ページ テンプレートの作成

ページ テンプレートの作成プロセスは、新しいアイテム / ページの作成サブページの作成と同じです。違いは、category を追加し、用語とラベルをそれぞれ「http://schemas.google.com/g/2005#template」と「template」に設定することです。

この例では、新しい webpage テンプレートを作成します。

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

テンプレートからページを作成する

ページ テンプレートの作成と同様に、ページ テンプレートのセルフリンクを指す rel='http://schemas.google.com/sites/2008#template' を指す <link> を含めることで、テンプレートから新しいページをインスタンス化できます。

この例では、新しい filecabinet テンプレートを作成し、そのテンプレートから新しい filecabinet ページをインスタンス化します。

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

: テンプレートで <category> が定義されている場合でも、エントリに <category> を含める必要があります。また、<content> 要素を含めると、サーバーはそれを拒否します。

ファイルのアップロード

Google サイトと同様に、API ではファイル キャビネット ページまたは親ページへの添付ファイルのアップロードをサポートしています。

添付ファイルを親にアップロードするには、コンテンツ フィードの URL に HTTP POST リクエストを送信します。

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

添付ファイルの種類はすべて親ページにアップロードする必要があります。そのため、アップロードする AttachmentEntry オブジェクトまたは WebAttachmentEntry オブジェクトに親リンクを設定します。詳細については、サブページを作成するをご覧ください。

添付ファイルをアップロードしています

この例では、ユーザーのコンテンツ フィードで見つかった最初の FileCabinetPageEntry に PDF ファイルをアップロードします。アタッチメントが作成され、タイトルは「Getting Started」、説明は「HR packet」(省略可)になります。

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

アップロードが成功すると、attachment に作成された添付エントリのコピーが含まれます。

フォルダに添付ファイルをアップロードする

添付ファイルを FileCabinetPageEntry の既存のフォルダにアップロードするには、「term」属性にフォルダの名前を設定したカテゴリを指定します。 たとえば、uploadAttachment() に次の行を追加します。

newAttachment.getCategories().add(new Category("http://schemas.google.com/sites/2008#folder", "FolderName"));

ウェブ添付ファイル

ウェブ添付ファイルは特殊な種類の添付ファイルです。基本的に、これらはファイルキャビネットのリスティングに追加できる、ウェブ上の他のファイルへのリンクです。この機能は、Google サイトの管理画面の [URL でファイルを追加] アップロード方法に似ています。

: ウェブ添付は、ファイル キャビネットの下にのみ作成できます。他のタイプのページにはアップロードできません。

この例では、ユーザーのコンテンツ フィードで見つかった最初の FileCabinetPageEntry の下に WebAttachmentEntry を作成します。タイトルと(省略可の)説明は、それぞれ「GoogleLogo」と「nice colors」に設定されています。

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 は、ユーザーのファイル キャビネットに、「http://www.google.com/images/logo.gif」の画像を指すリンクを作成します。

トップへ戻る



コンテンツの更新

ページのメタデータや HTML コンテンツの更新

BaseContentEntry タイプのメタデータ(タイトル、pageName など)とページ コンテンツは、エントリの update() メソッドを使用して編集できます。これにより、エントリの edit リンクに HTTP PUT リクエストが送信されます。

以下に、ListPageEntry を更新して次の変更を加える例を示します。

  • タイトルが「更新されたタイトル」に変更されます。
  • ページの HTML コンテンツが「<p>更新された HTML コンテンツ</p>」に更新されます。
  • リストの最初の列の見出しが [オーナー] に変更されます。
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!");

添付ファイルの内容の更新

AttachmentEntry の場合は、エントリの MediaSource を設定し、エントリの updateMedia(boolean) メソッドを使用してコンテンツを更新することもできます。

この例では、既存の添付ファイルの内容を更新します。

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

この例では、HTTP PUT リクエストをエントリの edit-media リンクに送信します。返される AttachmentEntry には、更新されたコンテンツが含まれます。

添付ファイルのメタデータとコンテンツの更新

updateMedia() メソッドを使用すると、同じ呼び出しで添付ファイルのメタデータとそのコンテンツを更新できます。ファイルの内容のみ、メタデータ、またはその両方を更新できる場合は、

この例では、添付ファイルのタイトルを「New Title」に変更し、説明を更新し、ファイルの内容を新しい .zip ファイルに置き換えます。リクエストに新しいファイル コンテンツが含まれているため、AttachmentEntryupdateMedia() が使用されます。

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

トップへ戻る



コンテンツの削除

Google サイトからページまたはアイテムを削除するには、まずコンテンツ エントリを取得してから、エントリの delete() を呼び出します。

entry.delete();

エントリの edit リンクと ETag 値を渡すことで、サービスクラスの delete() メソッドを使用することもできます。

client.delete(entry.getEditLink().getHref(), "*"); // Note: using "*" may overwrite another client's changes.

エントリが正常に削除されると、サーバーは HTTP 200 OK で応答します。

トップへ戻る



添付ファイルのダウンロード

AttachmentEntry をダウンロードするには、HTTP GET リクエストをエントリの content src リンクに送信します。

この例では、ユーザーのコンテンツ フィード内で見つかった最初の AttachmentEntry を「/path/to/save/file/」ディレクトリにダウンロードします。

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

トップへ戻る

ACL フィード

共有権限(ACL)の概要

ACL フィードの各 ACL エントリは、特定のエンティティ(ユーザー、ユーザーのグループ、ドメイン、デフォルト アクセス(公開サイト))のいずれかのアクセス役割を表します。明示的なアクセス権を持つエンティティに対してのみ、エントリが表示されます。Google サイト UI の共有画面にある [アクセス権のあるユーザー] パネルには、メールアドレスごとに 1 つのエントリが表示されます。したがって、サイトへのアクセス権が暗黙的に付与されていても、ドメイン管理者は表示されません。

ロール

role 要素は、エンティティが持つことができるアクセスレベルを表します。gAcl:role 要素で使用できる値は次の 4 つです。

  • reader — 閲覧者(読み取り専用アクセスと同等)。
  • writer — 共同編集者(読み取り/書き込みアクセスに相当)。
  • オーナー - 通常はサイト管理者(読み取り / 書き込みアクセスと同等)。

スコープ

scope 要素は、このアクセスレベルを持つエンティティを表します。gAcl:scope 要素には次の 4 つのタイプがあります。

  • user - メールアドレスの値(例: user@gmail.com)。
  • group - Google グループのメールアドレス(例: group@domain.com)。
  • domain - G Suite のドメイン名(「domain.com」など)。
  • default - タイプが「default」のスコープは 1 つだけです。値はありません(例: <gAcl:scope type="default">)。このスコープは、パブリック サイトですべてのユーザーがデフォルトで持つアクセス権を制御します。

: ドメインの gAcl:role 値を「オーナー」アクセスに設定することはできません。ドメインは読み取り専用または書き込み専用にする必要があります。

ACL フィードの取得

AclFeed クラスと AclEntry クラスを使用してサイトの共有権限を制御できます。これらのクラスは、サービスクラスの getFeed() メソッドを使用して取得できます。

次の例では、特定のサイトの ACL フィードを取得し、各 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 のエントリを操作する場合、各 SiteEntry には ACL フィードへのリンクが含まれます。 たとえば、次のスニペットは SiteEntry の ACL フィードを取得します。

String aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM).getHref();
AclFeed aclFeed = client.getFeed(new URL(aclLink), AclFeed.class);

サイトの共有

: 特定の共有 ACL は、ドメインでそのような権限が許可されるように構成されている場合にのみ使用できます(G Suite ドメインのドメイン外での共有が有効になっている場合など)。

API を使用して Google サイトを共有するには、クライアントが新しい AclEntry を作成して、サーバーに POST する必要があります。

サイトに「user@example.com」を reader として追加する例を次に示します。

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

使用可能な AclScope 値と AclRoles 値については、ACL フィード概要のセクションをご覧ください。

グループレベルおよびドメインレベルの共有

サイトを 1 人のユーザーと共有する場合と同様に、Google グループまたは G Suite ドメイン間でサイトを共有できます。

グループのメールアドレスとの共有:

AclScope scope = new AclScope(AclScope.Type.GROUP, "group_name@example.com");

ドメイン全体と共有する:

AclScope scope = new AclScope(AclScope.Type.DOMAIN, "example.com");

ドメインレベルでの共有は、G Suite ドメインでのみ、またサイトがホストされているドメインでのみサポートされています。 たとえば、http://sites.google.com/a/domain1.com/siteA は、domain1.com とサイト全体を共有できますが、domain2.com とは共有できません。G Suite ドメインでホストされていないサイト(http://sites.google.com/site/siteB など)は、ドメインを招待できません。

共有権限の変更

サイトの既存の共有権限に変更を加える場合は、まず該当する AclEntry を取得し、必要に応じて権限を変更します。次に、AclEntryupdate() メソッドを呼び出して、サーバーの ACL を変更します。

この例では、サイトの共有セクションの aclEntry の例を変更して、user@example.com を writer(共同編集者)に変更します。

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 について詳しくは、Google Data APIs リファレンス ガイドをご覧ください。

共有権限の削除

共有権限を削除するには、まず AclEntry を取得してから、その delete() メソッドを呼び出します。

aclEntry.delete();

// Could also use the client's delete method
// client.delete(new URL(aclEntry.getEditLink().getHref()), aclEntry);

ETag の詳細については、Google Data API リファレンス ガイドをご覧ください。

トップへ戻る

特別なトピック

フィードまたはエントリの再取得

以前に取得したフィードまたはエントリを取得する場合は、前回取得したときとリストまたはエントリが変更されている場合にのみ送信するようにサーバーに指示することで、効率を高めることができます

この種の条件付き取得を行うために、getFeed() メソッドと getEntry() メソッドの両方で、If-Modified-Since ヘッダーの ETag 値または DateTime オブジェクトを受け入れる追加の引数が用意されています。エントリの etag には entry.getEtag() からアクセスできます。

この例では、コンテンツ ウェブページ エントリの条件付き取得を行います。

String feedUrl = "https://sites.google.com/feeds/content/site/siteName/123456789";
WebPageEntry entry = client.getEntry(new URL(feedUrl), WebPageEntry.class, "\"GVQHSARDQyp7ImBq\"");

サーバーは、このリクエストを受信すると、リクエストされたアイテムの ETag が指定された ETag と同じかどうかを確認します。ETag が一致する場合、アイテムは変更されていないため、サーバーは HTTP 304 を返すか、NotModifiedException 例外をスローします。

ETag が一致しない場合、アイテムは前回リクエストした後で変更されているため、サーバーはアイテムを返します。

ETag の詳細については、Google Data API リファレンス ガイドをご覧ください。

トップへ戻る