2008-04-24

Picasa Web Albums Data API を使って画像のジオタグを取得する

YouTube フィードのジオタグには2とおりの表現がある?
YouTube Data API を使って、動画の位置情報であるジオタグを取得しようと調べたのですが、そのジオタグは、フィードの中で 2とおりの表現があるようです。1つはタグ(フィードでいうカテゴリ)を使った方法で、もう1つは GeoRSS を使った方法です。
YouTube 動画の位置情報に続いて、ついでに Picasa 画像の位置情報であるジオタグを取得する方法を調べてみました。

Picasa や YouTube のフィードは、Google Data API の上で成り立っているので、YouTube と同じく Picasa のフィードも、画像が位置情報を持つときは、GeoRSS を使ってその位置情報を表現します。

↓こんな感じです。まったく同じですね。プロトコルやフォーマットが同じ、しかもオープンな仕様なので素晴らしい。新しく学習するストレスがなく大助かりです。
<entry>
<georss:where>
<gml:Point>
<gml:pos>10.309514999389648 123.90380859375</gml:pos>
</gml:Point>
</georss:where>
</entry>
で、JavaScript から Picasa Web Albums Data API を使って、その位置情報を取得してみました。↓こんな感じです。

API の URL が違うことを除けば、YouTube Data API とほぼ同じコードになります。繰り返しになりますが、それって素晴らしい。
// http://picasaweb.google.co.jp/<user>/<album>/photo#<photoid>
var picasa = c.match(/^http:\/\/picasaweb\.google\.co\.jp\/([^\/]+)\/([^\/]+)\/photo#([0-9]+)$/);
if (picasa) {

// http://code.google.com/apis/picasaweb/
var url = 'http://picasaweb.google.co.jp/data/entry/base/user'
+ '/' + picasa[1]
+ '/album/' + picasa[2]
+ '/photoid/' + picasa[3]
+ '?callback={fn}'
+ '&alt=json-in-script';

$(document).jsonp(url, function(json) {
var georss = json
.entry
.georss$where;
if (georss) {
georss = georss
.gml$Point
.gml$pos
.$t
.split(/\s+/);

var point = new GLatLng(georss[0], georss[1]);
});
}
Picasa ウェブアルバムの画像の URL から Picasa Web Albums Data API の URL を組み立ててフィードを取得し、その中の GeoRSS から位置情報である緯度と経度を取得しています。

Picasa Web Albums Data API を使って画像を特定するには、ユーザ名、アルバム名(またはアルバムID)、画像IDが必要です。Picasa ウェブアルバムの URL からは、ユーザ名、アルバム名、画像ID が取得できるので、その情報を使ってフィードの URL を組み立てています。

後は JSONP (json-in-script) を使って、フィードを JSON 形式で取得し、その中から GeoRSS を探すだけです。そして GeoRSS が存在すれば、緯度と経度を取得するといった具合です。

この緯度と経度を使って、Google マップに何か効果を与えるとった流れになるんでしょうね。作り手のアイディア次第ってところですね。

0 件のコメント: