mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-06-01 20:04:51 +02:00
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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user