#!/usr/bin/perl use strict; use warnings; use Net::Amazon::MechanicalTurk; use Net::Amazon::MechanicalTurk::XMLParser; # # This script loadsHITs using an array of hashes in memory. # # This script demonstrates the following features: # 1. Using loadHITs for bulk loading. # 2. Using Net::Amazon::MechanicalTurk::XMLParser to convert an XML document # into a perl data structure. # 3. Loading hits with an array of hashes as input. # sub questionTemplate { my %params = %{$_[0]}; return < 1 How many people live in $params{city}, $params{state}? END_XML } my $properties = { Title => 'LoadHITs hits from custom code.', Description => 'This is a test of the bulk loading API.', Keywords => 'LoadHITs, bulkload', Reward => { CurrencyCode => 'USD', Amount => 0.00 }, RequesterAnnotation => "Test", AssignmentDurationInSeconds => 60 * 60, AutoApprovalDelayInSeconds => 60 * 60 * 10, MaxAssignments => 3, LifetimeInSeconds => 60 * 60 }; # Load cities.xml into an array of hashes with the fields # city and state. my @cities; my $xml = Net::Amazon::MechanicalTurk::XMLParser->new->parseFile("cities.xml"); foreach my $cityElement (@{$xml->{city}}) { push(@cities, { city => $cityElement->{name}[0], state => $cityElement->{state}[0], }); } my $mturk = Net::Amazon::MechanicalTurk->new; $mturk->loadHITs( properties => $properties, input => \@cities, question => \&questionTemplate, progress => \*STDOUT, success => "loadhits-success.csv", fail => "loadhits-failure.csv" );