はじめに
デジカメで撮った写真に含まれるメタデータフォーマットであるExifを利用してマッシュアップを作りたいと思います。
対象読者
マッシュアップに興味のある方や写真を利用したサービスを作成したい方に参考になると思います。
必要な環境
Perl 5.8以上が動作する環境が良いと思います。基本動作の確認はMac OS Xを利用しました
解説内容
処理の流れ
今回は写真共有サイトFlickrから写真を収集し、その写真のExif情報からカメラの型番を抽出して、価格.comの商品検索APIを利用して商品情報を取得し、最終的にHTMLを生成するマッシュアップです。流れとしては次のとおりです。
- FlickrのPublic photos feedから写真を抽出
- Image::ExifToolを使って抽出した写真のExif情報を取得
- 収集したExif情報を価格.com 商品検索APIに渡して、商品情報を取得
- 取得した商品情報の一覧をHTMLとして生成
ソースコード
紙面の都合上、全体のソースコードはこちらからダウンロードしてください。
今回は主に次のCPANモジュールを利用しました。
フィードの解析
フィードの解析では、フィードの中にある写真へのURLを取得します。XMLパーサはXML::LibXMLやXML::RSSなどが代表的なCPANモジュールですが、今回は興味本位でWeb::Scraperモジュールを使ってみたいと思います。FlickrのPublic photosのフィードにはenclosureがありますので、これを利用して写真へのURLを取得します。
my $enclosures = scraper { process 'link[rel="enclosure"]', 'url[]' => '@href'; result 'url[]'; }->scrape($res->content);
Exif情報の抽出
フィードから取得した写真へのURLを使って、LWP::UserAgentモジュールで写真をGETします。GETした写真をImage::ExifToolに渡してExif情報を取得します。
my $tool = Image::ExifTool->new();
my $info = $tool->ImageInfo(\$ua->get($uri)->content);
$info->{'Model'};#Model
タグ(機種や型番)の情報にアクセス
Exif情報はタグと呼ばれる要素で構成されています。非常に多くのタグが存在します。基本的なタグのほかにメーカーが独自に定義したタグなもあります。Image::ExifToolのPODにタグ情報が掲載されていましたのでご参照ください。
価格.com 商品検索API
価格.com WEBサービスの商品検索APIを利用して商品情報を取得します。リクエストパラメータは次のように設定します。
- Keyword=Exif情報の
Model
タグ - ResultSet=medium (画像情報を取得するため)
- CategoryGroup=ALL
- SortOrder=pricerank (価格の昇順)
- PageNum=1 (最初の5件のみ取得)
上記のパラメータでURLを生成して価格.comから情報を取得します。
サンプルの表示
表示するためにHTMLを生成します。単にHTMLだけ出力するのは面白くないので、マッシュアップらしく(?)、JSONを利用してみました。JSONならばJavaScriptを利用してデータを操作できますので多くのデータも柔軟に対処できます。JSON::AnyモジュールはJSONの扱いを簡単にしてくれるモジュールです。JSON::Any::objToJson
メソッドでPerlで使われるオブジェクトをJSON形式に変換してくれます。
my @json_data; my $j = JSON::Any->new; my $json = $j->objToJson(\@json_data);
まとめ
今回はシンプルに1つの流れを追いかけるだけでしたが、写真を継続的に入手すればカメラのトレンドが分かるようになりますね。また今回はExif情報の中の機種や型番を表すModel
タグを扱いましたが、Exif情報にはほかにも写真に関連する多くの情報があります。例えば解像度を表すXResolution
、YResolution
タグを参照して解像度のトレンドを調べるのも面白いと思いますし、GPS情報を参照して地図サービスとのマッシュアップも面白いと思います。
実は今回は写真と地図データを利用したFlickrVisionのようなマッシュアップを紹介しようと思っていましたが、GPS情報を持つ写真が非常に少なくて断念しました。もう少しGPS情報のある写真が普及してくればより面白いマッシュアップを作ることができると思います。
皆さんも携帯電話やデジカメでたくさんの写真をお持ちでしょうから、Exif情報を活用したサービスの作成にぜひチャレンジしてみてください。
参考資料
- JEITAでExif 2.21の仕様が公開されています。
- Flickr
- Image::ExifTool
- 価格.com WEBサービス