#!/usr/local/bin/perl -w $|=1; use strict; use Flickr::API; use Data::Dumper; use XML::Parser::Lite::Tree::XPath; use Getopt::Long; use Data::Dumper; use LWP::Simple; # config my $count = 6; my $theuser = "http://flickr.com/photos/jzawodn"; my $type = 'photos'; my $email = 'jeremy@zawodny.com'; my $pass = 'XXXXXX'; my $include_file = "/home/jzawodn/w/blog/flickr.inc"; my $image_dir = "/home/jzawodn/w/i/flickr/"; my $key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; # exec my $xpath; my $api = new Flickr::API({'key' => $key}); my $response; my $user = finduser($theuser); $response = $api->execute_method ('flickr.people.getPublicPhotos', { 'user_id' => $user, 'per_page' => $count, 'page' => 1}); if ($response->{success} == 0) { die "Error $response->{error_code}: $response->{error_message}" . "\nDid you remember to pass --email and --password?\n"; } #print Data::Dumper->Dump([$response->{tree}]), "\n"; my $photolist = new XML::Parser::Lite::Tree::XPath($response->{tree}); my @bphoto = $photolist->select_nodes('/photos/photo'); my ($photo, $photofile, @photofiles); open INC, ">$include_file" or die "$!"; print INC "
\n"; chdir $image_dir or die "$!"; # see: http://www.flickr.com/services/api/misc.urls.html my $cnt = 1; my $cols = 2; # TODO: titles foreach (@bphoto) { $photo = "http://static" . ".flickr.com/" . $_->{attributes}->{server} . '/' . $_->{attributes}->{id} . "_" . $_->{attributes}->{secret} . '_s' . ".jpg"; $photofile = "$_->{attributes}->{id}_$_->{attributes}->{secret}_s.jpg"; my $flickr_url = "http://www.flickr.com/photos/jzawodn/$_->{attributes}->{id}/"; push @photofiles, $photofile; # fetch if not cached if (not -e $photofile or -z $photofile) { open FILE, ">$photofile" or die "$!"; warn "get $photo\n" if -t; my $g = get($photo); if (not $g) { warn "error getting $photo"; next; } sleep 1; print FILE $g; close FILE; } print INC qq[ ]; $cnt++; last if $cnt == $count+1; print INC "\n
\n" if $cnt % $cols; } print INC "\n
\n"; close INC; exit; sub finduser { my $fuser = shift; my ($xpath, @username, $userid); if ($fuser =~ m!http://!i) { $response = $api->execute_method ('flickr.urls.lookupUser', { 'url' => $fuser, }); $xpath = new XML::Parser::Lite::Tree::XPath($response->{tree}); @username = $xpath->select_nodes('/user'); $userid = $username[0]->{attributes}->{id}; } else { $response = $api->execute_method ('flickr.people.findByUsername', { 'username' => $fuser, }); $xpath = new XML::Parser::Lite::Tree::XPath($response->{tree}); @username = $xpath->select_nodes('/user'); $userid = $username[0]->{attributes}->{nsid}; } return $userid; }