#!/usr/bin/perl use strict; use warnings; use Net::Amazon::MechanicalTurk; use Net::Amazon::MechanicalTurk::RowData; # # This sample reads the results file and Rejects any rows # in the file which have a Reject column with an X in it. # # This sample demonstrates: # # 1. Using the RowData class to iterate through a delimited file. # 2. Rejecting assignments. # 3. How to examine the error code from a failed call. # # Note: RowData may be used on csv or tab delimited files. # The rows are iterated over in the code below, the contents of # the file is not read completely into memory. # my $mturk = Net::Amazon::MechanicalTurk->new; my $data = Net::Amazon::MechanicalTurk::RowData->toRowData("loadhits-results.csv"); $data->each(sub { my ($data, $row) = @_; my $assignmentId = $row->{AssignmentId}; # Reject any records that have a reject column with an X in it if (exists $row->{Reject} and lc($row->{Reject}) eq 'x') { print "Rejecting assignment $assignmentId\n"; eval { $mturk->RejectAssignment( AssignmentId => $assignmentId ); }; if ($@) { if ($mturk->response->errorCode eq "AWS.MechanicalTurk.InvalidAssignmentState") { print "Assignment $assignmentId has already been processed.\n"; } else { die $@; } } } });