#!/usr/bin/perl =head1 NAME oai-listrecords - list records in an OAI-PMH archive =head1 SYNOPSIS oai-listrecords --baseURL=http://preprint.chemweb.com/CPS/OAI [ --metadataPrefix --from --until --set ] =head1 DESCRIPTION A command line utility to listing the sets that belong to an OAI-PMH archive. =head1 AUTHORS =over 4 =item * Ed Summers =back =cut use strict; use Getopt::Long; use Net::OAI::Harvester; use Pod::Usage; my ( $url, $metadataPrefix, $from, $until, $set, $debug ); GetOptions( 'baseURL:s' => \$url, 'metadataPrefix:s' => \$metadataPrefix, 'from:s' => \$from, 'until:s' => \$until, 'set:s' => \$set, 'debug!' => \$debug, ); if ( !$metadataPrefix ) { print STDERR "no --metadataPrefix specified so defaulting to oai_dc\n"; $metadataPrefix = 'oai_dc'; } if ( !$url or !$metadataPrefix ) { pod2usage( { -verbose => 0 } ); } my $harvester = Net::OAI::Harvester->new( baseURL => $url ); $Net::OAI::Harvester::DEBUG = 1 if $debug; my %opts = ( 'metadataPrefix' => $metadataPrefix ); $opts{ 'from' } = $from if $from; $opts{ 'until' } = $until if $until; $opts{ 'set' } = $set if $set; my $records = $harvester->listRecords( %opts ); my $finished = 0; while ( ! $finished ) { if ( $records->errorCode() ) { print STDERR $records->errorString(); ## if bad xml print out the response if ( $records->errorCode() eq 'xmlParseError' ) { open( FILE, $records->file() ); print while ( ); close( FILE ); } exit(1); } while ( my $r = $records->next() ) { print $r->header()->identifier(),"\n"; print $r->metadata()->asString(),"\n\n"; } my $resumptionToken = $records->resumptionToken(); if ( $resumptionToken ) { $opts{ resumptionToken } = $resumptionToken->token(); print STDERR "using resuption token: ",$resumptionToken->token(),"\n"; $records = $harvester->listRecords( resumptionToken => $resumptionToken->token() ); } else { $finished = 1; } }