package WWW::Wikipedia::TemplateFiller::Source::PubmedcentralId; use base 'WWW::Wikipedia::TemplateFiller::Source::PubmedId'; use WWW::Mechanize; use XML::LibXML; sub get { my( $self, $pmcid ) = @_; my $www = new WWW::Mechanize(); $www->get(sprintf 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?dbfrom=pmc&id=%s&db=pubmed', $pmcid ); my $xml = $www->content; my $parser = new XML::LibXML(); my $doc = $parser->parse_string($xml); my $pmid = $doc->findvalue('/eLinkResult/LinkSet/LinkSetDb[LinkName="pmc_pubmed"]/Link/Id'); # Route through $self->filler->get rather than $self->SUPER::get() # so that we consistently use filler's get() as an entry point. This # was introduced during the fix for ticket #41053. return $self->filler->get( pubmed_id => $pmid ); } 1;