Python ガイド

重要: このドキュメントは 2012 年より前に作成されたものです。認証オプション (OAuth 1.0、AuthSub、ClientLogin)が 正式にサポート終了となり です。Google Cloud 上の OAuth 2.0 に移行してください。

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

このガイドでは、Sites Data API の機能に関する背景情報に加え、この API の使用例を紹介します。 Python クライアント ライブラリを使用します。クライアント ライブラリの設定については、 Google Data Python クライアント ライブラリ スタートガイドもし関心があるなら Python クライアント ライブラリが従来の Google サイト API とやり取りするために使用する基本プロトコルについて詳しくは、 プロトコル ガイドをご覧ください。

オーディエンス

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

スタートガイド

Python クライアント ライブラリを使用するには、Python 2.2 以降と、DependencyModules の Wiki ページに記載されているモジュールが必要です。クライアント ライブラリをダウンロードしたら、次の操作を行います。 クライアントのインストールと使用方法については、Google Data Python ライブラリ スタートガイドをご覧ください。

サンプルの実行

完全なサンプルは、プロジェクトの Mercurial リポジトリの samples/sites サブディレクトリにあります。 (/samples/sites/sites_example.py).

次のように例を実行します。

python sites_example.py
# or
python sites_example.py --site [sitename] --domain [domain or "site"] --debug [prints debug info if set]

必須フラグが指定されていない場合は、値を入力するよう求められます。このサンプルを使用すると、ユーザーはさまざまな操作を実行できます。 従来の Google サイト API の使い方を実演します。そのため、特定の操作(コンテンツの変更など)を行うには認証が必要になります。プログラムは、 AuthSubOAuth、または ClientLogin

このガイドの例を独自のコードに含めるには、次の import ステートメントが必要です。

import atom.data
import gdata.sites.client
import gdata.sites.data

また、以前の Google サイト API へのクライアント接続を表す SitesClient オブジェクトを設定する必要があります。 アプリケーションの名前と、サイトのウェブスペース名(URL 内)を渡します。

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName')

G Suite ドメインでホストされているサイトを使用するには、domain パラメータを使用してドメインを設定します。

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName', domain='example.com')

上記のスニペットでは、source 引数は省略可能ですが、ロギングの目的では推奨されています。本来は company-applicationname-version の形式を使用してください。

: このガイドの残りの部分では、変数 clientSitesClient オブジェクトを作成したことを前提としています。

以前の Google サイト API に対する認証

Python クライアント ライブラリは、公開フィードまたは非公開フィードの操作に使用できます。Site Data API では、Google ドキュメント、スプレッドシート、 フィードを選択します。たとえば、Google Chat のコンテンツ フィードを 更新は行わない場合、認証済みのクライアントが必要です。これを行うには、 ClientLogin のユーザー名/パスワード認証、AuthSubOAuth

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

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

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

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

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

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

import gdata.gauth

def GetAuthSubUrl():
  next = 'http://www.example.com/myapp.py'
  scopes = ['https://sites.google.com/feeds/']
  secure = True
  session = True
  return gdata.gauth.generate_auth_sub_url(next, scopes, secure=secure, session=session)

print '<a href="%s">Login to your Google account</a>' % GetAuthSubUrl()

G Suite でホストされているドメインのユーザーを認証する場合は、ドメイン名を generate_auth_sub_url() に渡します。

def GetAuthSubUrl():
  domain = 'example.com'
  next = 'http://www.example.com/myapp.py'
  scopes = ['https://sites.google.com/feeds/']
  secure = True
  session = True
  return gdata.gauth.generate_auth_sub_url(next, scopes, secure=secure, session=session, domain=domain)

generate_auth_sub_url() メソッドはいくつかのパラメータ( AuthSubRequest ハンドラ):

  • next URL - Google によるリダイレクト先の URL ユーザーが自分のアカウントにログインしてアクセスを許可した後 上記の例の http://www.example.com/myapp.py
  • スコープ - https://sites.google.com/feeds/
  • secure: トークンがセキュア モードおよび登録モードで使用されるかどうかを示すブール値。上記の例の True
  • session: 1 回限りのトークンが後でセッション トークンと交換されるかどうかを示す 2 つ目のブール値。上記の例の True

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

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

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

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

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

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

ヒント: 有効期間の長いセッション トークンをアプリケーションで正常に取得すると、 そのトークンをデータベースに保存し、後で使用するために呼び出します。アプリケーションを実行するたびにユーザーを AuthSub に戻す必要はありません。 client.auth_token = gdata.gauth.AuthSubToken(TOKEN_STR) を使用して、クライアントに既存のトークンを設定します。

ウェブ アプリケーションまたはインストール/モバイル アプリケーション用の OAuth

OAuth は、AuthSub の代わりに使用できるもので、ウェブ アプリケーション向けです。 OAuth は、AuthSub のセキュア モードおよび登録済みモードの使用に類似しています。 すべてのデータ リクエストにデジタル署名を施し、ドメインを登録する必要があります。

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

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

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

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

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

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

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

ヒント: アプリケーションが OAuth アクセス トークンを正常に取得したら、 そのトークンをデータベースに保存し、後で使用するために呼び出します。アプリケーションを実行するたびに、OAuth を介してユーザーを送り返す必要はありません。 client.auth_token = gdata.oauth.OAuthToken(TOKEN_STR, TOKEN_SECRET) を使用して、クライアントに既存のトークンを設定します。

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

ClientLogin は、インストールが必要なアプリケーションまたはモバイルアプリで使用します。 認証する必要があります。最初の実行時に、アプリケーションはユーザーにユーザー名とパスワードの入力を求めます。後続のリクエストで 認証トークンが参照されます。

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

ClientLogin を使用するには、次のコマンドを呼び出します。 ClientLogin() 継承される SitesClient オブジェクトのメソッド GDClient。メールアドレスと クライアントに代わってリクエストを発行しているユーザーのパスワードです。例:

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1')
client.ClientLogin('user@gmail.com', 'pa$$word', client.source);

ヒント: アプリケーションによるユーザーの初回認証が成功したら、後で使用できるように、認証トークンをデータベースに保管します。アプリケーションを実行するたびにユーザーにパスワードの入力を求める必要はありません。 詳しくは、認証トークンのリコールをご覧ください。

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

トップへ戻る

サイト フィード

サイトフィードを使用すると、ユーザーが所有する Google サイト、または閲覧権限のある Google サイトを一覧表示できます。 また、既存のサイトの名前を変更する場合にも使用できます。最後に、G Suite ドメインの場合は、 できます。

サイトの一覧表示

ユーザーがアクセスできるサイトを一覧表示するには、クライアントの GetSiteFeed() メソッドを使用します。このメソッドにはオプションの 引数、uri。これを使用して、代替サイトフィードの URI を指定できます。デフォルトでは、GetSiteFeed() クライアント オブジェクトに設定されているサイト名とドメインを使用します。詳しくは、スタートガイド クライアント オブジェクトでこれらの値を設定する方法の詳細をご確認ください。

認証されたユーザーのサイトリストを取得する例を次に示します。

feed = client.GetSiteFeed()

for entry in feed.entry:
  print '%s (%s)' % (entry.title.text, entry.site_name.text)
  if entry.summary.text:
    print 'description: ' + entry.summary.text
  if entry.FindSourceLink():
    print 'this site was copied from site: ' + entry.FindSourceLink()
  print 'acl feed: %s\n' % entry.FindAclLink()
  print 'theme: ' + entry.theme.text

上記のスニペットでは、サイトのタイトル、サイト名、コピー元のサイト、acl フィードの URI が出力されます。

新しいサイトを作成する

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

新しいサイトをプロビジョニングするには、ライブラリの CreateSite() メソッドを呼び出します。 GetSiteFeed() ヘルパーと同様に、CreateSite() も オプションの引数 uri: これを使用して、代替のサイトフィードの URI を指定できます( SitesClient オブジェクトに設定されているドメインとは異なるドメインにあるサイト)に対して適用されます。

「slate」というテーマで新しいサイトを作成する例そして タイトルと説明(省略可):

client.domain = 'example2.com'  # demonstrates creating a site under a different domain.

entry = client.CreateSite('Title For My Site', description='Site to hold precious memories', theme='slate')
print 'Site created! View it at: ' + entry.GetAlternateLink().href

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

サイトが正常に作成されると、サーバーから gdata.sites.data.SiteEntry が返されます。 サーバーによって追加された要素を含むオブジェクト。サイトへのリンク、サイトの ACL フィードへのリンク、 サイト名、タイトル、概要などです

サイトのコピー

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

CreateSite() は、既存のサイトをコピーする場合にも使用できます。これを行うには、source_site キーワード引数を渡します。 コピーされたすべてのサイトにはこのリンクが表示されます。このリンクには entry.FindSourceLink() でアクセスできます。サイトを複製した例 新しいサイトを作成するで作成したサイト:

copied_site = client.CreateSite('Copy of Title For My Site', description='My Copy', source_site=entry.FindSourceLink())
print 'Site copied! View it at: ' + copied_site.GetAlternateLink().href

注意事項:

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

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

サイトのタイトルや概要を更新するには、そのサイトを含む SiteEntry が必要です。この この例では、GetEntry() メソッドを使用して SiteEntry を取得し、そのタイトル、説明、カテゴリタグを変更します。

uri = 'https://sites.google.com/feeds/site/example2.com/title-for-my-site'
site_entry = client.GetEntry(uri, desired_class=gdata.sites.data.SiteEntry)

site_entry.title.text = 'Better Title'
site_entry.summary.text = 'Better Description'
category_name = 'My Category'
category = atom.data.Category(
    scheme=gdata.sites.data.TAG_KIND_TERM,
    term=category_name)
site_entry.category.append(category)
updated_site_entry = client.Update(site_entry)

# To force the update, even if you do not have the latest changes to the entry:
# updated_site_entry = client.Update(site_entry, force=True)

トップへ戻る

アクティビティ フィードの取得

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

アクティビティ フィードを取得することで、サイトの最近のアクティビティ(変更)を取得できます。 ライブラリの GetActivityFeed() メソッドを使用すると、このフィードにアクセスできます。

print "Fetching activity feed of '%s'...\n" % client.site
feed = client.GetActivityFeed()

for entry in feed.entry:
  print '%s [%s on %s]' % (entry.title.text, entry.Kind(), entry.updated.text)

GetActivityFeed() を呼び出すと、指定したリソースのリストを含む gdata.sites.data.ActivityFeed オブジェクトが返されます。 gdata.sites.data.ActivityEntry。各アクティビティ エントリには、 サイトに加えられた変更

トップへ戻る

変更履歴を取得しています

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

リビジョン フィードは、コンテンツ エントリの変更履歴に関する情報を提供します。GetRevisionFeed() メソッドを使用して、特定のコンテンツ エントリのリビジョンを取得できます。このメソッドは、省略可能な uri を受け取ります。 パラメータには、gdata.sites.data.ContentEntry、コンテンツ エントリの完全な URI、またはコンテンツ エントリ ID を指定できます。

次の例では、コンテンツ フィードに対してクエリを実行し、最初のコンテンツ エントリのリビジョン フィードを取得します。

print "Fetching content feed of '%s'...\n" % client.site
content_feed = client.GetContentFeed()
content_entry = content_feed.entry[0]

print "Fetching revision feed of '%s'...\n" % content_entry.title.text
revision_feed = client.GetRevisionFeed(content_entry)

for entry in revision_feed.entry:
  print entry.title.text
  print ' new version on:\t%s' % entry.updated.text
  print ' view changes:\t%s' % entry.GetAlternateLink().href
  print ' current version:\t%s...\n' % str(entry.content.html)[0:100]

GetRevisionFeed() を呼び出すと、指定したリソースのリストを含む gdata.sites.data.RevisionFeed オブジェクトが返されます。 gdata.sites.data.RevisionEntry。各リビジョン エントリには、コンテンツの内容、 そのリビジョン番号、新しいバージョンが作成された日時が表示されます。

トップへ戻る

コンテンツ フィード

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

: コンテンツ フィードでは、認証が必要な場合があります。サイトの共有権限に応じて異なります。 サイトが非公開の場合、クライアントは AuthSub、OAuth、または ClientLogin トークンを使用して認証する必要があります。詳しくは、 Google サイトサービスに対する認証

コンテンツ フィードはサイトの最新のコンテンツを返します。これにアクセスするには、lib の GetContentFeed() メソッド: 引数としてuri文字列パラメータを受け取り、 作成できます

コンテンツ フィード全体を取得して、興味深い要素を出力する例を次に示します。

print "Fetching content feed of '%s'...\n" % client.site
feed = client.GetContentFeed()

for entry in feed.entry:
  print '%s [%s]' % (entry.title.text, entry.Kind())

  # Common properties of all entry kinds.
  print ' content entry id: ' + entry.GetNodeId()
  print ' revision:\t%s' % entry.revision.text
  print ' updated:\t%s' % entry.updated.text

  if entry.page_name:
    print ' page name:\t%s' % entry.page_name.text

  if entry.content:
    print ' content\t%s...' % str(entry.content.html)[0:100]

  # Subpages/items will have a parent link.
  parent_link = entry.FindParentLink()
  if parent_link:
    print ' parent link:\t%s' % parent_link

  # The alternate link is the URL pointing to Google Sites.
  if entry.GetAlternateLink():
    print ' view in Sites:\t%s' % entry.GetAlternateLink().href

  # If this entry is a filecabinet, announcementpage, etc., it will have a feed of children.
  if entry.feed_link:
    print ' feed of items:\t%s' % entry.feed_link.href

  print

ヒント: entry.Kind() を使用してエントリのタイプを判別できます。

結果の feed オブジェクトは、リストを含む gdata.sites.data.ContentFeed です。 /gdata.sites.data.ContentEntry。各エントリは、組織内の異なるページ/アイテムを表します。 エントリの種類に固有の要素があります。詳しくは、サンプル アプリケーションをご覧ください。 ここでは、各エントリの種類で使用可能なプロパティの一部を紹介します。

トップへ戻る

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

標準の Google Data API クエリ パラメータの一部を使用してコンテンツ フィードを検索できます。 従来の Google サイト API 向けの機能もあります。サポートされているパラメータの詳細と完全なリストについては、 リファレンス ガイド

: このセクションの例では、gdata.sites.client.MakeContentFeedUri() ヘルパー メソッドを使用しています。 を使用してコンテンツ フィードのベース URI を作成します。

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

特定の種類のエントリのみを取得するには、kind パラメータを使用します。たとえば、次のスニペットは attachment エントリのみを返します。

kind = 'webpage'

print 'Fetching only %s entries' % kind
uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind)
feed = client.GetContentFeed(uri=uri)

複数の型を返すには、各 kind をカンマで区切ります。たとえば、次のスニペットは filecabinet を返し、 listpage 件のエントリ:

kind = ','.join(['filecabinet', 'listpage'])

print 'Fetching only %s entries' % kind
uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind)
feed = client.GetContentFeed(uri=uri)

パスによるページの取得

Google サイト内のページの相対パスがわかっている場合は、path パラメータを使用してその特定のページを取得できます。 この例では、次の URL にあるページが返されます: http://sites.google.com/domainName/siteName/path/to/the/page:

path = '/path/to/the/page'

print 'Fetching page by its path: ' + path
uri = '%s?path=%s' % (client.MakeContentFeedUri(), path)
feed = client.GetContentFeed(uri=uri)

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

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

parent = '1234567890'

print 'Fetching all children of parent entry: ' + parent
uri = '%s?parent=%s' % (client.MakeContentFeedUri(), parent)
feed = client.GetContentFeed(uri=uri)

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

トップへ戻る



コンテンツの作成

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

新しいコンテンツ(ウェブページ、リストページ、ファイル キャビネット、お知らせページなど)は、CreatePage() を使用して作成できます。 このメソッドの最初の引数は作成するページの種類を指定し、その後に title、その HTML コンテンツを続けます。

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

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

この例では、トップレベルの下に新しい webpage を作成し、ページ本文用の XHTML をいくつか含めています。 見出しのタイトルを「New WebPage Title」に設定します。

entry = client.CreatePage('webpage', 'New WebPage Title', html='<b>HTML content</b>')
print 'Created. View it at: %s' % entry.GetAlternateLink().href

リクエストが成功すると、サーバー上で作成されたエントリのコピーが gdata.sites.gdata.ContentEntry として entry に格納されます。

作成時に入力される、より複雑な種類のエントリ(例: 列見出しを持つ listpage)を作成するには、 gdata.sites.data.ContentEntry を手動で作成し、対象のプロパティを入力して、client.Post() を呼び出します。

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

デフォルトでは、上記の例は URL の下に作成されます。 http://sites.google.com/domainName/siteName/new-webpage-title、 ページ見出しが「新しいウェブページのタイトル」である。つまり、タイトルは URL の new-webpage-title に正規化されます。 ページの URL パスをカスタマイズするには、コンテンツ エントリで page_name プロパティを設定します。CreatePage() ヘルパー オプションのキーワード引数として指定します。

この例では、見出しが「File Storage」の新しい filecabinet ページが作成されていますが、 URL http://sites.google.com/domainName/siteName/files の下 (http://sites.google.com/domainName/siteName/file-storage の代わり) page_name プロパティを指定します。

entry = client.CreatePage('filecabinet', 'File Storage', html='<b>HTML content</b>', page_name='files')
print 'Created. View it at: ' + entry.GetAlternateLink().href

サーバーでは、次の優先順位ルールに従ってページの URL パスが命名されます。

  1. page_name(存在する場合)a-z, A-Z, 0-9, -, _ を満たす必要があります。
  2. title。ページ名が存在しない場合は null にすることはできません。正規化では、空白文字を「-」にカットして縮小しますおよび a-z, A-Z, 0-9, -, _ に一致しない文字を削除。

サブページの作成

親ページの下にサブページ(子)を作成するには、CreatePage()parent キーワード引数を使用します。 parent は、gdata.sites.gdata.ContentEntry か、イベントを表す文字列のいずれかです。 コンテンツのエントリの完全な自己 ID。

この例では、コンテンツ フィードで announcementpage をクエリし、最初に見つかったものの下に新しい announcement を作成します。

uri = '%s?kind=%s' % (client.MakeContentFeedUri(), 'announcementpage')
feed = client.GetContentFeed(uri=uri)

entry = client.CreatePage('announcement', 'Party!!', html='My place, this weekend', parent=feed.entry[0])
print 'Posted!'

ファイルのアップロード

Google サイトと同様に、API ではファイル キャビネット ページまたは親ページへの添付ファイルのアップロードをサポートしています。添付ファイルをアップロードする必要があります 移動することもできますそのため、アップロードしようとしている ContentEntry に親リンクを設定する必要があります。詳細については、サブページの作成をご覧ください。

クライアント ライブラリの UploadAttachment() メソッドは、添付ファイルをアップロードするためのインターフェースを提供します。

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

この例では、ユーザーのコンテンツ フィードで最初に見つかった filecabinet に PDF ファイルをアップロードします。 添付ファイルは「新しい従業員ハンドブック」というタイトルで作成されます。説明(省略可)「HR パケット」を入力します。

uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'filecabinet')
feed = client.GetContentFeed(uri=uri)

attachment = client.UploadAttachment('/path/to/file.pdf', feed.entry[0], content_type='application/pdf',
                                     title='New Employee Handbook', description='HR Packet')
print 'Uploaded. View it at: %s' % attachment.GetAlternateLink().href

アップロードが成功すると、作成された添付ファイルのコピーがattachmentサーバー上に保存されます。

フォルダへの添付ファイルのアップロード

Google サイトのファイル キャビネットはフォルダに対応しています。UploadAttachment() は、追加のキーワードを指定します。 引数 folder_name を使用して、添付ファイルを filecabinet フォルダにアップロードできます。フォルダの名前を指定するだけです。

import gdata.data

ms = gdata.data.MediaSource(file_path='/path/to/file.pdf', content_type='application/pdf')
attachment = client.UploadAttachment(ms, feed.entry[0], title='New Employee Handbook',
                                     description='HR Packet', folder_name='My Folder')

この例では、代わりに gdata.data.MediaSource オブジェクトを UploadAttachment() に渡しています。 あります。また、コンテンツ タイプは渡されません。コンテンツ タイプは MediaSource オブジェクトで指定されます。

ウェブ添付ファイル

ウェブ添付ファイルは特殊な種類の添付ファイルです。ウェブ上の他のファイルへのリンクです filecabinet の掲載情報に追加できます。この機能は、「URL でファイルを追加」機能に似ています。Google サイトの UI でアップロード方法を選択する。

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

この例では、ユーザーのコンテンツ フィードで見つかった最初の filecabinet の下にウェブ添付ファイルを作成します。 タイトルと説明(省略可)が「GoogleLogo」に設定されている「ナイスカラー」の 2 行になります

uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'filecabinet')
feed = client.GetContentFeed(uri=uri)

parent_entry = feed.entry[0]
image_url = 'http://www.google.com/images/logo.gif'
web_attachment = client.CreateWebAttachment(image_url, 'image/gif', 'GoogleLogo',
                                            parent_entry, description='nice colors')

print 'Created!'

この呼び出しにより、画像へのリンクが「http://www.google.com/images/logo.gif」に作成されます。filecabinet にあります。

トップへ戻る



コンテンツの更新

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

あらゆる種類のエントリのメタデータ(title、pageName など)とページ コンテンツは、 クライアントの Update() メソッドを使用します。

次の変更を加えて listpage を更新する例を次に示します。

  • タイトルが「更新後のタイトル」に変更されます。
  • ページの HTML コンテンツが「更新された HTML コンテンツ」に更新されている
  • リストの最初の列見出しが「オーナー」に変更されます。
uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'listpage')
feed = client.GetContentFeed(uri=uri)

old_entry = feed.entry[0]

# Update the listpage's title, html content, and first column's name.
old_entry.title.text = 'Updated Title'
old_entry.content.html = 'Updated HTML Content'
old_entry.data.column[0].name = 'Owner'

# You can also change the page's webspace page name on an update.
# old_entry.page_name = 'new-page-path'

updated_entry = client.Update(old_entry)
print 'List page updated!'

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

新しい MediaSource オブジェクトを作成すると、添付ファイルの内容を置き換えることができます。 新しいファイル コンテンツを追加し、クライアントの Update() メソッドを呼び出します。添付ファイルの メタデータ(タイトルや説明など)も更新することも、メタデータのみを更新することもできます。 次の例では、ファイルの内容とメタデータを同時に更新しています。

import gdata.data

# Load the replacement content in a MediaSource. Also change the attachment's title and description.
ms = gdata.data.MediaSource(file_path='/path/to/replacementContent.doc', content_type='application/msword')
existing_attachment.title.text = 'Updated Document Title'
existing_attachment.summary.text = 'version 2.0'

updated_attachment = client.Update(existing_attachment, media_source=ms)
print "Attachment '%s' changed to '%s'" % (existing_attachment.title.text, updated_attachment.title.text)

トップへ戻る



コンテンツの削除

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

client.Delete(content_entry)

Delete() メソッドにコンテンツ エントリの edit リンクを渡すか、削除を強制することもできます。

# force=True sets the If-Match: * header instead of using the entry's ETag.
client.Delete(content_entry.GetEditLink().href, force=True)

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

トップへ戻る



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

attachment エントリには、ファイル コンテンツのダウンロードに使用できるコンテンツの src リンクが含まれています。 Google サイト クライアントには、DownloadAttachment() のリンクからファイルにアクセスしてダウンロードするためのヘルパー メソッドが用意されています。 最初の引数として、gdata.sites.data.ContentEntry またはダウンロード URI と、添付ファイルを保存するファイルパスを受け取ります。 なります。

この例では、特定の添付ファイル エントリを(self リンクのクエリによって)取得し、指定されたパスにファイルをダウンロードします。

uri = 'https://sites.google.com/feeds/content/site/siteName/1234567890'
attachment = client.GetEntry(uri, desired_class=gdata.sites.data.ContentEntry)

print "Downloading '%s', a %s file" % (attachment.title.text, attachment.content.type)
client.DownloadAttachment(attachment, '/path/to/save/test.pdf')

print 'Downloaded!'

添付ファイルのコンテンツ タイプに適したファイル拡張子を指定するかどうかは、アプリ デベロッパーが決定します。コンテンツ タイプ entry.content.type にあります。

ファイルをディスクにダウンロードできない場合があります(アプリが Google App Engine で実行されている場合など)。 このような場合は、_GetFileContent() を使用してファイルのコンテンツを取得し、メモリに保存します。

このダウンロード例は、メモリへの添付ファイルです。

try:
  file_contents = client._GetFileContent(attachment.content.src)
  # TODO: Do something with the file contents
except gdata.client.RequestError, e:
  raise e

トップへ戻る

ACL フィード

共有権限(ACL)の概要

ACL フィードの各 ACL エントリは、特定のエンティティ(ユーザー、ユーザーのグループ、ドメイン、 デフォルト アクセス(一般公開サイト)でアクセスできます。明示的なアクセス権を持つエンティティに対してのみ、エントリが表示されます。1 つのエントリが表示されます。 [アクセス権を持つユーザー] のGoogle サイト UI の共有画面に表示されます。そのためドメイン管理者は表示されません 権限は付与されません。

ロール

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

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

スコープ

スコープ要素は、このアクセスレベルを持つエンティティを表します。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 値を指定することはできません。 「owner」に設定読み取りまたは書き込みのみ可能です

ACL フィードの取得

ACL フィードは、サイトの共有権限の管理に使用でき、GetAclFeed() メソッドを使用して取得できます。

次の例では、SitesClient オブジェクトで現在設定されているサイトの ACL フィードを取得します。 権限エントリを出力します。

print "Fetching acl permissions of site '%s'...\n" % client.site

feed = client.GetAclFeed()
for entry in feed.entry:
  print '%s (%s) - %s' % (entry.scope.value, entry.scope.type, entry.role.value)

クエリが成功すると、feed は以下を含む gdata.sites.data.AclFeed オブジェクトになります。 gdata.sites.data.AclEntry のリスティング。

SiteFeed のエントリを操作する場合、各 SiteEntry には ACL フィードへのリンクが含まれます。 たとえば、次のスニペットはユーザーのサイトフィードの最初のサイトを取得し、その ACL フィードに対してクエリを実行します。

feed = client.GetSiteFeed()
site_entry = feed.entry[0]

print "Fetching acl permissions of site '%s'...\n" % site_entry.site_name.text
feed = client.GetAclFeed(uri=site_entry.FindAclLink())

サイトを共有する

: 特定の共有 ACL は、ドメインが かかる権限を許可する(例: G Suite ドメインのドメイン外部との共有が有効になっている場合)

API を使用して Google サイトを共有するには、gdata.sites.gdata.AclEntry を作成します。 gdata.acl.data.AclScopegdata.acl.data.AclRole の値。詳しくは、 利用可能な AclScopeACL フィードの概要セクション および AclRoles 値。

次の例では、サイトの読み取り権限をユーザー「user@example.com」に付与します。

import gdata.acl.data

scope = gdata.acl.data.AclScope(value='user@example.com', type='user')
role = gdata.acl.data.AclRole(value='reader')
acl = gdata.sites.gdata.AclEntry(scope=scope, role=role)

acl_entry = client.Post(acl, client.MakeAclFeedUri())
print "%s %s added as a %s" % (acl_entry.scope.type, acl_entry.scope.value, acl_entry.role.value)

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

1 人のユーザーとサイトを共有するのと同じように、 Google グループまたは G Suite ドメインです。必要な scope の値を以下に示します。

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

scope = gdata.acl.data.AclScope(value='group_name@example.com', type='group')

ドメイン全体への共有:

scope = gdata.acl.data.AclScope(value='example.com', type='domain')

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

共有権限の変更

サイトの既存の共有権限を取得するには、まず問題の AclEntry を取得し、権限を変更します その後、クライアントの Update() メソッドを呼び出して、サーバー上で ACL を変更します。

この例では、サイトを共有するセクションの acl_entry を修正しています。 「user@example.com」を更新することで、ライター(共同編集者):

acl_entry.role.value = 'writer'
updated_acl = client.Update(acl_entry)

# To force the update, even if you do not have the latest changes to the entry:
# updated_acl = client.Update(acl_entrys, force=True)

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

共有権限の削除

共有権限を削除するには、まず AclEntry を取得してから、クライアントの Delete() メソッドを呼び出します。

client.Delete(acl_entry)

Delete() メソッドに ACL エントリの edit リンクを渡すか、削除を強制することもできます。

# force=True sets the If-Match: * header instead of using the entry's ETag.
client.Delete(acl_entry.GetEditLink().href, force=True)

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

トップへ戻る

特別なトピック

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

以前に取得したフィードやエントリを取得する場合は、次のように指示することで効率を向上させることができます。 リストまたはエントリが最後に取得されてから変更されている場合にのみ、サーバーに送信されるようになります。

このような条件付き取得を行うには、ETag 値を GetEntry() に渡します。たとえば、既存の entry オブジェクトがあるとします。

import gdata.client

try:
  entry = client.GetEntry(entry.GetSelfLink().href, desired_class=gdata.sites.data.ContentEntry, etag=entry.etag)
except gdata.client.NotModified, error:
  print 'You have the latest copy of this entry'
  print error

GetEntry()gdata.client.NotModified 例外をスローすると、エントリの ETag はサーバー上のバージョンと一致するため、最新のコピーを取得できます。 ただし、別のクライアントまたはユーザーが変更を加えた場合は、新しいエントリが entry に返されます。 例外はスローされません

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

トップへ戻る