Livedoor picsだと容量を気にする必要があるので、AmazonのS3にバックアップするスクリプトを書いてみました。これで、いざFlickrのデータが飛んでも大丈夫ですね。
#!/usr/bin/env perl
use strict;
use warnings;
use Net::Amazon::S3;
use Perl6::Say;
use Path::Class qw(dir);
use List::MoreUtils qw(any);
# config
my $bucketname = 'Your backect name for backup';
my $aws_access_key_id = 'Your access id';
my $aws_secret_access_key = 'Your secret access key';
my $s3 = Net::Amazon::S3->new(
{ aws_access_key_id => $aws_access_key_id,
aws_secret_access_key => $aws_secret_access_key,
retry => 1,
}
);
my $bucket_for_backup = create_backet_for_backup();
main();
sub main {
my $dir = dir('photos');
upload_photos_in_dir($dir);
list_files_in_bucket($bucket_for_backup);
}
sub create_backet_for_backup {
my $bucket = $s3->add_bucket( { bucket => $bucketname } )
or die $s3->err . ": " . $s3->errstr;
return $bucket;
}
sub upload_photos_in_dir {
my $dir = shift;
dir($dir)->recurse(
callback => sub {
my $file = shift;
return unless -f $file;
upload_file($file);
}
);
}
sub upload_file {
my $file = shift;
return unless ( $file->basename =‾ /¥.jpg$/ );
my $keys_in_bucket = keys_in_bucket($bucket_for_backup);
return if any { $file->basename eq $_->{key} } @{$keys_in_bucket};
my $body = $file->slurp;
my $status = $bucket_for_backup->add_key( $file->basename, $body,
{ 'content_type' => 'image/jpeg', } );
say "Uploaded:" . $file->basename if $status;
}
my $cache_keys;
sub keys_in_bucket {
my $bucket = shift;
return $cache_keys if $cache_keys;
my $response = $bucket_for_backup->list_all
or die $s3->err . ": " . $s3->errstr;
$cache_keys = $response->{keys};
$cache_keys;
}
sub list_files_in_bucket {
my $bucket = shift;
say '### list all files in bucket';
my $response = $bucket->list_all
or die $s3->err . ": " . $s3->errstr;
foreach my $key ( @{ $response->{keys} } ) {
my $key_name = $key->{key};
my $key_size = $key->{size};
say "Bucket contains key '$key_name' of size $key_size";
}
}|
Flickrから一括ダウンロードして、Amazon S3に一括バックアップというのをするのもいいかもしれないですね。
# photosディレクトリ決めうちなので適当に変えてください。写真のあるディレクトリの場所が変わるようであれば、Getoptで写真のあるディレクトリを指定できるように変更するのがいいですね。



Leave a comment