2010-10-18

Blogger Glass に Google Data Python Library を組み込む #1

まずは調査。Google Data Python Library (以下、GData ライブラリ)ってどうやって使うのか? もちろん、GAE のアプリに組み込むことを前提として。

GData ライブラリとは?

(「Developer's Guide Overview - Google Data Protocol」より)
The Google Data Protocol provides a secure means for external developers to write new applications that let end users access and update the data stored by many Google products. External developers can use the Google Data Protocol directly, or they can use any of the supported programming languages provided by the client libraries.

Blogger や Google Docs を使ってユーザが蓄えたデータを見たり、編集したりするプログラムを作るための仕組み(プロトコル)が GData だ。それを使うために各種プログラミング言語用にライブラリが用意されていて、Python 用のものもその 1 つ。

GData (プロトコル) の基本は、HTTP (と XML) で GET や POST のリクエストを投げれば、結果が AtomPub XML で返ってくる、というものだ。このとき、肝になるのは以下の 3 つ。

  1. 認証
  2. リソースの指定
  3. データのフォーマット
認証

公開されているデータ(Blogger のブログ記事とか)は別として、ユーザのデータを閲覧、更新できるのは、それを作ったユーザ自身(と特別に許可された他のユーザ)だけだ。このため GData でデータをやったり取ったりするためには、まずそのプログラムが正当な許可を持っていることを確認しなければならない。それが「認証」。

GData で利用できる認証方式は以下の 3 つ。

このうち、ClientLogin はローカルな環境(例: Mac や iPhone)で動くプログラムで使う方式で、他の 2 つはウェブアプリ(例: GAE アプリ)で使うためのものだ。それぞれの詳細は、上記の各項目に張ったリンク先を参照のこと。

今回 Blogger Glass に組み込むのは、GAE 公式ドキュメントの記事で使われている AuthSub 方式にする。

AuthSub は、簡単に言うと、ウェブアプリの URL に対して認証を要求し、その証明としてトークンと呼ばれるデータを受け取る、という方式だ。受け取ったトークンは GData に対する HTTP リクエストのヘッダに埋め込んで利用する。

このあたりのことは、↑で挙げた GAE 公式ドキュメントの記事にサンプルコードとともに示されている。

リソースの指定

目的が閲覧にせよ、更新にせよ、まずは対象になるデータを特定しなければならない。この、対象となるデータの特定に利用する仕組みがクエリだ。クエリでは「○○という条件に合ったデータ」というように指定する。条件としては、個々のデータに割り当てられた ID であったり、カテゴリ(Blogger ではラベルと呼んでいる)であったり、作成日時や更新日時で絞り込むものなどがある。また、これらの条件はリクエストの URL として表現するので、ウェブアプリ中にリンクとして埋め込める。

Blogger のデータの場合、以下のような URL を用いることになる。

ブログ一覧
http://www.blogger.com/feeds/[user_id]/blogs
ブログの記事一覧
http://www.blogger.com/feeds/[blog_id]/posts/default

と、まあ、これはすでに Blogger Glass でも使っているものだ。GData ライブラリを使えば、これらの URL を知る必要はなくなる。gdata.blogger.BloggerClient のインスタンスに対して、get_blogs (ブログ一覧)や get_posts (記事一覧) を呼び出すだけだ。

データのフォーマット

データのフォーマットは、わたすのも受け取るのも Atom 形式になる。

Blogger Glass では Atom の解析を(必要最小限の分だけ)自前でやっているが、GData ライブラリを使うようになれば、そこもライブラリ任せにできる。

まとめ

GAE のドキュメントやサンプルコードを調べてわかったことは、これまで Blogger Glass の実装で、自前でやっていたフィードの取得や解析を GData ライブラリに任せてしまえる、ということだ。また、認証については、公開されているデータ(Blogger の記事など)であれば必要ない。なので、以下のようなコードで、BLOG_ID のブログの最新記事のデータを取得できる。

(GData ライブラリの利用方法)
import gdata.blogger.client
[...snip...]
client = gdata.blogger.client.BloggerClient()
query = gdata.blogger.client.Query(max_results=1)
feed = client.get_posts(BLOG_ID, query=query)

関連リンク

関連記事

0 件のコメント:

コメントを投稿