From 439df49d60fbad54b9970f03ab4eb5e24551b1c2 Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Wed, 22 Jul 2015 17:03:11 -0500 Subject: [PATCH] handle journal database not being there --- lib/Reference/Retrieve/PubMed.pm | 66 ++++++++++---------------------- 1 file changed, 21 insertions(+), 45 deletions(-) diff --git a/lib/Reference/Retrieve/PubMed.pm b/lib/Reference/Retrieve/PubMed.pm index 1fc4dff..0ecc842 100644 --- a/lib/Reference/Retrieve/PubMed.pm +++ b/lib/Reference/Retrieve/PubMed.pm @@ -336,43 +336,20 @@ sub _fix_medline_journal($$$;){ if (ref $ISSN) { $ISSN = $ISSN->{content}; } - my $url = qq(http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=journals&term=$ISSN); + my $url = qq(http://www.ncbi.nlm.nih.gov/nlmcatalog/?term=${ISSN}[ISSN]&format=text&report=xml); print STDERR "url: $url" if $DEBUG; my $request = HTTP::Request->new('GET', $url); my $response = $ua->request($request); $response = $response->content; - print STDERR "response: $response" if $DEBUG; + $response =~ s/\>/>/gso; + $response =~ s/\<///; - my ($journal_id) = $response =~ m#\s*(\d+)\s*#i; - - # http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=journals&id=4559 - # - # - # - # - # 4559 - # The Journal of biological chemistry. - # J Biol Chem - # J. Biol. Chem. - # 2985121R - # - # 0021-9258 - # 1083-351X - # 1905 - # - # American Society for Biochemistry and Molecular Biology - # eng - # - # United States - # - # - # - $url = qq(http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=journals&id=$journal_id); - print STDERR "url: $url" if $DEBUG; - $request = HTTP::Request->new('GET', $url); - $response = $ua->request($request); - $response = $response->content; print STDERR "response: $response" if $DEBUG; + my $xa = new XML::Simple; + my $ref_struct = $xa->XMLin($response,ForceArray=>['NCBICatalogRecord'],KeyAttr=>[]); + my $ref = $ref_struct->{NCBICatalogRecord}[0]; + print STDERR Dumper($ref) if $DEBUG; my %journal; while ($response =~ m{^\s*(?:(?:\s*(\d+))| # Match ids @@ -384,20 +361,19 @@ sub _fix_medline_journal($$$;){ else { $journal{lc($2)} = $3; } - } - my %journal_mapping = (title => q(title), - medlineabbr => q(medabbr), - isoabbr => q(isoabbr), - nlmid => q(nlmid), - issn => q(pissn), - eissn => q(eissn), - publisher => q(publisher), - pmid => q(id) - ); - my @journal_entry; - foreach my $key (keys %journal_mapping) { - push @journal_entry,($key=>$journal{$journal_mapping{$key}}); - } + } + my $print_issn = $ref->{JrXml}{Serial}{ISSN}[0]{IssnType} eq 'Print' ? 0 : 1; + my @journal_entry = + (title => $ref->{JrXml}{Serial}{Title}, + medlineabbr => $ref->{JrXml}{Serial}{MedlineTA}, + isoabbr => $ref->{JrXml}{Serial}{ISOAbbreviation}, + nlmid => $ref->{JrXml}{Serial}{NlmUniqueID}, + issn => $ref->{JrXml}{Serial}{ISSN}[$print_issn]{ISSN}, + eissn => $ref->{JrXml}{Serial}{ISSN}[1-$print_issn]{ISSN}, + publisher => $ref->{JrXml}{Serial}{publicationInfo}{Publisher}, + pmid => $ref->{JrXml}{id}, + ); + print STDERR Dumper(\@journal_entry) if $DEBUG; return @journal_entry; } -- 2.39.2