Astro-SIMBAD
view release on metacpan or search on metacpan
Query/Query.pm view on Meta::CPAN
package Astro::SIMBAD::Query;
# ---------------------------------------------------------------------------
#+
# Name:
# Astro::SIMBAD::Query
# Purposes:
# Perl wrapper for the SIMBAD database
# Language:
# Perl module
# Description:
# This module wraps the SIMBAD online database.
# Authors:
# Alasdair Allan (aa@astro.ex.ac.uk)
# Revision:
# $Id: Query.pm,v 1.14 2005/06/08 01:38:17 aa Exp $
# Copyright:
# Copyright (C) 2001 University of Exeter. All Rights Reserved.
#-
# ---------------------------------------------------------------------------
=head1 NAME
Astro::SIMBAD::Query - Object definining an prospective SIMBAD query.
=head1 SYNOPSIS
$query = new Astro::SIMBAD::Query( Target => $object,
RA => $ra,
Dec => $dec,
Error => $radius,
Units => $radius_units,
Frame => $coord_frame,
Epoch => $coord_epoch,
Equinox => $coord_equinox,
Proxy => $proxy,
Timeout => $timeout,
URL => $alternative_url );
my $results = $query->querydb();
$other = new Astro::SIMBAD::Query( Target => $object );
=head1 DESCRIPTION
Stores information about an prospective SIMBAD query and allows the query to
be made, returning an Astro::SIMBAD::Result object. Minimum information needed
for a sucessful query is an R.A. and Dec. or an object Target speccification,
other variables will be defaulted.
The Query object supports two types of queries: "list" (summary)
and "object" (detailed). The list query usually returns multiple results;
the object query is expected to obtain only one result, but returns extra
data about that target. An object query is performed if the target name
is specified and the Error radius is 0; otherwise, a list query is done.
The object will by default pick up the proxy information from the HTTP_PROXY
and NO_PROXY environment variables, see the LWP::UserAgent documentation for
details.
=cut
# L O A D M O D U L E S --------------------------------------------------
use strict;
use vars qw/ $VERSION /;
use LWP::UserAgent;
use Net::Domain qw(hostname hostdomain);
use Carp;
use HTML::TreeBuilder;
use HTML::Entities;
use Astro::SIMBAD::Result;
use Astro::SIMBAD::Result::Object;
'$Revision: 1.14 $ ' =~ /.*:\s(.*)\s\$/ && ($VERSION = $1);
sub trim {
my $s = shift;
$s =~ s/(^\s+)|(\s+$)//g;
return $s;
}
# C O N S T R U C T O R ----------------------------------------------------
=head1 REVISION
$Id: Query.pm,v 1.14 2005/06/08 01:38:17 aa Exp $
=head1 METHODS
=head2 Constructor
=over 4
=item B<new>
Create a new instance from a hash of options
$query = new Astro::SIMBAD::Query( Target => $object,
RA => $ra,
Dec => $dec,
Error => $radius,
Units => $radius_units,
Frame => $coord_frame,
Epoch => $coord_epoch,
Equinox => $coord_equinox,
Proxy => $proxy,
Timeout => $timeout,
URL => $alternative_url );
returns a reference to an SIMBAD query object.
=cut
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
# bless the query hash into the class
my $block = bless { OPTIONS => {},
RA => undef,
DEC => undef,
URL => undef,
QUERY => undef,
USERAGENT => undef,
BUFFER => undef,
LOOKUP => {} }, $class;
# Configure the object
$block->configure( @_ );
return $block;
}
# Q U E R Y M E T H O D S ------------------------------------------------
=back
=head2 Accessor Methods
=over 4
=item B<querydb>
Returns an Astro::SIMBAD::Result object for an inital SIMBAD query
$results = $query->querydb();
=cut
sub querydb {
my $self = shift;
# call the private method to make the actual SIMBAD query
$self->_make_query();
# check for failed connect
return undef unless defined $self->{BUFFER};
# return an Astro::SIMBAD::Result object
return $self->_parse_query();
}
=item B<proxy>
Return (or set) the current proxy for the SIMBAD request.
Query/Query.pm view on Meta::CPAN
${$self->{LOOKUP}}{"RC*"} = "Variable Star of R CrB type";
${$self->{LOOKUP}}{"Ro*"} = "Rotationally variable Star";
${$self->{LOOKUP}}{"a2*"} = "Variable Star of alpha2 CVn type";
${$self->{LOOKUP}}{"El*"} = "Elliptical variable Star";
${$self->{LOOKUP}}{"Psr"} = "Pulsars";
${$self->{LOOKUP}}{"BY*"} = "Variable of BY Dra type";
${$self->{LOOKUP}}{"RS*"} = "Variable of RS CVn type";
${$self->{LOOKUP}}{"Pu*"} = "Pulsating variable Star";
${$self->{LOOKUP}}{"Mi*"} = "Variable Star of Mira Cet type";
${$self->{LOOKUP}}{"RR*"} = "Variable Star of RR Lyr type";
${$self->{LOOKUP}}{"Ce*"} = "Classical Cepheid variable Star";
${$self->{LOOKUP}}{"eg sr*"} = "Semi-regular pulsating Star";
${$self->{LOOKUP}}{"dS*"} = "Variable Star of delta Sct type";
${$self->{LOOKUP}}{"RV*"} = "Variable Star of RV Tau type";
${$self->{LOOKUP}}{"WV*"} = "Variable Star of W Vir type";
${$self->{LOOKUP}}{"SN*"} = "SuperNova";
${$self->{LOOKUP}}{"Sy*"} = "Symbiotic Star";
${$self->{LOOKUP}}{"G"} = "Galaxy";
${$self->{LOOKUP}}{"PoG"} = "Part of a Galaxy";
${$self->{LOOKUP}}{"GiC"} = "Galaxy in Cluster of Galaxies";
${$self->{LOOKUP}}{"GiG"} = "Galaxy in Group of Galaxies";
${$self->{LOOKUP}}{"GiP"} = "Galaxy in Pair of Galaxies";
${$self->{LOOKUP}}{"HzG"} = "Galaxy with high redshift";
${$self->{LOOKUP}}{"ALS"} = "Absorption Line system";
${$self->{LOOKUP}}{"LyA"} = "Ly alpha Absorption Line system";
${$self->{LOOKUP}}{"DLy"} = "Dumped Ly alpha Absorption Line system";
${$self->{LOOKUP}}{"mAL"} = "metallic Absorption Line system";
${$self->{LOOKUP}}{"rG"} = "Radio Galaxy";
${$self->{LOOKUP}}{"H2G"} = "HII Galaxy";
${$self->{LOOKUP}}{"Q?"} = "Possible Quasar";
${$self->{LOOKUP}}{"EmG"} = "Emission-line galaxy";
${$self->{LOOKUP}}{"SBG"} = "Starburst Galaxy";
${$self->{LOOKUP}}{"BCG"} = "Blue compact Galaxy";
${$self->{LOOKUP}}{"LeI"} = "Gravitationnaly Lensed Image";
${$self->{LOOKUP}}{"LeG"} = "Gravitationnaly Lensed Image of a Galaxy";
${$self->{LOOKUP}}{"LeQ"} = "Gravitationnaly Lensed Image of a Quasar";
${$self->{LOOKUP}}{"AGN"} = "Active Galaxy Nucleus";
${$self->{LOOKUP}}{"LIN"} = "LINER-type Active Galaxy Nucleus";
${$self->{LOOKUP}}{"SyG"} = "Seyfert Galaxy";
${$self->{LOOKUP}}{"Sy1"} = "Seyfert 1 Galaxy";
${$self->{LOOKUP}}{"Sy2"} = "Seyfert 2 Galaxy";
${$self->{LOOKUP}}{"Bla"} = "Blazar";
${$self->{LOOKUP}}{"BLL"} = "BL Lac - type object";
${$self->{LOOKUP}}{"OVV"} = "Optically Violently Variable object";
${$self->{LOOKUP}}{"QSO"} = "Quasar";
# CONFIGURE FROM ARGUMENTS
# -------------------------
# return unless we have arguments
return undef unless @_;
# grab the argument list
my %args = @_;
# Loop over the allowed keys and modify the default query options, note
# that due to the order these are called in supplying both and RA and Dec
# and an object Identifier (e.g. HT Cas) will cause the query to default
# to using the identifier rather than the supplied co-ordinates.
for my $key (qw / RA Dec Target Error Units Frame Epoch Equinox
Proxy Timeout URL / ) {
my $method = lc($key);
$self->$method( $args{$key} ) if exists $args{$key};
}
}
# T I M E A T T H E B A R --------------------------------------------
=back
=begin __PRIVATE_METHODS__
=head2 Private methods
These methods are for internal use only.
=over 4
=item B<_make_query>
Private function used to make an SIMBAD query. Should not be called directly,
since it does not parse the results. Instead use the querydb() assessor method.
=cut
sub _make_query {
my $self = shift;
# grab the user agent
my $ua = $self->{USERAGENT};
# clean out the buffer
$self->{BUFFER} = "";
# grab the base URL
my $URL = $self->queryurl();
# build request
my $request = new HTTP::Request('GET', $URL);
# grab page from web
my $reply = $ua->request($request);
if ( ${$reply}{"_rc"} eq 200 ) {
# stuff the page contents into the buffer
$self->{BUFFER} = ${$reply}{"_content"};
} else {
$self->{BUFFER} = undef;
croak("Error ${$reply}{_rc}: Failed to establish network connection");
}
}
=item B<_parse_query>
Private function used to parse the results returned in an SIMBAD query. Should
not be called directly. Instead use the querydb() assessor method to make and
parse the results.
=cut
( run in 2.598 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )