重要: このドキュメントは 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 の使い方を実演します。そのため、特定の操作(コンテンツの変更など)を行うには認証が必要になります。プログラムは、 AuthSub、OAuth、または 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
の形式を使用してください。
注: このガイドの残りの部分では、変数 client
に SitesClient
オブジェクトを作成したことを前提としています。
以前の Google サイト API に対する認証
Python クライアント ライブラリは、公開フィードまたは非公開フィードの操作に使用できます。Site Data API では、Google ドキュメント、スプレッドシート、 フィードを選択します。たとえば、Google Chat のコンテンツ フィードを 更新は行わない場合、認証済みのクライアントが必要です。これを行うには、 ClientLogin のユーザー名/パスワード認証、AuthSub、 OAuth。
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 パスが命名されます。
page_name
(存在する場合)a-z, A-Z, 0-9, -, _
を満たす必要があります。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.AclScope
と gdata.acl.data.AclRole
の値。詳しくは、
利用可能な AclScope
の ACL フィードの概要セクション
および 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 リファレンス ガイドをご覧ください。