Flickr API を GWT 2.1 で使用してみる
最近、oxoxo [ゼロバイゼロ]のサイトを流行りのHTML5&GWTでつくろうと奮闘中。その備忘録。
■Google Web Toolkit 2.1.1で、JSONP を利用して、flickrへの呼び出し(photosetの取得)を以下のように実装してみた。
・準備
※GWTでJSONPを使う方法は、
http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/jsonp/client/JsonpRequestBuilder.html
<ProjectName>.gwt.xmlに、
<inherits name=’com.google.gwt.jsonp.Jsonp’/>
を追加する。そうしないと、
No source code is available for type com.google.gwt.jsonp.client.JsonpRequestBuilder; did you forget to inherit a required module?
と、実行時に怒られる。最初、web.xmlに追加していてハマった。。
・呼び出し
builder.setCallbackParam("jsoncallback"); // [1]
builder.requestObject(FLICKR_PHOTOSET_URL, // [2]
new AsyncCallback<FlickrRsp>() {
public void onFailure(Throwable caught) {
//…
}
public void onSuccess(FlickrRsp result) {
JsArray<FlickrPhoto> photos = result.getPhotos();
String debugOut = "ids: ";
for(int i=0; i < photos.length(); i++) {
FlickrPhoto photo = photos.get(i);
debugOut += photo.getId();
}
dbgLabel.setText(debugOut);
dbgLabel.setVisible(true);
}
});
}
//…
[1]callback関数を変更する必要がある。
理由:
例えば[2]でセットするURLを、以下のように定義したとする。
"http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&format=json&api_key=xx&photoset_id=xx";
すると、GWTは実行時に以下のようなHTTP GETリクエストを発行する。fireBugとCocoaPacketAnalyzerで確認。
GET /services/rest/?method=flickr.photosets.getPhotos&format=json&api_key=xx&photoset_id=xx&callback=__gwt_jsonp__.I0.onSuccess
要は、末尾にcallbackを指定するパラメータを勝手に付加するらしい。
しかし、flickr APIのデフォルトのコールバック関数名は、jsonFlickrApi なので、関数名が一致せず、コールバックが呼び出されず、TIMEOUTしてしまう。onFailure() が呼ばれる。
Failed to send the message. Timeout while calling <url>.
そのため、先述のsetCallbackParamで、”jsoncallback”を入れる必要がある。
jsoncallback については、 http://www.flickr.com/services/api/response.json.html
そうすると、以下のようなHTTP GETリクエストが発行され、onSuccess() がコールされるようになる。
GET /services/rest/?method=flickr.photosets.getPhotos&format=json&api_key=xx&photoset_id=xx&jsoncallback=__gwt_jsonp__.I0.onSuccess
Recent entries
- jit.gl.gridshape の matrixoutput についてのメモ #max8
- jit.gl.pix で簡易モーションブラー #max8 #jitter
- jit.gl.pix で Gold Noise #max8 #jitter
- Gen で配列をつくる検討 #Max8
- Package Managerで配布されているease objectを使いやすくしてイージング #max8
- Node for Max を用いて、定形外のUDPデータを受信 #Max8 #n4m
- 平ハウス物語 – 山田尚子監督作品 非公式ファンイベント
- The Splendid Expression – GITADORA×NOSTALGIA
- ghost in my place【from DEEMO II】
- EP “Boys O’Clock”
- 7th Album “多次元宇宙論”
- LEON.jpのWEB特集「大人のいい時間」にAromが紹介されました。
- 音できらめくキャンドルライト Arom(第2世代)発売開始
- EP “Strange Story”
- 都市の呼吸【from Cytus II】