#!/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;
}