Catmandu-FedoraCommons
view release on metacpan or search on metacpan
lib/Catmandu/FedoraCommons.pm view on Meta::CPAN
# Or the low-level API-s
use Catmandu::FedoraCommons;
my $fedora = Catmandu::FedoraCommons->new('http://localhost:8080/fedora','fedoraAdmin','fedoraAdmin');
my $result = $fedora->findObjects(terms=>'*');
die $result->error unless $result->is_ok;
my $hits = $result->parse_content();
for my $hit (@{ $hits->{results} }) {
printf "%s\n" , $hit->{pid};
}
# Or using the higher level Catmandu::Store codes you can do things like
use Catmandu::Store::FedoraCommons;
my $store = Catmandu::Store::FedoraCommons->new(
baseurl => 'http://localhost:8080/fedora',
username => 'fedoraAdmin',
password => 'fedoraAdmin',
model => 'Catmandu::Store::FedoraCommons::DC' # default
);
$store->bag->each(sub {
my $model = shift;
printf "title: %s\n" , join("" , @{ $model->{title} });
printf "creator: %s\n" , join("" , @{ $model->{creator} });
my $pid = $model->{_id};
my $ds = $store->fedora->listDatastreams(pid => $pid)->parse_content;
});
my $obj = $store->bag->add({
title => ['The Master and Margarita'] ,
creator => ['Bulgakov, Mikhail'] }
);
$store->fedora->addDatastream(pid => $obj->{_id} , url => "http://myurl/rabbit.jpg");
# Add your own perl version of a descriptive metadata model by implementing your own
# model that can do a serialize and deserialize.
=head1 DESCRIPTION
Catmandu::FedoraCommons is an Perl API to the Fedora Commons REST API (http://www.fedora.info/).
Supported versions are Fedora Commons 3.6 or better.
=head1 ACCESS METHODS
=cut
package Catmandu::FedoraCommons;
use Catmandu::FedoraCommons::Response;
our $VERSION = '0.274';
use URI::Escape;
use HTTP::Request::Common qw(GET POST DELETE PUT HEAD);
use LWP::UserAgent;
use MIME::Base64;
use strict;
use Carp;
use Data::Validate::URI qw(is_uri);
=head2 new($base_url,$username,$password)
Create a new Catmandu::FedoraCommons connecting to the baseurl of the Fedora Commons installation.
=cut
sub new {
my ($class,$baseurl,$username,$password) = @_;
Carp::croak "baseurl missing" unless defined $baseurl;
my $ua = LWP::UserAgent->new(
agent => 'Catmandu-FedoraCommons/' . $VERSION,
timeout => 180,
);
$baseurl =~ m/(\w+):\/\/([^\/:]+)(:(\d+))?(\S+)/;
bless { baseurl => $baseurl,
scheme => $1,
host => $2,
port => $4 || 8080,
path => $5,
username => $username,
password => $password,
ua => $ua} , $class;
}
sub _GET {
my ($self,$path,$data,$callback,$headers) = @_;
$headers = {} unless $headers;
my @parts;
for my $part (@$data) {
my ($key) = keys %$part;
my $name = uri_escape($key) || "";
my $value = uri_escape($part->{$key}) || "";
push @parts , "$name=$value";
}
my $query = join("&",@parts);
my $req = GET $self->{baseurl} . $path . '?' . $query , %$headers;
$req->authorization_basic($self->{username}, $self->{password});
defined $callback ?
return $self->{ua}->request($req, $callback, 4096) :
return $self->{ua}->request($req);
}
sub _POST {
my ($self,$path,$data,$callback) = @_;
my $content = undef;
( run in 0.733 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )