#!/usr/bin/perl use LWP::UserAgent; use URI::Escape; use XML::Simple; use HTTP::Status; binmode(STDOUT, ":utf8"); my $top_url = 'http://xisbn.worldcat.org/webservices/xid/isbn/'; my $tail_url = '?method=getEditions&format=xml&fl=form,year,lang,ed'; use constant TIMEOUT_DEF => 2; use constant TIMEOUT_MAX => 10; use constant LANG => eng; # eng => 英語, ger => ドイツ語, chi => 中文 my $i = 1; while (my $isbn = <>) { chomp $isbn; my $url = $top_url . $isbn . $tail_url; print STDERR $i, "\t", $url, "\n"; my ($content, $error) = _access_web($url, TIMEOUT_MAX); if ($error) { die "http error $error \n"; } print $i, "\t", $isbn, "\t"; my $data = XMLin($content); if (ref $data->{'isbn'} eq 'ARRAY') { my @lang = grep { $_->{'lang'} eq LANG } @{$data->{'isbn'}}; my @edit = sort { $b->{'year'} <=> $a->{'year'} } @lang; my $last = shift @edit; print $last->{'ed'}, "\t", $last->{'year'}, "\t", $last->{'content'}, "\t", $last->{'lang'}; } print "\n"; sleep(TIMEOUT_DEF); $i++; } sub disp_fields() { my $field = shift; my $item = shift; print $item->{"$field"}, "\t" unless ref $item->{"$field"} eq "HASH"; } # Webサーバへのアクセス sub _access_web { my $url = shift; my $timeout = shift; my $usa = new LWP::UserAgent; my $request = new HTTP::Request('GET', $url); $usa->timeout([$timeout]); my $response = $usa->request($request); if ($response->code != RC_OK) { return (undef, $response->code); } else { return ($response->content, undef); } } __END__ Copyright Maeda Akira (maeda@lib.u-tokyo.ac.jp)