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

_______________________________________________
Koha-patches mailing list
[email protected]
http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches
website : http://www.koha-community.org/
git : http://git.koha-community.org/
bugs : http://bugs.koha-community.org/

Reply via email to