diff options
Diffstat (limited to 'tools/piwigo_remote.pl')
-rw-r--r-- | tools/piwigo_remote.pl | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/tools/piwigo_remote.pl b/tools/piwigo_remote.pl new file mode 100644 index 000000000..8cdd1da35 --- /dev/null +++ b/tools/piwigo_remote.pl @@ -0,0 +1,118 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use JSON; +use LWP::UserAgent; +use Getopt::Long; + +my %opt = (); +GetOptions( + \%opt, + qw/action=s file=s thumbnail=s category_id=i name=s/ +); + +our $ua = LWP::UserAgent->new; +$ua->cookie_jar({}); + +my %conf; +$conf{base_url} = 'http://localhost/~pierrick/piwigo/trunk'; +$conf{partner_key} = 'youhou'; +$conf{response_format} = 'json'; +$conf{username} = 'pierrick'; +$conf{password} = 'z0rglub'; +$conf{limit} = 10; + +my $result = undef; +my $query = undef; + +binmode STDOUT, ":encoding(utf-8)"; + +# TODO : don't connect at each script call, use the session duration instead. +my $form = { + method => 'pwg.session.login', + username => $conf{username}, + password => $conf{password}, +}; + +$result = $ua->post( + $conf{base_url}.'/ws.php?partner='.$conf{partner_key}.'&format=json', + $form +); + +# print "\n", $ua->cookie_jar->as_string, "\n"; + +if ($opt{action} eq 'pwg.images.add') { + use MIME::Base64 qw(encode_base64); + use Digest::MD5::File qw/file_md5_hex/; + use File::Slurp; + + my $file_content = encode_base64(read_file($opt{file})); + my $file_sum = file_md5_hex($opt{file}); + + my $thumbnail_content = encode_base64(read_file($opt{thumbnail})); + my $thumbnail_sum = file_md5_hex($opt{thumbnail}); + + $form = { + method => 'pwg.images.add', + file_sum => $file_sum, + file_content => $file_content, + thumbnail_sum => $thumbnail_sum, + thumbnail_content => $thumbnail_content, + category_id => $opt{category_id}, + name => $opt{name}, + }; + + $result = $ua->post( + $conf{base_url}.'/ws.php?partner='.$conf{partner_key}.'&format=json', + $form + ); +} + +if ($opt{action} eq 'pwg.tags.list') { + use Text::ASCIITable; + + $query = pwg_ws_get_query( + method => 'pwg.tags.getList', + sort_by_counter => 'true', + ); + + $result = $ua->get($query); + my $tag_result = from_json($result->content); + my $t = Text::ASCIITable->new({ headingText => 'Tags' }); + $t->setCols('id','counter','name'); + + my $tag_number = 1; + foreach my $tag_href (@{ $tag_result->{result}{tags} }) { + $t->addRow( + $tag_href->{id}, + $tag_href->{counter}, + $tag_href->{name} + ); + + last if $tag_number++ >= $conf{limit}; + } + print $t; +} + +$query = pwg_ws_get_query( + method => 'pwg.session.logout' +); +$ua->get($query); + +sub pwg_ws_get_query { + my %params = @_; + + my $query = $conf{base_url}.'/ws.php?format='.$conf{response_format}; + + if (defined $conf{partner_key}) { + $query .= '&partner='.$conf{partner_key}; + } + + foreach my $key (keys %params) { + $query .= '&'.$key.'='.$params{$key}; + } + + return $query; +} |