Terry, wonderful and thank you. Given an OCLC number, I am using the following Perl code to extract call numbers from the WorldCat Classify service. The result is tab-delimited output of OCLC numbers and call numbers and/or error messages. --ELM
#!/usr/bin/perl
# call_numbers.pl - given OCLC numbers, extract call numbers from OCLC classify service
# Eric Lease Morgan <[log in to unmask]>
# July 17, 2012 - first cut; "Thanks to Terry Reese for suggesting classify!"
# configure
use constant QUERY => 'http://classify.oclc.org/classify2/Classify?oclc=##OCLC##&summary=true';
# require
use LWP;
use strict;
use XML::XPath;
# initialize
my $count = 0;
my $ua = LWP::UserAgent->new;
$| = 1;
# process each OCLC number
while ( <DATA> ) {
# build the query and get it
chop;
my $oclc = $_;
my $url = QUERY;
$url =~ s/##OCLC##/$oclc/e;
my $response = $ua->request( HTTP::Request->new( GET => $url ) );
# check for successful HTTP request
if ( $response->is_success ) {
# (re-)initialize
my $xpath = XML::XPath->new( xml => $response->content );
# check for successful query
if ( $xpath->getNodeText( 'classify/response/@code' ) eq 0 ) {
# extract and output
my $call_number = $xpath->getNodeText( '/classify/recommendations/lcc/mostPopular/@nsfa' );
print "$oclc\t$call_number\n";
}
# error
else { print "CLASSIFY FAILURE\n$url\n" }
}
# error
else { print "HTTP FAILURE\t$url\n" }
# increment and exit
#$count++;
#last if ( $count == 100 );
}
__DATA__
2239
2239
5478
10536
10799
10889
11887
16142
16198
17411
21885
22047
24095
28315
28351
|