Bib-CrossRef
view release on metacpan or search on metacpan
lib/Bib/CrossRef.pm view on Meta::CPAN
# something else -- might be dissertation, report-paper, standard, sa-component, database
# fall back to alternative interface for now
$self->parse_text($doi);
return; # stop here
}
$self->_setscore(1);
$self->_setquery($doi);
$self->_setdoi($doi);
if (!defined $cc) {
# seems like an incomplete entry
return;
}
#$self->_setatitle($cc->{'titles'}->{'title'});
my $title;
if (ref $cc->{titles} ne "HASH") {
$title = $cc->{titles}->[0];
} else {
$title = $cc->{'titles'}->{'title'};
}
$self->_setatitle($title);
$self->_setdoi($cc->{'doi_data'}->{'doi'});
if (ref($cc->{'publication_date'}) eq "HASH") {
$self->_setdate($cc->{'publication_date'}->{'year'});
} else { # we have multiple dates, lets try and pick put the print date
my $found = 0; my $count=0;
foreach my $d (@{$cc->{'publication_date'}}) {
if ($d->{'media_type'} eq 'print') {
$self->_setdate($d->{'year'}); $found = 1;
}
$count++;
}
if ((!$found) && ($count>0)) {$self->_setdate(${$cc->{'publication_date'}}[0]->{'year'});}
}
if (exists(${$cc}{'pages'})) {
if (exists(${$cc->{'pages'}}{'first_page'})) {$self->_setspage($cc->{'pages'}->{'first_page'});}
if (exists(${$cc->{'pages'}}{'last_page'})) {$self->_setepage($cc->{'pages'}->{'last_page'});}
}
$cc = $cc->{'contributors'}->{'person_name'};
if (ref($cc) eq "HASH") {
$self->_setauthcount(1);
$self->_setauth(1,$cc->{'given_name'}.' '.$cc->{'surname'});
} else {
my $count = 0;
foreach my $au (@{$cc}) {
if ($au->{'contributor_role'} ne 'author') {next;}
$count++;
$self->_setauth($count, $au->{'given_name'}.' '.$au->{'surname'});
}
$self->_setauthcount($count);
}
} else {
$self->_err("Problem with search.crossref.org/guestquery: ".$res->status_line);
}
}
sub printheader {
my $self = shift @_;
my $id = shift @_;
my $str = '';
if (defined $id) {$str = 'id="'.$id.'"';}
return '<table '.$str.'><tr style="font-weight:bold"><td></td><td>Use</td><td></td><td>Type</td><td>Year</td><td>Authors</td><td>Title</td><td>Journal</td><td>Volume</td><td>Issue</td><td>Pages</td><td>DOI</td><td>url</td><td></td></tr>'."\n";
}
sub printfooter {
return "</table>\n";
}
sub _authstring {
my $self = shift @_;
my $out='';
if ($self->authcount > 0) {
$out = $self->auth(1);
for (my $j = 2; $j <= $self->authcount; $j++) {
$out.=' and '.$self->auth($j);
}
}
return $out;
}
sub print {
# return a reference in human readable form
my ($self, $id, $add) = @_;
my $ref = $self->{ref};
if (!defined $id) {$id='';}
if (!defined $add) {$add='';}
my $out='';
if ($self->{html}) {
$out.=sprintf "%s", '<tr id="cite">';
$out.=sprintf "%s", '<td>'.$id.'</td>';
if ($self->score<1) {
$out.=sprintf "%s", '<td><input type="checkbox" name="'.$id.'" value=""></td>';
$out.=sprintf "%s", '<td style="color:red">Poor match</td>';
} else {
$out.=sprintf "%s", '<td><input type="checkbox" name="'.$id.'" value="" checked></td><td></td>';
}
$out.=sprintf "%s", '<td contenteditable="true">'.$self->genre.'</td><td contenteditable="true">'.$self->date.'</td>';
$out.=sprintf "%s", '<td contenteditable="true">'.$self->_authstring.'</td>';
$out.=sprintf "%s", '<td contenteditable="true">'.$self->atitle.'</td><td contenteditable="true">'.encode_entities($self->jtitle).'</td>';
$out.=sprintf "%s", '<td contenteditable="true">';
if (defined $self->volume) {
$out.=sprintf "%s", $self->volume;
}
$out.=sprintf "%s", '</td><td contenteditable="true">';
if (defined $self->issue) {
$out.=sprintf "%s", $self->issue;
}
$out.=sprintf "%s", '</td><td contenteditable="true">';
if (defined $self->spage) {
$out.=sprintf "%s", $self->spage;
}
if (defined $self->epage) {
$out.=sprintf "%s", '-'.$self->epage;
}
$out.=sprintf "%s", '</td><td contenteditable="true">';
if (defined $self->doi) {
my $doi = $self->doi;
$doi =~ s/http:\/\/dx.doi.org\///;
$out.=$doi;
}
$out.=sprintf "%s", '</td><td contenteditable="true">';
( run in 0.579 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )