ユーザー エージェントについてうそをつくことになるのは、Google の TOS に違反しているためです。そうしないでください。
代わりに、Google Book Search APIを使用してください。
以下のコードは、 XML::Atom、Data::Feed、WWW::OpenSearchなどのモジュールに精通していないため、少し妨げられています。ただし、これは適切な出発点を提供する必要があります。
#!/usr/bin/perl
use strict;
use warnings;
use Business::ISBN qw( valid_isbn_checksum );
use LWP::Simple;
use XML::Simple;
while ( <> ) {
s/ISBN:([0-9]+)/'Google Books ID:' . get_google_id_for_isbn($1)/ge;
print;
}
use Carp;
sub make_google_books_query {
sprintf 'http://books.google.com/books/feeds/volumes?q=isbn:%s', $_[0];
}
sub get_google_id_for_isbn {
my ($isbn) = @_;
my $google_id = eval {
defined(valid_isbn_checksum $isbn)
or croak "Invalid ISBN: $isbn";
my $query = make_google_books_query($isbn);
my $xml = get $query;
defined($xml)
or croak "No response to <$query>";
my $data = XMLin($xml, ForceArray => 1);
my @ids = @{ $data->{entry}[0]{'dc:identifier'} };
unless ("ISBN:$isbn" eq $ids[1]
or "ISBN:$isbn" eq $ids[2] ) {
croak "Invalid search results: '@ids'";
}
$ids[0];
};
defined($google_id) ? $google_id : '';
}
t.txt
以下を含むテキスト ファイルがあるとします。
ISBN:0060930314
ISBN:9780596520106
それは出力します:
Google ブックス ID:ioXFqlzsmK8C
Google ブックス ID:lNVHi3TunxsC