Bug 7213 - simple /svc/ HTTP example
Simple command-line client which can authorize itself to Koha, get MARC XML record based on biblio number and update record This script can also be used as module using require "koha-svc.pl" from other scripts which can implement MARC XML creation or parsing. This is follow up version which now uses Content-type: text/xml header when using POST method to be in sync with documentation at http://wiki.koha-community.org/wiki/Koha_/svc/_HTTP_API Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz> Signed-off-by: Paul Poulain <paul.poulain@biblibre.com> Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz> Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
This commit is contained in:
parent
82aacdfec2
commit
a1cd2394c3
|
|
@ -0,0 +1,132 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use LWP::UserAgent;
|
||||
use File::Slurp;
|
||||
|
||||
if ( $#ARGV >= 3 && ! caller ) { # process command-line params only if not called as module!
|
||||
my ( $url, $user, $password, $biblionumber, $file ) = @ARGV;
|
||||
|
||||
my $svc = Koha::SVC->new(
|
||||
url => $url,
|
||||
user => $user,
|
||||
password => $password,
|
||||
debug => $ENV{DEBUG},
|
||||
);
|
||||
|
||||
if ( ! $file ) {
|
||||
my $marcxml = $svc->get( $biblionumber );
|
||||
my $file = "bib-$biblionumber.xml";
|
||||
write_file $file , $marcxml;
|
||||
print "saved $file ", -s $file, " bytes\n";
|
||||
print $marcxml;
|
||||
} else {
|
||||
print "update $biblionumber from $file\n";
|
||||
$svc->post( $biblionumber, scalar read_file($file) );
|
||||
}
|
||||
|
||||
exit 0;
|
||||
}
|
||||
|
||||
package Koha::SVC;
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Koha::SVC
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Call Koha's C</svc/> API to fetch/update records
|
||||
|
||||
This script can be used from other scripts as C<Koha::SVC> module or run
|
||||
directly using syntax:
|
||||
|
||||
koha-svc.pl http://koha-dev:8080/cgi-bin/koha/svc svc-user svc-password $biblionumber [bib-42.xml]
|
||||
|
||||
If called without last argument (MARCXML filename) it will fetch C<$biblionumber> from Koha and create
|
||||
C<bib-$biblionumber.xml> file from it. When called with xml filename, it will update record in Koha.
|
||||
|
||||
This script is intentionally separate from Koha itself and dependencies which Koha has under
|
||||
assumption that you might want to run it on another machine (or create custom script which mungles
|
||||
Koha's records from other machine without bringing all Koha dependencies with it).
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
This same script can be used as module (as it defines T<Koha::SVC> package) using
|
||||
|
||||
require "koha-svc.pl"
|
||||
|
||||
at begining of script. Rest of API is described below. Example of it's usage is at beginning of this script.
|
||||
|
||||
=head2 new
|
||||
|
||||
my $svc = Koha::SVC->new(
|
||||
url => 'http://koha-dev:8080/cgi-bin/koha/svc',
|
||||
user => 'svc-user',
|
||||
password => 'svc-password',
|
||||
debug => 0,
|
||||
);
|
||||
|
||||
URL must point to Koha's B<intranet> address and port.
|
||||
|
||||
Specified user must have C<editcatalogue> permission.
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my $self = {@_};
|
||||
bless $self, $class;
|
||||
|
||||
my $url = $self->{url} || die "no url found";
|
||||
my $user = $self->{user} || die "no user specified";
|
||||
my $password = $self->{password} || die "no password";
|
||||
|
||||
my $ua = LWP::UserAgent->new();
|
||||
$ua->cookie_jar({});
|
||||
my $resp = $ua->post( "$url/authentication", {userid =>$user, password => $password} );
|
||||
die $resp->status_line unless $resp->is_success;
|
||||
|
||||
warn "# $user $url = ", $resp->decoded_content, "\n" if $self->{debug};
|
||||
|
||||
$self->{ua} = $ua;
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
=head2 get
|
||||
|
||||
my $marcxml = $svc->get( $biblionumber );
|
||||
|
||||
=cut
|
||||
|
||||
sub get {
|
||||
my ($self,$biblionumber) = @_;
|
||||
|
||||
my $url = $self->{url};
|
||||
warn "# get $url/bib/$biblionumber\n" if $self->{debug};
|
||||
my $resp = $self->{ua}->get( "$url/bib/$biblionumber" );
|
||||
die $resp->status_line unless $resp->is_success;
|
||||
return $resp->decoded_content;
|
||||
}
|
||||
|
||||
=head2 post
|
||||
|
||||
my $marcxml = $svc->post( $biblionumber, $marcxml );
|
||||
|
||||
=cut
|
||||
|
||||
sub post {
|
||||
my ($self,$biblionumber,$marcxml) = @_;
|
||||
my $url = $self->{url};
|
||||
warn "# post $url/bib/$biblionumber\n" if $self->{debug};
|
||||
my $resp = $self->{ua}->post( "$url/bib/$biblionumber", 'Content_type' => 'text/xml', Content => $marcxml );
|
||||
die $resp->status_line unless $resp->is_success;
|
||||
return $resp->decoded_content;
|
||||
}
|
||||
|
||||
1;
|
||||
Loading…
Reference in New Issue