public
Description: RTurk - A simple wrapper and library for Amazon's Mechanical Turk
Homepage: http://github.com/markpercival/rturk
Clone URL: git://github.com/markpercival/rturk.git
rturk /
name age message
file .gitignore Sat Aug 08 10:49:50 -0700 2009 ignoring gem builds [markpercival]
file .gitmodules Sun Oct 25 21:23:21 -0700 2009 yardoc [markpercival]
file .yardoc Sun Oct 25 21:23:21 -0700 2009 yardoc [markpercival]
file LICENSE Thu Jul 09 08:38:38 -0700 2009 More gem cleanup [markpercival]
file README.markdown Thu Nov 19 12:33:09 -0800 2009 Made the documentation example clearer for what... [David Balatero]
file Rakefile Tue Oct 27 12:50:55 -0700 2009 Made the Rakefile more friendly if you don't ha... [David Balatero]
file TODO.markdown Wed Oct 14 19:42:43 -0700 2009 some of these files are leaving [markpercival]
file VERSION Sun Nov 01 19:29:46 -0800 2009 version bump [markpercival]
directory aws_docs/ Tue Oct 27 20:02:38 -0700 2009 getting tired of always having to have an inter... [markpercival]
submodule doc - 3efa011 Sun Oct 25 21:25:30 -0700 2009 docs [markpercival]
directory examples/ Mon Oct 26 05:42:29 -0700 2009 log fix and clean slate improvements [markpercival]
directory lib/ Fri Nov 06 18:52:35 -0800 2009 Conforming to Amazon Spec regarding to Register... [David Dai]
file rturk.gemspec Sun Nov 01 20:17:02 -0800 2009 cleaned up parameter checking errors, more desc... [markpercival]
directory spec/ Fri Nov 06 18:52:35 -0800 2009 Conforming to Amazon Spec regarding to Register... [David Dai]
README.markdown

RTurk - A ridiculously simple Mechanical Turk library in Ruby

What's it do?!?

RTurk is designed to fire off Mechanical Turk tasks for pages that reside on a external site.

The pages could be a part of a rails app, or just a simple javascript enabled form.

If you want to build forms that are hosted on Mechanical Turk, this is not the library you need. You'd be better off with amazon's official library, in all its XML cruftiness.

Installation

sudo gem install rturk --source http://gemcutter.org

Use

Let's say you have a form at "http://myapp.com/turkers/add_tags" where Turkers can add some tags to items in your catalogue.

Creating HIT's

require 'rturk'

RTurk.setup(YourAWSAccessKeyId, YourAWSAccessKey, :sandbox => true)
hit = RTurk::Hit.create(:title => "Add some tags to a photo") do |hit|
  hit.assignments = 2
  hit.description = 'blah'
  hit.question("http://myapp.com/turkers/add_tags",
               :frame_height => 1000)  # pixels for iframe
  hit.reward = 0.05
  hit.qualifications.add :approval_rate, { :gt => 80 }
end

p hit.url #=>  'https://workersandbox.mturk.com:443/mturk/preview?groupId=Q29J3XZQ1ASZH5YNKZDZ'

Reviewing and Approving hits HIT's

hits = RTurk::Hit.all_reviewable

puts "#{hits.size} reviewable hits. \n"

unless hits.empty?
  puts "Reviewing all assignments"

  hits.each do |hit|
    hit.assignments.each do |assignment|
      puts assignment.answers['tags']
      assignment.approve! if assignment.status == 'Submitted'
    end
  end
end

Wiping all your hits out

hits = RTurk::Hit.all_reviewable

puts "#{hits.size} reviewable hits. \n"

unless hits.empty?
  puts "Approving all assignments and disposing of each hit!"

  hits.each do |hit|
    hit.expire!
    hit.assignments.each do |assignment|
      assignment.approve!
    end
    hit.dispose!
  end
end

Logging

Want to see what's going on - enable logging.

RTurk::logger.level = Logger::DEBUG

Nitty Gritty

Here's a quick peak at what happens on the Mechanical Turk side.

A worker takes a look at your hit. The page will contain an iframe with your question URL loaded inside of it.

Amazon will append the AssignmentID parameter to the URL for your own information. In preview mode this will look like

http://myapp.com/turkers/add_tags?item_id=1234&AssignmentId=ASSIGNMENT_ID_NOT_AVAILABLE

If the Turker accepts the HIT, the page will reload and the iframe URL will resemble

http://myapp.com/turkers/add_tags?item_id=1234&AssignmentId=1234567890123456789ABC

The form in your page MUST CONTAIN the AssignmentID in a hidden input element. You could do this on the server side with a rails app, or on the client side with javascript(check the examples)

Anything submitted in this form will be sent to Amazon and saved for your review later.

More information

Take a look at the Amazon MTurk developer docs for more information. They have a complete list of API operations, all of which can be called with this library.