source: tags/build-Butterfly02/tools/piwigo_remote.pl @ 9424

Last change on this file since 9424 was 2520, checked in by plg, 16 years ago

feature added: ability to set rank from webservice upload.

  • Property svn:eol-style set to LF
File size: 3.0 KB
Line 
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use JSON;
7use LWP::UserAgent;
8use Getopt::Long;
9
10my %opt = ();
11GetOptions(
12    \%opt,
13    qw/action=s file=s thumbnail=s category_id=i name=s rank=i/
14);
15
16our $ua = LWP::UserAgent->new;
17$ua->cookie_jar({});
18
19my %conf;
20$conf{base_url} = 'http://localhost/~pierrick/piwigo/trunk';
21$conf{response_format} = 'json';
22$conf{username} = 'pierrick';
23$conf{password} = 'z0rglub';
24$conf{limit} = 10;
25
26my $result = undef;
27my $query = undef;
28
29binmode STDOUT, ":encoding(utf-8)";
30
31# TODO : don't connect at each script call, use the session duration instead.
32my $form = {
33    method => 'pwg.session.login',
34    username => $conf{username},
35    password => $conf{password},
36};
37
38$result = $ua->post(
39    $conf{base_url}.'/ws.php?format=json',
40    $form
41);
42
43# print "\n", $ua->cookie_jar->as_string, "\n";
44
45if ($opt{action} eq 'pwg.images.add') {
46    use MIME::Base64 qw(encode_base64);
47    use Digest::MD5::File qw/file_md5_hex/;
48    use File::Slurp;
49
50    my $file_content = encode_base64(read_file($opt{file}));
51    my $file_sum = file_md5_hex($opt{file});
52
53    my $thumbnail_content = encode_base64(read_file($opt{thumbnail}));
54    my $thumbnail_sum = file_md5_hex($opt{thumbnail});
55
56    $form = {
57        method => 'pwg.images.add',
58        file_sum => $file_sum,
59        file_content => $file_content,
60        thumbnail_sum => $thumbnail_sum,
61        thumbnail_content => $thumbnail_content,
62        category_id => $opt{category_id},
63        name => $opt{name},
64        rank => defined($opt{rank}) ? $opt{rank} : 1,
65    };
66
67    my $response = $ua->post(
68        $conf{base_url}.'/ws.php?format=json',
69        $form
70    );
71
72    print "-" x 50, "\n";
73    printf("response code    : %u\n", $response->code);
74    printf("response message : %s\n", $response->message);
75    print "-" x 50, "\n";
76    print "\n";
77
78#     use Data::Dumper;
79#     print Dumper($response);
80
81    if ($response->is_success) {
82        print "upload successful\n";
83    }
84    else {
85        warn 'A problem has occured during upload', "\n";
86        warn $response->decoded_content, "\n";
87        die $response->status_line;
88    }
89}
90
91if ($opt{action} eq 'pwg.tags.list') {
92    use Text::ASCIITable;
93
94    $query = pwg_ws_get_query(
95        method => 'pwg.tags.getList',
96        sort_by_counter => 'true',
97    );
98
99    $result = $ua->get($query);
100    my $tag_result = from_json($result->content);
101    my $t = Text::ASCIITable->new({ headingText => 'Tags' });
102    $t->setCols('id','counter','name');
103
104    my $tag_number = 1;
105    foreach my $tag_href (@{ $tag_result->{result}{tags} }) {
106        $t->addRow(
107            $tag_href->{id},
108            $tag_href->{counter},
109            $tag_href->{name}
110        );
111
112        last if $tag_number++ >= $conf{limit};
113    }
114    print $t;
115}
116
117$query = pwg_ws_get_query(
118    method => 'pwg.session.logout'
119);
120$ua->get($query);
121
122sub pwg_ws_get_query {
123    my %params = @_;
124
125    my $query = $conf{base_url}.'/ws.php?format='.$conf{response_format};
126
127    foreach my $key (keys %params) {
128        $query .= '&'.$key.'='.$params{$key};
129    }
130
131    return $query;
132}
Note: See TracBrowser for help on using the repository browser.