#!/usr/bin/perl
use strict;
use warnings;
use Net::Amazon::MechanicalTurk;
use Net::Amazon::MechanicalTurk::XMLParser;
use Net::Amazon::MechanicalTurk::IOUtil;
#
# This sample script displays answers from the hit
# created in helloworld-create.pl.
#
# This sample demonstrates the following features:
#
# 1. Using the GetAssignmentsForHITAll method for iterating all assignments.
# 2. Using the XMLParser to get information out of the Answer XML.
# 3. Using the toString metod to see what is in a response
# or parsed XML document.
# 4. Using the ApproveAssignment method.
#
# Read the hitid from the text file
sub getHITId {
my ($file) = @_;
my $hitid = Net::Amazon::MechanicalTurk::IOUtil->readContents($file);
chomp($hitid);
return $hitid;
}
my $mturk = Net::Amazon::MechanicalTurk->new;
# Create an XML parser to go through the Answer
my $parser = Net::Amazon::MechanicalTurk::XMLParser->new;
# look up assignments for the hit
my $hitId = getHITId("hitid.txt");
my $assignments = $mturk->GetAssignmentsForHITAll( HITId => $hitId );
while (my $assignment = $assignments->next) {
# If you want to see a dump of what is in a response object from an
# API call, you can use the toString method.
#print $assignment->toString, "\n";
my $workerId = $assignment->{WorkerId}[0];
# Parse the answer XML - The answer object returned also has a toString method
my $answer = $parser->parse($assignment->{Answer}[0]);
#print $answer->toString, "\n";
my $answerText = $answer->{Answer}[0]{FreeText}[0];
printf "Worker %s said \"%s\"\n", $workerId, $answerText;
if ($assignment->{AssignmentStatus}[0] eq "Submitted") {
print "Approving the assignment.\n";
$mturk->ApproveAssignment( AssignmentId => $assignment->{AssignmentId}[0] );
}
}