WebService::PhotoZou::Exif をでっちあげる #
で、さっそくもろもろ情報取得しようとしてみたが、あんまし欲しい情報がはいってない
「Exif情報が表示されるようになりました 」というのは、表示されてるだけで、API からは取得できないのね
しかたないので、正式に API で対応するまででっちあげることにした
- 方法 1 : photo_info で取得した original_image_url からオリジナル画像を取得して解析する
- メリット : 画像に残っている情報は根こそぎゲット
- デメリット : オリジナル画像がでかいと、当然その分取得に時間かかる
- 方法 2 : フォト蔵の HTML を解析して、表示されている情報を取得
- メリット : HTML を取得する程度なら、時間はそんなにかからない
- デメリット : 表示されているものしか取得できない。HTML の構造が変わる可能性あり
そのうち API 経由で取得できるようになるだろうから、方法 2 で。
(2007/07/03 追記) WebService::PhotoZou::photo_info が undef 返してる時のこと考慮してなかったので、一行追加
package WebService::PhotoZou::Exif;
use strict;
use warnings;
use base 'WebService::PhotoZou';
use LWP::Simple;
use HTML::TreeBuilder::Select;
use Encode;
sub exif_info {
my ($self, %param) = @_;
my $content = $self->photo_info(%param);
return unless $content; # 2007/07/03
my $text = $content->{url} ? LWP::Simple::get($content->{url}) : '';
$text = decode('utf8', $text);
my $tree = HTML::TreeBuilder::Select->new;
$tree->parse_content($text);
my @selections = $tree->select('div#media_info_extend div.list div.title_extend,div.photodata_extend');
my %hash = map { $_->as_text; } @selections;
$content->{exif} = \%hash;
return $content;
}
1;