/usr/local/CPAN/Keystone-Resolver/Keystone/Resolver/plugins/ID/info/doi.pm


# $Id: doi.pm,v 1.2 2007-01-26 13:53:48 mike Exp $

package Keystone::Resolver::plugins::ID::info::doi;

use strict;
use warnings;


sub data {
    my $class = shift();
    my($openurl, $doi) = @_;

    # The obvious DOI resolver to use is the one at
    #	http://dx.doi.org/
    # which can be invoked using a simple GET, like this:
    #	http://dx.doi.org/10.1126/science.275.5304.1320
    # The problem is that this doesn't resolve to a metadata set, but
    # directly to a URL for the full text ... which may or may not be
    # what we want.

    my $req = "http://dx.doi.org/$doi";
    my ($uri, $errmsg) = $openurl->co()->fetch($req, "DOI", 1);
    if (!defined $uri && $errmsg =~ /200 OK$/) {
	# This is ugly, but that's how it goes when you screen-scrape.
	# The only reason the DOI resolver would give us a page of
	# HTML would be to report an error, so we know there's
	# something wrong with the DOI.
	$errmsg = "invalid DOI ($doi)";
    }

    return ($uri, "info:doi", undef, $errmsg, 1);
}


1;