1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
######################################################################
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_TYPE => {
heavy => 10,
lite => 30,
};
##################################################
sub new {
##################################################
my($class, %options) = @_;
$class->_assert_options_defined(\%options, 'asin');
$class->_convert_option(\%options,
'asin',
'AsinSearch',
\&_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 $type = $options->{'type'} || __PACKAGE__->SUPER::DEFAULT_TYPE;
my $max_asins = MAX_ASINS_PER_TYPE->{$type};
# 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 using type '$type'"
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__
=head1 NAME
Net::Amazon::Request::ASIN - Class for submitting ASIN requests
=head1 SYNOPSIS
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);
=head1 DESCRIPTION
C<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 C<asin> parameter.
Upon success, the responses' C<properties()> method will return one
single C<Net::Amazon::Property::*> object.
=head2 METHODS
=over 4
=item new( asin => $asin )
Constructs a new C<Net::Amazon::Request::ASIN> object, used to query
the Amazon web service for an item with the specified ASIN number.
C<$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.
=back
Check L<Net::Amazon::Request> for common request parameters not listed here.
=head1 SEE ALSO
=head1 AUTHOR
Mike Schilli, E<lt>m@perlmeister.comE<gt>
=head1 COPYRIGHT AND LICENSE
Copyright 2003 by Mike Schilli E<lt>m@perlmeister.comE<gt>
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
|