Amazon-MWS
view release on metacpan or search on metacpan
lib/Amazon/MWS/Uploader.pm view on Meta::CPAN
# such if it's an upload job
if ($row->{task} eq 'upload') {
$self->_exe_query($self->sqla->update('amazon_mws_products',
{ status => 'ok',
listed_date => DateTime->now,
listed => 1,
},
{
amws_job_id => $job_id,
shop_id => $self->_unique_shop_id,
}));
}
}
else {
print "Job still to be processed\n";
}
if ($update) {
$self->_exe_query($self->sqla->update(amazon_mws_jobs => $update,
{
amws_job_id => $job_id,
shop_id => $self->_unique_shop_id,
}));
}
}
=head2 upload_feed($type, $feed_id);
Routine to upload the feed. Return true if it's complete, false
otherwise.
=cut
sub upload_feed {
my ($self, $record) = @_;
my $job_id = $record->{amws_job_id};
my $type = $record->{feed_name};
my $feed_id = $record->{feed_id};
print "Checking $type feed for $job_id\n";
# http://docs.developer.amazonservices.com/en_US/feeds/Feeds_FeedType.html
my %names = (
product => '_POST_PRODUCT_DATA_',
inventory => '_POST_INVENTORY_AVAILABILITY_DATA_',
price => '_POST_PRODUCT_PRICING_DATA_',
image => '_POST_PRODUCT_IMAGE_DATA_',
variants => '_POST_PRODUCT_RELATIONSHIP_DATA_',
order_ack => '_POST_ORDER_ACKNOWLEDGEMENT_DATA_',
shipping_confirmation => '_POST_ORDER_FULFILLMENT_DATA_',
);
die "Unrecognized type $type" unless $names{$type};
# no feed id, it's a new batch
if (!$feed_id) {
print "No feed id found, doing a request for $job_id $type\n";
my $feed_content = $self->_slurp_file($record->{feed_file});
my $res;
try {
$res = $self->client
->SubmitFeed(content_type => 'text/xml; charset=utf-8',
FeedType => $names{$type},
FeedContent => $feed_content,
MarketplaceIdList => [$self->marketplace_id],
);
}
catch {
warn "Failure to submit $type feed: \n";
if (ref($_)) {
if ($_->can('xml')) {
warn $_->xml;
}
else {
warn Dumper($_);
}
}
else {
warn $_;
}
};
# do not register the failure on die, because in this case (no
# response) there could be throttling, or network failure
die unless $res;
# update the feed_id row storing it and updating.
if ($feed_id = $record->{feed_id} = $res->{FeedSubmissionId}) {
$self->_exe_query($self->sqla
->update(amazon_mws_feeds => $record,
{
amws_feed_pk => $record->{amws_feed_pk},
shop_id => $self->_unique_shop_id,
}));
}
else {
# something is really wrong here, we have to die
die "Couldn't get a submission id, response is " . Dumper($res);
}
}
print "Feed is $feed_id\n";
if (!$record->{processing_complete}) {
if ($self->_check_processing_complete($feed_id, $type)) {
# update the record and set the flag to true
$self->_exe_query($self->sqla
->update('amazon_mws_feeds',
{ processing_complete => 1 },
{
feed_id => $feed_id,
shop_id => $self->_unique_shop_id,
}));
}
else {
print "Still processing\n";
return;
}
}
# check if we didn't already processed it
if (!$record->{aborted} || !$record->{success}) {
# we need a class to parse the result.
my $result = $self->submission_result($feed_id);
( run in 2.768 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )