App-PDFLibrarian
view release on metacpan or search on metacpan
bin/pdf-lbr-query-ads view on Meta::CPAN
#
# You should have received a copy of the GNU General Public License
# along with App::PDFLibrarian. If not, see <http://www.gnu.org/licenses/>.
use strict;
use warnings;
use Carp;
use FindBin qw($Script);
use Getopt::Long qw(:config no_ignore_case);
use HTTP::Request;
use JSON;
use LWP::UserAgent;
use Pod::Usage;
use Text::Unidecode;
use URI;
FindBin::again();
use App::PDFLibrarian qw($cfgdir);
use App::PDFLibrarian::TitleAbbr qw(get_aas_macros);
bin/pdf-lbr-query-ads view on Meta::CPAN
# escape any colons and parentheses in query value
$query =~ s{^([^:]*):(.*)$}{ my $k = $1; my $v = $2; $v =~ s|:|\\:|g; "$k:$v" }e;
$query =~ s/([()])/\\$1/g;
# send query to ADS
my $querycontent;
{
my $adsuri = URI->new('https://api.adsabs.harvard.edu/v1/search/query');
$adsuri->query_form(rows => 1, fl => 'bibcode', 'q' => $query);
my $request = HTTP::Request->new('GET', $adsuri);
$request->header('Authorization' => "Bearer $api_token");
my $result = $useragent->request($request);
if (!$result->is_success) {
my $status = $result->status_line;
croak "$Script: ADS query failed: $status";
}
$querycontent = $result->content;
}
# parse ADS query response from JSON
bin/pdf-lbr-query-ads view on Meta::CPAN
eval {
$exportcontent = encode_json({ bibcode => [$queryjson->{response}->{docs}->[0]->{bibcode}]});
1;
} or do {
croak "$Script: could not construct ADS export request: $@";
};
# export BibTeX record from ADS
{
my $adsuri = URI->new('https://api.adsabs.harvard.edu/v1/export/bibtex');
my $request = HTTP::Request->new('POST', $adsuri);
$request->header('Authorization' => "Bearer $api_token");
$request->header('Content-Type' => 'application/json');
$request->content($exportcontent);
my $result = $useragent->request($request);
if (!$result->is_success) {
my $status = $result->status_line;
croak "$Script: ADS export failed: $status";
}
$exportcontent = $result->content;
}
( run in 0.573 second using v1.01-cache-2.11-cpan-acf6aa7dc9e )