You will need to have the WWW::SmugMug::API module installed for this script to work. All of the others should be standard stuff.
#!/opt/bin/perl
use warnings;
use strict;
use Data::Dumper;
use WWW::SmugMug::API;
use File::Path;
my $APIKey='your_key';
my $username='your_login_email';
my $password='your_password';
my $dest_folder='/share/jgarland/Photos/Smugmug';
my $sm_api = WWW::SmugMug::API->new(
{
sm_api_key => $APIKey,
secure => 0
});
$sm_api->login_withPassword(
{
EmailAddress => $username,
Password => $password
});
&get_images;
$sm_api->logout;
exit;
sub get_images {
my $albums=$sm_api->albums_get();
foreach my $album (@{$albums->{'Albums'}}) {
my $images=$sm_api->images_get(
{
AlbumID => $album->{'id'},
AlbumKey => $album->{'Key'}
});
foreach my $image (@{$images->{'Images'}}) {
my $image_info=$sm_api->images_getInfo(
{
ImageID => $image->{'id'},
ImageKey => $image->{'key'}
});
download($album, $image_info);
}
}
}
sub download {
my $album=shift;
my $image_info=shift;
my $album_folder=$dest_folder . '/' . $album->{'Category'}->{'Name'} . '/' . $album->{'Title'};
my $image_file=$album_folder . '/' . $image_info->{'Image'}->{'FileName'};
unless(-d $album_folder) { mkpath $album_folder or die; }
if ( -e $image_file ) { return(); }
my $command='/usr/bin/wget -c -q \'' . $image_info->{'Image'}->{'OriginalURL'} . '\' -O "' . $image_file . '"';
print "$command\n";
my @results=`$command`;
my $errlvl=$?;
print Dumper(@results);
if ( $errlvl == 0 ) {
return();
} else {
unlink($image_file);
die("errlvl=$errlvl\nDeleting $image_file\n");
}
}
2 comments:
OMG, you're a life saver! I have been looking for just this script to backup my smugmug files locally and this appears to be working like a charm!
Cool - can't wait to try this out!
Post a Comment