package WebService::Advogato; use Carp; use RPC::XML ':types'; use RPC::XML::Client; use strict; use vars qw($VERSION); $VERSION = '1.1.0'; # # $Id: Advogato.pm,v 1.2 2004/04/04 06:29:10 jaldhar Exp $ # sub new() { my ($proto, $user, $pass) = @_; my $class = ref($proto) || $proto; my $self = { 'client' => RPC::XML::Client->new('http://www.advogato.org/XMLRPC'), 'user' => $user || '', 'pass' => $pass || '', }; bless($self, $class); return $self; } sub _authenticate() { my ($self) = @_; my $result = $self->{'client'}->send_request('authenticate', RPC_STRING($self->{'user'}), RPC_STRING($self->{'pass'})); croak $result unless ref $result; croak $result->code . ': ' . $result->string if ref $result eq 'RPC::XML::fault'; $self->{'cookie'} = $result->value; } sub _call() { my ($self, $method, @args) = @_; my $ result = $self->{'client'}->send_request($method, @args); croak $result unless defined($result); croak $result->code . ': ' . $result->string if $result->is_fault; return $result->value; } sub capitalize($) { my ($self, $x) = @_; return $self->_call('test.capitalize', RPC_STRING($x)); } sub exists($) { my ($self, $user) = @_; return $self->_call('user.exists', RPC_STRING($user)); } sub get($$) { my ($self, $user, $index) = @_; return $self->_call('diary.get', RPC_STRING($user), RPC_INT($index)); } sub getDates($$) { my ($self, $user, $index) = @_; return @{$self->_call('diary.getDates', RPC_STRING($user), RPC_INT($index))}; } sub guess() { my ($self) = @_; return @{$self->_call('test.guess')}; } sub len($) { my ($self, $user) = @_; return $self->_call('diary.len', RPC_STRING($user)); } sub level($) { my ($self, $user) = @_; return $self->_call('cert.get', RPC_STRING($user)); } sub set($$) { my ($self, $index, $html) = @_; $self->_authenticate() unless $self->{'cookie'}; return $self->_call('diary.set', RPC_STRING($self->{'cookie'}), RPC_INT($index), RPC_STRING($html)); } sub square($) { my ($self, $x) = @_; return $self->_call('test.square', RPC_INT($x)); } sub strlen($) { my ($self, $str) = @_; return $self->_call('test.strlen', RPC_STRING($str)); } sub sumprod($$) { my ($self, $x, $y) = @_; return @{$self->_call('test.sumprod', RPC_INT($x), RPC_INT($y))}; } 1; __END__ =head1 NAME WebService::Advogato - XML-RPC interface to www.advogato.org =head1 SYNOPSIS use WebService::Advogato; my $client = new WebService::Advogato('username', 'password'); my $num_entries = $client->len('jaldhar'); $client->set(-1, '
A diary entry.
'); =head1 ABSTRACT This module implements the XML-RPC interface to the diaries at www.advogato.org a site for developers of free software. =head1 DESCRIPTION The module is implemented as a class. The methods use standard perl scalars and arrays but internally they use XML-RPC datatypes: int, string and date. The following descriptions include the datatype for your reference. =head2 Constructor An object is constructed using the standard syntax. The constructor can take two parameters: I