2010年11月13日

Google API Python Client

GData 3.0 に対応したクライアントライブラリのアルファバージョンがリリースされましたので、手元で動かしてみます。 作者のブログ記事 (API Client Alpha) でリリースアナウンスが出ています。 たぶん中心人物と思われる Joe Gregorio は、AtomPub (RFC5023) や URI-Templates (URI Template Library) などを設計している人です。

google-api-python-clientgdata-python-client と後方互換はなさそうです。 discovery-based でない API は気にしない!と書いてあります。 設計ドキュメント (Client Design) は英語ですが分かりやすいので良いですね。

インストール

プロジェクトのページ (google-api-python-client) に手順が記載されていますので、それに沿ってサンプルを動かします。 ソースコード管理には Mercurial を使っていますので、あらかじめインストールしておきます。

ソースコードを取得して、中身を確認します。

$ hg clone https://google-api-python-client.googlecode.com/hg/ google-api-python-client

$ cd google-api-python-client

$ hg log | tail
changeset:   1:7b3703f5df5e
user:        Joe Gregorio <jcgregorio@google.com>
date:        Wed Aug 18 13:19:21 2010 -0400
summary:     Starting to cleanup, organize files, and make it look like a real p
roject.

changeset:   0:6cf14b65fc0e
user:        jcgregorio@wpgntai-ubiq72.hot.corp.google.com
date:        Mon Apr 19 11:12:52 2010 -0700
summary:     initial

$ ls
apiclient/                Makefile       samples/        TODO
buzz_gae_client.py        oacurl.py      setpath.sh      upload-diffs.py
buzz_gae_client_tests.py  oauth_wrap.py  setup.py        uritemplate/
discovery_extras.py       oauth2/        setup_utils.py
functional_tests/         README         simplejson/
httplib2/                 runtests.py    tests/

apiclient がメインのソースコードで samplesサンプルコード です。 httplib2, oauth2, simplejson, uritemplate は依存するライブラリです。 あとは雰囲気を読み取るなり中身を読むなり、ということで。

サンプルを動かす

Buzz のサンプルを動かします。まずはパスを通して認証用の URL を出力させます。 Python の webbrowser モジュールを使えばこのコピペ作業は省略できますので、パッチを書いても良いかもしれません。 なお、きちんとインストールしたい場合には setup.pyinstall ターゲットを使いますが、今回は環境を書き換えることにします。

$ cat setpath.sh
export PYTHONPATH=`pwd`:$PYTHONPATH

$ source setpath.sh

$ cd samples/buzz

$ python three_legged_dance.py
!!! 認証画面の URL が表示されますので、ブラウザのアドレスバーに貼り付けます。 !!!

認証のフローは次のようになります。 Google の認可はサービスごとに独立しています (scope 制御が厳密) ので、Twitter などの単機能のサービスに比べると若干複雑です。

アプリケーションの確認画面:

アカウントの認可画面:

確認コードの表示画面:

最後の画面で確認コードが表示されますので、これをコピーして、元のコマンドラインのプロンプトに書き戻します。 認証が終わると buzz.dat というファイルに認証情報が書き込まれます。 これは Python の pickle で書き出されます。

それでは、Buzz の API 経由でデータを読み込んでみます。 細かいことはさておき、何か JSON データが返ってくれば良いと思います。

$ python buzz.py
Retrieved the first two activities
Retrieved the next two activities
Added a new activity
Added a comment to the new activity
{u'actor': {u'id': u'{{ 一応伏せる }}',
            u'name': u'{{ 一応伏せる }}',
            u'profileUrl': u'{{ 一応伏せる }}'},
 u'content': u'This is a comment',
 u'id': u'tag:google.com,2010:buzz-comment:z13qx31zhmq0djcue221j14jbobexpftt:1289614289594000',
 u'kind': u'buzz#comment',
 u'links': {u'alternate': [{u'href': u'http://www.google.com/buzz/110902178337618378991/DRZRUz6oTiU',
                            u'type': u'text/html'}],
            u'inReplyTo': [{u'href': u'http://www.google.com/buzz/110902178337618378991/DRZRUz6oTiU',
                            u'ref': u'tag:google.com,2010:buzz:z13qx31zhmq0djcue221j14jbobexpftt'}],
            u'self': [{u'href': u'https://www.googleapis.com/buzz/v1/activities/110902178337618378991/@self/B:z13qx31zhmq0djcue221j14jbobexpftt/@comments/C:z13q
x31zhmq0djcue221j14jbobexpftt:1289614289594000?alt=json',
                       u'type': u'application/json'}]},
 u'originalContent': u'This is a comment',
 u'published': u'2010-11-13T02:11:29.594Z',
 u'updated': u'2010-11-13T02:11:29.594Z'}

まとめ

アルファ版ですが、何か動いているらしい、ということを確認できました。 次は、ソースコードを確認しながら実際の動作を見ていきます。

コメントを投稿