Net::Amazon::Request::ASIN - Class for submitting ASIN requests


Net-Amazon documentation Contained in the Net-Amazon distribution.

Index


Code Index:

NAME

Top

Net::Amazon::Request::ASIN - Class for submitting ASIN requests

SYNOPSIS

Top

  use Net::Amazon;
  use Net::Amazon::Request::ASIN;

  my $ua = Net::Amazon->new(
      token       => 'YOUR_AMZN_TOKEN'
  );

  my $req = Net::Amazon::Request::ASIN->new( 
      asin  => '0201360683'
  );

    # Response is of type Net::Amazon::Response::ASIN
  my $resp = $ua->request($req);

DESCRIPTION

Top

Net::Amazon::Request::ASIN is a class used to submit ASIN requests to the Amazon web service.

The ASIN of the item to look is specified in the asin parameter.

Upon success, the responses' properties() method will return one single Net::Amazon::Property::* object.

METHODS

new( asin => $asin )

Constructs a new Net::Amazon::Request::ASIN object, used to query the Amazon web service for an item with the specified ASIN number.

$asin can also be a reference to an array of ASINs, like in

    $ua->search(asin => ["0201360683", "0596005083"]) 

in which case a search for multiple ASINs is performed, returning a list of results.

Check Net::Amazon::Request for common request parameters not listed here.

AUTHOR

Top

Mike Schilli, <m@perlmeister.com>

COPYRIGHT AND LICENSE

Top


Net-Amazon documentation Contained in the Net-Amazon distribution.

######################################################################
package Net::Amazon::Request::ASIN;
######################################################################
use warnings;
use strict;
use base qw(Net::Amazon::Request);

# These values are defined in the AWS SDK
# (http://amazon.com/webservices) under
# "Product and Catalog Data" / "ASIN and ISBN Searches"
use constant MAX_ASINS_PER_REQUEST => 10;


##################################################
sub new {
##################################################
    my($class, %options) = @_;

    $class->_assert_options_defined(\%options, 'asin');

    $class->_convert_option(\%options,
                            'asin',
                            'ItemId',
                            \&_process_asin_option);
    
    my $self = $class->SUPER::new(%options);

    bless $self, $class;   # reconsecrate
}

##
## PRIVATE FUNCTIONS
##

# _process_asin_option( OPTIONS, KEY )
#
# Takes a reference to a hash of OPTIONS and checks the value keyed by
# KEY to make sure it looks legitimate.  If the value associated with
# KEY is an array, we check to make sure that we're not asking for
# too many asins at once.
#
# Returns true if all goes well. If any problems are encountered,
# die() will be called.
#
sub _process_asin_option {
    my ($options, $key) = @_;

    # If the asins are supplied in the form of an array, we have to
    # make sure that the caller isn't trying to ask for too many at a
    # time. If we don't make this test, those excessive asins will be
    # silently ignored by the AWS servers...resulting in potentially
    # confusing results for the user.
    if ( ref $options->{$key} eq 'ARRAY' ) {
        my $max_asins = MAX_ASINS_PER_REQUEST;

        # Dying is the right thing to do here because this is
        # indicative of a programming error.
        die "Only $max_asins may be requested at a time"
            if ( @{$options->{$key}} > $max_asins );

        $options->{$key} = join ',', @{$options->{$key}};
    } elsif ( ref $options->{$key} ) {
        die "The 'asin' parameter must either be a scalar or an array";
    }

    return 1;
}

1;

__END__