[Koha-patches] [PATCH] Bug 7213 - simple /svc/ HTTP example
Dobrica Pavlinusic
dpavlin at rot13.org
Thu Apr 19 16:50:15 CEST 2012
On Thu, Apr 19, 2012 at 04:48:42PM +0200, Dobrica Pavlinusic wrote:
> 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
Sorry for spamming list, last patch didn't include changed code, just
commit message :-\
> ---
> 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..7368b2d
> --- /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 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;
> --
> 1.7.2.5
--
Dobrica Pavlinusic 2share!2flame dpavlin at rot13.org
Unix addict. Internet consultant. http://www.rot13.org/~dpavlin
More information about the Koha-patches
mailing list