File: ASIN.pm

package info (click to toggle)
libnet-amazon-perl 0.35-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 908 kB
  • ctags: 160
  • sloc: xml: 4,821; perl: 2,055; makefile: 46
file content (139 lines) | stat: -rw-r--r-- 3,761 bytes parent folder | download
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