2010年9月1日

携帯向けPicasaViewer


Google App Engine for Java(GAE/J) と
Picasa Web Albums Data API で、
携帯電話用 Picasa Web ビューワ的なものを
組んでみました。今のところ、
自分のアルバムの画像しか見られませんが。

概要

原寸大を含めた、自由な大きさに縮小して、画像をダウンロード出来ます。
携帯用Picasa Web Albumって小さいサムネ画像しか見られないのが、
すごく不便じゃないですか?
パソコンで収集した画像をPicasaでPicasa Webと同期して、
携帯で見られるようにしてみようというわけです。
すでに似たようなサービスありそうですが、
あったら教えてください。ガラケー不便です・・・orz

動作要件

N-06Aで動作確認してます。
DoCoMoの携帯で、比較的最近のなら動くはずです・・・。
未確認ですが、AUやSoftbankでも動くんじゃないかな・・・?
ブラウザがCookieをサポートしていて、
pngやjpegを表示できれば多分動きます。

まぁ、動くっても大したサービスをするわけではないんですが。

アカウント認証

ちなみに、認証にはGoogleのAuthSub認証を使ってるので、
自分のプログラムではユーザIDやパスワードを扱ってません。
いろいろと大きな問題は起こらないはず・・・。 
と言いつつ、いかなる損害にも責任は負えませんのでご了承ください・・・。

なので、まぁ、これがちょっとした暇つぶしにでもなれば嬉しいです。

参考になったURLやつまづいた箇所

これらを組むに当たって参考になったURLや、
つまずいた箇所を紹介したいと思います。

APIドキュメント
JavaSE6 APIドキュメント 
Java Servlet 2.4 APIドキュメント(非公式日本語版)
Google App Engine APIドキュメント
Google Data API Client Libraryドキュメント
言うまでもなくAPIドキュメントです。Servletの日本語版はとても助かりました。

GAE/J 導入
スタート ガイド: Java - Google App Engine - Google Code
GAEの親切な日本語のチュートリアルです。
基本的にはこれに沿って導入すれば大体把握できるんじゃないかと。
(Firefoxだと、localhostへの接続が失敗したような気がしますが、再現しないので気にしないことにします。)
ただし、一部のコードが間違っていて、コンパイルエラーが出ます。
「JSPの使用」にあるサンプルコード、
resp.sendRedirect("/intl/ja/guestbook.jsp");
の、/intl/ja/guestbook.jspなんてものは無いので、
/guestbook.jspに変更します。

GData 導入
EclipseでGoogle APIプログラミング~環境の構築 | takulab
こちらを参考にGoogle Data APIを導入しました。わかりやすかったです。
ただ、activation.jarは、最近は標準でJDK辺りに組み込まれてるらしいので、
探さなくていいかも。

そういえば、 Eclipseのプロジェクトに、別個にダウンロードしたJDKを
代替JREとして設定したような気がするけど、なんでだったっけ・・・?

気合で動かす
Developer's Guide: Java - Picasa Web Albums Data API - Google Code
モット! モバイルプログラミング: Google Data API
この辺りを参考に、気合で。というか、細かいことはよく理解してません。
でも動くぜ!さすがGoogle先生や!

後者のブログで使われていますが、Google Data APIのドキュメントの
/gdata/java/sample/photos/PicasawebClient.java
は、簡単にアルバムやフォトを取得できて、大変お世話になりました。

AuthSub認証の設定
クリボウのプログラミングひとりごと: GAE/J の AuthSub で This website has not registered with Google to establish a secure connection for authorization requests. の警告をなくす方法
さすがに自分のプログラムにIDとパスワード入力してもらうのは嫌だったので、
こちらを参考にGoogleの認証を行うように設定しました。

IDからアルバムやフォトを取得
最後に、
How to get the absolute URL for the image (640 or 800 pixel size) - Google Picasa Web Albums API | Google グループ
こちらにを参考にわかったことですが、
特定のアルバムIDとフォトIDからAlbumEntryやPhotoEntryを取得するには、
PicasawebClient.javaに以下のように関数を追加すればできるようです。
public class PicasawebClient {
  ...
  private static final String ENTRY_PREFIX = "http://picasaweb.google.com/data/entry/api/user/";
  ...
  public AlbumEntry getAlbum(String albumID) throws IOException, ServiceException {
    String albumUrl = ENTRY_PREFIX + "default"
                      + "/albumid/" + albumID;

    return service.getEntry(new URL(albumUrl), AlbumEntry.class);
  }
  ...
  public PhotoEntry getPhoto(String albumID, String photoID) throws IOException, ServiceException {
    String photoUrl = ENTRY_PREFIX + "default"
                      + "/albumid/" + albumID + "/photoid/" + photoID;

    return service.getEntry(new URL(photoUrl), PhotoEntry.class);
  }
  ...
}
ちなみに、albumID、photoIDは、
AlbumEntry#getGphotoId()、PhotoEntry#getGphotoId()で取得できます。

1 件のコメント:

さくあや さんのコメント...

使わせていただきました!
有難うございました☆

友達にも見せれるように今後改良はされていかれるんでしょうか?