aboutsummaryrefslogtreecommitdiffstats
path: root/tools/piwigo_remote.pl
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2008-07-30 21:53:00 +0000
committerplegall <plg@piwigo.org>2008-07-30 21:53:00 +0000
commit45960b4631e8d92a3ccd87fa4732dc1f74f1b017 (patch)
treeecbecf51825baa937bb960022d097b510a3ca542 /tools/piwigo_remote.pl
parent4dcec5fb8a2c85a9292374672b887b46f2862a53 (diff)
feature 839, first step : early proof of concept, no error handling. A
remote client can add a photo in a category thanks to the web API. A new "upload" directory is created (write access required on the base directory). Uploaded photo have path such as upload/<year>/<month>/<day>/<datetime>-random.jpg. The thumbnail must come with the "web sized" photo. The photo has no storage_category_id. Bugs still need to be fixed and a discussion must occur before next steps. git-svn-id: http://piwigo.org/svn/trunk@2463 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to '')
-rw-r--r--tools/piwigo_remote.pl118
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;
+}