[Koha-patches] [PATCH] Bug 7213: simple /svc/ HTTP example
Dobrica Pavlinusic
dpavlin at rot13.org
Thu Mar 22 09:28:17 CET 2012
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.
---
misc/migration_tools/koha-svc.pl | 132 ++++++++++++++++++++++++++++++++++++++
1 files changed, 132 insertions(+), 0 deletions(-)
create mode 100755 misc/migration_tools/koha-svc.pl
diff --git a/misc/migration_tools/koha-svc.pl b/misc/migration_tools/koha-svc.pl
new file mode 100755
index 0000000..9009e35
--- /dev/null
+++ b/misc/migration_tools/koha-svc.pl
@@ -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 port
+
+ 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", { POSTDATA => $marcxml } );
+ die $resp->status_line unless $resp->is_success;
+ return $resp->decoded_content;
+}
+
+1;
--
1.7.2.5
More information about the Koha-patches
mailing list