写真管理サービス Picasa Web Albums と GAE(Google App Engine)のマッシュアップ
Google App Engine上から、googleが提供している各種サービスにアクセスすることができます。 今回は、GAEから gdata API を使って、Picasa Web Albumsにアクセスして、 画像データを取得するサンプルを作成します。
実装手順
これは、Picasa Web Service上で公開されている画像を GAEから取得して一覧表示するサンプルです。 非公開に設定されている画像は取得できません。
- あなたのアカウントでPicasa Web Albums上に公開画像を用意
- Google App Engine SDKのバージョンの確認
- python版 gdata-API のダウンロード
- 必要なファイルの配置
- 作動テスト
非公開画像の取得
技術的には、 自分のPicasa Accountを使って、 AuthSubと呼ばれる認証の仕組み経由で、非公開設定の画像を取得することもできます。
AuthSubについては、こちらのブログ http://jugyo.org/blog/2924が非常に参考になります。
ステップ1 あなたのアカウントでPicasa Web Albums上に公開画像を用意
既に、Picasa Web Albums を使っていて、公開画像をアップロードしている場合は 次のステップへ。
Picasa Web Albums にアカウントを作成し、画像をアップロードします。 その際、公開画像として設定しておきます。
※ 以下では、foo@hoge.com のアカウントを使用しているとして説明します。
ステップ2 Google App Engine SDKのバージョンの確認
使っている Google App Engine SDK のバージョンを確認します。
1.1.7 より古い場合は、以下のページからダウンロードしてセットアップします。
ステップ3 python版 gdata-API のダウンロード
以下のページにアクセスして、gdata-py-1.2.3.tar.gz をダウンロード
ステップ4 必要なファイルの配置
今回作成する google app engine 用 作業ディレクトリ ./photo を作成します。
- ./photo以下に gdata-py-1.2.3.tar.gz を展開して出てきたフォルダ atom,gdata を配置します。
- その他必要な GAEのファイルを配置します。(以下の photo.py 他それぞれのファイルをクリックして取得)
作業用ディレクトリ ./photo/ は以下のようになります。
- photo.py ... アプリケーションファイル
- photo.html ... テンプレート
- app.yaml ... 定義ファイル
- index.yaml ... インデックス定義ファイル
- atom/ ... gdata-py-1.2.3.tar.gzを展開して得たフォルダ
- gdata/ ... gdata-py-1.2.3.tar.gzを展開して得たフォルダ
ポイントの説明
GAE上からではなく、gdata-py から直接Picasaウェブアルバムにアクセスする場合は、
client = gdata.photos.service.PhotosService()
の記述だけでPhotosServiceクラスのインスタンスを取得でき、使用可能になるのですが、 GAE上ではさらにもう一行記述の追加が必要です。
client = gdata.photos.service.PhotosService()
gdata.alt.appengine.run_on_appengine(client)
以上の記述手順でPhotoServiceのインスタンスを取得したら、 あとはユーザ名を指定して、公開されているフォトアルバム→画像にアクセスします。
以下のメソッドで、公開写真の一覧を photolist 配列に入れています。(photo.pyからの抜粋)
def getPhotolist(client,username):
photolist=[]
photos=None
albums = client.GetUserFeed(user=username)
for album in albums.entry:
photos = client.GetFeed(
'/data/feed/api/user/%s/albumid/%s?kind=photo'
% ( username, album.gphoto_id.text)
)
for photo in photos.entry:
photolist.append( photo.media.thumbnail[2].url )
return photolist
ステップ5 作動テスト
GAEのテストサーバを起動し、
$ python dev_appserver.py photo/
http://localhost:8080/ にアクセスします。
foo@hoge.com(あなたのアカウントに読み替えてください)でログインします。
追記
GAEから googleの各種サービスに gdata API 経由でアクセスするのは、 わかってしまえば簡単なのですが、 GAE の SDK が古いとうまく作動しなかったり、 ネット上に情報が少なかったり、 今回の例で言えば、picasa web service上に画像データの用意がない場合は、 事前に用意する作業が必要だったり、 結構、苦労しました。