Amazon-CreatorsAPI
view release on metacpan or search on metacpan
lib/Amazon/CreatorsAPI.pm view on Meta::CPAN
package Amazon::CreatorsAPI;
use strict;
use warnings;
use Carp qw/croak/;
use JSON qw//;
use HTTP::Tiny;
use Amazon::CreatorsAPI::Auth;
use Class::Accessor::Lite (
ro => [qw/
credential_id
credential_secret
credential_version
partner_tag
marketplace
ua
auth_manager
operation_endpoint
/],
);
our $VERSION = '0.01';
our $JSON = JSON->new;
sub new {
my $class = shift;
my $credential_id = shift or croak 'credential_id is required';
my $credential_secret = shift or croak 'credential_secret is required';
my $credential_version = shift or croak 'credential_version is required';
my $opt = shift || +{};
if (!$opt->{ua}) {
$opt->{ua} = HTTP::Tiny->new;
}
bless +{
credential_id => $credential_id,
credential_secret => $credential_secret,
credential_version => $credential_version,
partner_tag => $opt->{partner_tag} || '',
marketplace => $opt->{marketplace} || 'www.amazon.com',
ua => $opt->{ua},
auth_manager => Amazon::CreatorsAPI::Auth->new(
$credential_id,
$credential_secret,
$credential_version,
$opt,
),
operation_endpoint => $opt->{operation_endpoint} || 'https://creatorsapi.amazon/catalog/v1',
}, $class;
}
sub get_browse_nodes {
return shift->operation('getBrowseNodes', @_);
}
sub get_items {
return shift->operation('getItems', @_);
}
sub get_variations {
return shift->operation('getVariations', @_);
}
sub search_items {
return shift->operation('searchItems', @_);
}
sub operation {
my $self = shift;
my $operation = shift || '';
my $params = shift || +{};
my $res = $self->ua->request(
'POST',
$self->operation_endpoint . '/' . $operation,
{
'headers' => {
'Authorization' => $self->_auth_header,
'Content-Type' => 'application/json',
'x-marketplace' => $self->marketplace,
},
'content' => $JSON->encode({
partnerTag => $self->partner_tag,
marketplace => $self->marketplace,
%{$params},
}),
},
);
if (!$res->{success}) {
croak "failed $operation status:$res->{status} "
. ($res->{reason} || 'reason_unknown')
. ", $res->{content}";
}
( run in 1.069 second using v1.01-cache-2.11-cpan-39bf76dae61 )