Show
Ignore:
Timestamp:
05/07/05 04:56:48 (4 years ago)
Author:
ogawa
Message:

Now support 100+ public photos.
Add MTFlickrPublicPhotoUploadDate, MTFlickrPublicPhotoTakenDate, MTFlickrPublicPhotoOwnerName tags.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • FlickrPublicPhotos/trunk/FlickrPublicPhotos.pl

    r63 r65  
    11# A plugin for adding "FlickrPublicPhotos" container and related tags 
    22# 
    3 # Release 0.11 (Mar 6, 2005) 
     3# Release 0.12 (May 7, 2005) 
    44# 
    55# This software is provided as-is. You may use it for commercial or  
     
    1616    $plugin = new MT::Plugin(); 
    1717    $plugin->name("FlickrPublicPhotos Plugin"); 
    18     $plugin->description("Add FlickrPublicPhotos container and related tags. Version 0.11"); 
     18    $plugin->description("Add FlickrPublicPhotos container and related tags. Version 0.12"); 
    1919    $plugin->doc_link("http://as-is.net/hacks/2005/05/flickrpublicphotos_plugin.html"); 
    2020    MT->add_plugin($plugin); 
     
    2222 
    2323use MT::Template::Context; 
     24use MT::Util qw(offset_time_list); 
    2425 
    2526MT::Template::Context->add_container_tag('FlickrPublicPhotos' => \&photos); 
     
    2728MT::Template::Context->add_tag('FlickrPublicPhotoURL' => \&photo_url); 
    2829MT::Template::Context->add_tag('FlickrPublicPhotoImgURL' => \&photo_img_url); 
     30MT::Template::Context->add_tag('FlickrPublicPhotoUploadDate' => \&date_upload); 
     31MT::Template::Context->add_tag('FlickrPublicPhotoTakenDate' => \&date_taken); 
     32MT::Template::Context->add_tag('FlickrPublicPhotoOwnerName' => \&owner_name); 
    2933 
    3034sub photos { 
     
    7074} 
    7175 
     76sub date_upload { 
     77    my $args = $_[1]; 
     78    my $t = $_[0]->stash('flickr_public_photo')->date_upload; # epoch format 
     79    my @ts = $args->{utc} ? 
     80        gmtime $t : offset_time_list($t, $_[0]->stash('blog_id')); 
     81    $args->{ts} = sprintf "%04d%02d%02d%02d%02d%02d", $ts[5]+1900, $ts[4]+1, @ts[3,2,1,0]; 
     82    MT::Template::Context::_hdlr_date($_[0], $args); 
     83} 
     84 
     85sub date_taken { 
     86    my $args = $_[1]; 
     87    $args->{ts} = $_[0]->stash('flickr_public_photo')->date_taken; 
     88    MT::Template::Context::_hdlr_date($_[0], $args); 
     89} 
     90 
     91sub owner_name { 
     92    $_[0]->stash('flickr_public_photo')->owner_name; 
     93} 
     94 
    7295package MT::Plugin::FlickrPublicPhotos::Photo; 
    7396 
     
    79102 
    80103sub title { 
    81     my $this = shift; 
    82     $this->{title} || ''; 
     104    $_[0]->{title} || ''; 
    83105} 
    84106 
     
    95117    my $url = 'http://photos' . $this->{server} . '.flickr.com/' . $this->{id} . '_' . $this->{secret} . '_' . $size . '.jpg'; 
    96118    $url; 
     119} 
     120 
     121# INPUT/OUTPUT: UNIX epoch format (should be converted to "YYYYMMDDHHMMSS") 
     122sub date_upload { 
     123    $_[0]->{dateupload} || ''; 
     124} 
     125 
     126# INPUT: MySQL datetime in owner's localtime 
     127# OUTPUT: "YYYYMMDDHHMMSS" format 
     128sub date_taken { 
     129    my $date = $_[0]->{datetaken}; 
     130    if ($date =~ /(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/) { 
     131        sprintf "%04d%02d%02d%02d%02d%02d", $1, $2, $3, $4, $5, $6; 
     132    } elsif ($date =~ /(\d\d\d\d)-(\d\d)/) { 
     133        sprintf "%04d%02d01000000", $1, $2; 
     134    } elsif ($date =~ /(\d\d\d\d)/) { 
     135        sprintf "%04d0101000000", $1; 
     136    } 
     137} 
     138 
     139sub owner_name { 
     140    $_[0]->{ownername} || ''; 
    97141} 
    98142 
     
    131175    my @photos = (); 
    132176    my $nsid = $this->resolve_nsid($uname); 
    133     my $rsp = $this->execute_method('flickr.people.getPublicPhotos', 
    134                                     { user_id => $nsid }); 
    135     die "Flickr request failed: " . $rsp->{error_message} . "\n" 
    136         unless $rsp->{success} == 1; 
    137  
     177    my ($page, $pages) = (1, 0); 
    138178    my $xpath = new XML::Parser::Lite::Tree::XPath(); 
    139     $xpath->set_tree($rsp->{tree}); 
    140     my @photoNodes = $xpath->select_nodes('/photos/photo'); 
    141     for my $node (@photoNodes) { 
    142         my $photo = new MT::Plugin::FlickrPublicPhotos::Photo(); 
    143         $photo->{id} = $node->{attributes}{id}; 
    144         $photo->{nsid} = $nsid; 
    145         $photo->{secret} = $node->{attributes}{secret}; 
    146         $photo->{server} = $node->{attributes}{server}; 
    147         $photo->{title} = $node->{attributes}{title}; 
    148         push @photos, $photo; 
    149     } 
     179    do { 
     180        my $rsp = $this->execute_method('flickr.people.getPublicPhotos', 
     181                                        { user_id => $nsid, 
     182                                          page => $page, 
     183                                          extras => 'license,date_upload,date_taken,owner_name,icon_server' 
     184                                          }); 
     185        die "Flickr request failed: " . $rsp->{error_message} . "\n" 
     186            unless $rsp->{success} == 1; 
     187        $xpath->set_tree($rsp->{tree}); 
     188        $pages ||= ($xpath->select_nodes('//photos'))[0]->{attributes}{pages}; 
     189        my @photoNodes = $xpath->select_nodes('/photos/photo'); 
     190        for my $node (@photoNodes) { 
     191            my $photo = new MT::Plugin::FlickrPublicPhotos::Photo(); 
     192            $photo->{id} = $node->{attributes}{id}; 
     193            $photo->{nsid} = $nsid; 
     194            $photo->{secret} = $node->{attributes}{secret}; 
     195            $photo->{server} = $node->{attributes}{server}; 
     196            $photo->{title} = $node->{attributes}{title}; 
     197            $photo->{license} = $node->{attributes}{license}; 
     198            $photo->{dateupload} = $node->{attributes}{dateupload}; 
     199            $photo->{datetaken} = $node->{attributes}{datetaken}; 
     200            $photo->{datetakengranularity} = $node->{attributes}{datetakengranularity}; 
     201            $photo->{ownername} = $node->{attributes}{ownername}; 
     202            $photo->{iconserver} = $node->{attributes}{iconserver}; 
     203            push @photos, $photo; 
     204        } 
     205    } while ($page++ < $pages); 
    150206    return @photos; 
    151207}