Catmandu-MediaHaven
view release on metacpan or search on metacpan
lib/Catmandu/MediaHaven.pm view on Meta::CPAN
package Catmandu::MediaHaven;
=head1 NAME
Catmandu::MediaHaven - Tools to communicate with the Zeticon MediaHaven server
=head1 SYNOPSIS
use Catmandu::MediaHaven;
my $mh = Catmandu::MediaHaven->new(
url => '...' ,
username => '...' ,
password => '...');
my $result = $mh->search('nature', start => 0 , num => 100);
die "search failed" unless defined($result);
for my $res (@{$result->{mediaDataList}}) {
my $id = $res->{fragmentId};
my $date = $res->{data};
print "$id $date\n";
}
my $record = $mh->record('q2136s817');
my $date = $record->{date};
print "q2136s817 $date\n";
$mh->export($id, sub {
my $data = shift;
print $data;
});
=head1 DESCRIPTION
The L<Catmandu::MediaHaven> module is a low end interface to the MediaHaven
REST api. See also: https://archief.viaa.be/mediahaven-rest-api
=head1 METHODS
=head2 new(url => ... , username => ... , password => ...)
Create a new connection to the MediaHaven server.
=cut
use Moo;
use HTTP::Request::Common;
use LWP::Simple;
use URI::Escape;
use JSON;
use LWP;
use Carp;
use Catmandu;
use Cache::LRU;
use REST::Client;
our $VERSION = '0.08';
with 'Catmandu::Logger';
has 'url' => (is => 'ro' , required => 1);
has 'username' => (is => 'ro' , required => 1);
has 'password' => (is => 'ro' , required => 1);
has 'record_query' => (is => 'ro' , default => sub { "q=%%2B(MediaObjectFragmentId:%s)"; });
has id_fixer => (is => 'ro' , init_arg => 'record_id_fix', coerce => sub {Catmandu->fixer($_[0])},);
has 'sleep' => (is => 'ro' , default => sub { 1 });
has 'cache' => (is => 'lazy');
has 'cache_size' => (is => 'ro' , default => '1000');
sub _build_cache {
my $self = shift;
return Cache::LRU->new(size => $self->cache_size);
}
=head2 search($query, start => ... , num => ...)
Execute a search query against the MediaHaven server and return the result_list
as a HASH
=cut
sub search {
my ($self,$query,%opts) = @_;
my @param = ();
if (defined($query) && length($query)) {
push @param , sprintf("q=%s",uri_escape($query));
}
if ($opts{start}) {
push @param , sprintf("startIndex=%d",$opts{start});
}
if ($opts{num}) {
push @param , sprintf("nrOfResults=%d",$opts{num});
}
if (my $sort = $opts{sort}) {
my $direction;
if ($sort =~ /^[+]/) {
$direction = 'up';
$sort = substr($sort,1);
}
elsif ($sort =~ /^[-]/) {
( run in 2.574 seconds using v1.01-cache-2.11-cpan-364913b4093 )