Google Spreadsheets Data API Developer's Guideを参考に、自分のSpreadsheetからのデータ取得を目指す。
■Spreadsheetの作成
Create a spreadsheetに従って、まずはTaskListというSpreadsheetを作成。
カラム名は、とりあえず以下のようにした。
どうやらClientLoginとAuthSubという二つの認証方式が用意されている模様。詳細はGoogle Account Authenticationを見ろとのことで、結構面倒くさい。
・ClientLogin
HTTPのPostリクエストで、EMailアドレス(アカウント名)・パスワード・アクセス先サービス名・アプリケーションの識別文字列などなどを送信し、レスポンスとして認証トークンを受け取るという方式。いったん認証トークンを受け取れば、以降はリクエストにこのトークンを付加することでGoogleサービスのデータを取得できるということらしい。
Webアプリケーションでこの認証方式を利用する場合、Post先はGoogleドメインのサーバーなので、Googleサーバーにホストしない限りはクロスドメインのアクセスとなる。よって、XMLHttpRequestによるバックグラウンドのログインとかはできない。
なので(だけかは知らないが)、基本的にこの方式はローカルコンピュータにインストールするようなクライアントアプリケーション向けとされている。
・AuthSub
リクエストパラメータとしてリダイレクト先のURL(=自分のアプリのURL)を付与した上で、Googleの認証用ページにユーザーを飛ばし、ユーザーデータに対するアプリアクセスをユーザー自身に承認させるという方式。ユーザーが了解したら、付与されたリダイレクト先URLにtoken付きで飛ばす。仕組み上、サーバーサイドで動作するロジックがないとtokenを取得できないのでHTML+JavaScriptじゃ難しそうだ。主に、サーバーサイドの動作環境を持つWebアプリケーション向け。
認証方式を色々試していて気づいたが、BloggerやGoogle Docs & Spreadsheetsで作業しつつブラウザのアドレスバーにフィードURIを打ち込んむと、Publishしていないデータに対してもアクセスできる。GoogleAccountにログインしていれば大丈夫ってことだろうか。
http://spreadsheets.google.com/feeds/list/key/worksheetId/private/full
これにアクセスできるかどうか、条件を変えて試してみたところ…
-Google Personalized Homeにログイン済み&Google Docs & Spreadsheetsには未ログイン
→ トークンがない、みたいな感じの認証エラーが出た
-Google Personalized Homeにログイン済み&Google Docs & Spreadsheetsにログイン済み
→ フィード取得成功
-いったんブラウザを終了し、再度アクセス
→ フィード取得成功
→ この状態でGoogle Docs & Spreadsheetsにアクセスすると、ログイン画面が出ずにいきなり文書一覧画面に。
どうやら、Google Accountのログイン状態というのはサービスごとに保存されているみたいで、privateフィードが取得できるかどうかは、Google Docs & Spreadsheetsにログイン済みであるかどうかで決まる模様。おそらく、Google Docs & Spreadsheetsのログイン画面で「ログイン状態を保存」すると、認証トークンがCookieに保存されるのだと思われる。
■privateとpublicの違い
どうも認証ロジックを組み込むのは面倒なので、別にタスクリストくらい見られてもいいからSpreadsheetはpublicにしてしまえばいい、と思っていた。が、publicにすると読み取り操作しかできなくなるらしい。ドキュメントには詳しく書いていなかったので、ざっと試したところ、こんな感じだった。
・public
-読み取り専用
-JSONによる取得可能
・private
-CRUD可能
-JSONによる取得不可能
privateな(Publishしていない)Spreadsheetはpublicとしてアクセスできないのは言うまでもないが、publicな(Publishした)Spreadsheetをprivateとしてアクセスすることもできない。データを表示するところはJSONのが楽なんだが…。だからといってpublicにすると更新ができなくなるとはどういうことだ。これじゃろくなアプリが作れないぞ。データに対する更新操作が必要なら、Spreadsheetはprivateにするしかなさそうだ。がっかり。
■Spreadsheetの作成
Create a spreadsheetに従って、まずはTaskListというSpreadsheetを作成。
カラム名は、とりあえず以下のようにした。
- priority
- title
- status
- startDate
- limitDate
- finishDate
- note
- tag
どうやらClientLoginとAuthSubという二つの認証方式が用意されている模様。詳細はGoogle Account Authenticationを見ろとのことで、結構面倒くさい。
・ClientLogin
HTTPのPostリクエストで、EMailアドレス(アカウント名)・パスワード・アクセス先サービス名・アプリケーションの識別文字列などなどを送信し、レスポンスとして認証トークンを受け取るという方式。いったん認証トークンを受け取れば、以降はリクエストにこのトークンを付加することでGoogleサービスのデータを取得できるということらしい。
Webアプリケーションでこの認証方式を利用する場合、Post先はGoogleドメインのサーバーなので、Googleサーバーにホストしない限りはクロスドメインのアクセスとなる。よって、XMLHttpRequestによるバックグラウンドのログインとかはできない。
なので(だけかは知らないが)、基本的にこの方式はローカルコンピュータにインストールするようなクライアントアプリケーション向けとされている。
・AuthSub
リクエストパラメータとしてリダイレクト先のURL(=自分のアプリのURL)を付与した上で、Googleの認証用ページにユーザーを飛ばし、ユーザーデータに対するアプリアクセスをユーザー自身に承認させるという方式。ユーザーが了解したら、付与されたリダイレクト先URLにtoken付きで飛ばす。仕組み上、サーバーサイドで動作するロジックがないとtokenを取得できないのでHTML+JavaScriptじゃ難しそうだ。主に、サーバーサイドの動作環境を持つWebアプリケーション向け。
認証方式を色々試していて気づいたが、BloggerやGoogle Docs & Spreadsheetsで作業しつつブラウザのアドレスバーにフィードURIを打ち込んむと、Publishしていないデータに対してもアクセスできる。GoogleAccountにログインしていれば大丈夫ってことだろうか。
http://spreadsheets.google.com/feeds/list/key/worksheetId/private/full
これにアクセスできるかどうか、条件を変えて試してみたところ…
-Google Personalized Homeにログイン済み&Google Docs & Spreadsheetsには未ログイン
→ トークンがない、みたいな感じの認証エラーが出た
-Google Personalized Homeにログイン済み&Google Docs & Spreadsheetsにログイン済み
→ フィード取得成功
-いったんブラウザを終了し、再度アクセス
→ フィード取得成功
→ この状態でGoogle Docs & Spreadsheetsにアクセスすると、ログイン画面が出ずにいきなり文書一覧画面に。
どうやら、Google Accountのログイン状態というのはサービスごとに保存されているみたいで、privateフィードが取得できるかどうかは、Google Docs & Spreadsheetsにログイン済みであるかどうかで決まる模様。おそらく、Google Docs & Spreadsheetsのログイン画面で「ログイン状態を保存」すると、認証トークンがCookieに保存されるのだと思われる。
■privateとpublicの違い
どうも認証ロジックを組み込むのは面倒なので、別にタスクリストくらい見られてもいいからSpreadsheetはpublicにしてしまえばいい、と思っていた。が、publicにすると読み取り操作しかできなくなるらしい。ドキュメントには詳しく書いていなかったので、ざっと試したところ、こんな感じだった。
・public
-読み取り専用
-JSONによる取得可能
・private
-CRUD可能
-JSONによる取得不可能
privateな(Publishしていない)Spreadsheetはpublicとしてアクセスできないのは言うまでもないが、publicな(Publishした)Spreadsheetをprivateとしてアクセスすることもできない。データを表示するところはJSONのが楽なんだが…。だからといってpublicにすると更新ができなくなるとはどういうことだ。これじゃろくなアプリが作れないぞ。データに対する更新操作が必要なら、Spreadsheetはprivateにするしかなさそうだ。がっかり。
コメント