Flickr::API2をちょっと読んでみたというお話

 flickr.photos.searchを使ってある案件のお手伝いをしたのですが、extrasパラメータで指定した値がレスポンスに入ってない。。。なので、調査のために蓋を開けてみたら驚愕。

# Flickr::API2::Base

sub _response_to_photos {
    my ($self, $photos) = @_;

    my @photos = map {
        Flickr::API2::Photo->new(
            api => $self->api,
            id => $_->{id},
            title => $_->{title},
            date_upload => $_->{date_upload},
            date_taken => $_->{date_taken},
            owner_id => $_->{owner},
            owner_name => $_->{owner_name},
            url_s => $_->{url_s},
            url_m => $_->{url_m},
            url_l => $_->{url_l},
            url_o => $_->{url_o},
            path_alias => $_->{path_alias},
        )
    } @{ $photos->{photo} };

    return @photos;
}

 えー。。。決め打ち><
 仕方ないので、githubからソースを持ってきて、以下のように変更。

diff --git a/lib/Flickr/API2/Base.pm b/lib/Flickr/API2/Base.pm
index d7f5673..e07a72f 100644
--- a/lib/Flickr/API2/Base.pm
+++ b/lib/Flickr/API2/Base.pm
@@ -37,20 +37,13 @@ sub _response_to_photos {
     my ($self, $photos) = @_;
 
     my @photos = map {
-        Flickr::API2::Photo->new(
-            api => $self->api,
-            id => $_->{id},
-            title => $_->{title},
-            date_upload => $_->{date_upload},
-            date_taken => $_->{date_taken},
-            owner_id => $_->{owner},
-            owner_name => $_->{owner_name},
-            url_s => $_->{url_s},
-            url_m => $_->{url_m},
-            url_l => $_->{url_l},
-            url_o => $_->{url_o},
-            path_alias => $_->{path_alias},
-        )
+        my $photo = $_;
+        $photo->{path_alias} = $_->{pathalias};
+        $photo->{date_taken} = $_->{datetaken};
+        $photo->{owner_id}   = $_->{owner};
+        $photo->{owner_name} = $_->{ownername};
+        $photo->{api} = $self->api;
+        Flickr::API2::Photo->new($photo)
     } @{ $photos->{photo} };
 
     return @photos;
diff --git a/lib/Flickr/API2/Photo.pm b/lib/Flickr/API2/Photo.pm
index 2218a10..3b4b3ae 100644
--- a/lib/Flickr/API2/Photo.pm
+++ b/lib/Flickr/API2/Photo.pm
@@ -33,11 +33,19 @@ has 'id' => (
     is => 'ro',
     required => 1,
 );
-has 'title' => ( is => 'rw' );
-has 'date_upload' => ( is => 'rw' );
-has 'date_taken' => ( is => 'rw' );
-has 'owner_id' => ( is => 'rw' );
-has 'owner_name' => ( is => 'rw' );
+
+has [qw/
+  title date_upload date_taken owner_id owner_name
+  description path_alias accuracy datetakengranularity dateupload farm 
+  geo_is_contact geo_is_family geo_is_friend geo_is_public
+  height_l height_m height_o height_s height_sq height_t height_z
+  iconfarm iconserver isfamily isfriend ispublic
+  lastupdate latitude longitude machine_tags media media_status
+  o_height o_width originalformat originalsecret
+  place_id server tags views
+  width_l width_m width_o width_s width_sq width_t width_z woeid
+  /] => ( is => 'rw' );
+
 has 'url_sq' => (
     is => 'rw',
     lazy => 1,
@@ -68,8 +76,6 @@ has 'url_o' => (
     lazy => 1,
     default => sub { $_[0]->populate_size_urls; $_[0]->url_o; },
 );
-has 'description' => ( is => 'rw' );
-has 'path_alias' => ( is => 'rw' );
 
 =head1 METHODS
 

 → Flickr::API2を修正したので、そのdiff · GitHub
 自分用quick hackにつき、特に報告しようとは思ってません。いい修正だとも思ってないので。