2015-03-25 1 views
0

J'essaye de configurer des notifications SQS pour un MTurk HIT créé en utilisant Boto. Je suis capable de créer le type HIT, créer un HIT avec ce type, créer une file d'attente SQS, écrire et lire dans la file d'attente. J'ai également écrit la commande que (j'ai pensé) établirait des notifications pour le type donné de HIT. Mais aucune notification n'est envoyée.Utilisation de Boto pour envoyer des notifications SQS pour un hit MTurk

Une idée de ce qui se passe?

print "Debugging..." 

import boto 
import boto.sqs 
from boto.mturk.connection import MTurkConnection 
from boto.mturk.question import QuestionContent, Question, QuestionForm, \ 
    Overview, AnswerSpecification, SelectionAnswer, FormattedContent, \ 
    FreeTextAnswer 
import uuid 

ACCESS_ID = 'REDACTED' 
SECRET_KEY = 'REDACTED' 
HOST = 'mechanicalturk.sandbox.amazonaws.com' 

mtc = MTurkConnection(aws_access_key_id=ACCESS_ID, 
         aws_secret_access_key=SECRET_KEY, 
         host=HOST) 

print mtc.get_account_balance() 

# --------------- DESIGN THE HIT ------------------- 

title = 'Give your opinion about a website ' + str(uuid.uuid4()) 
print title 

description = ('Visit a website and give us your opinion about' 
       ' the design and also some personal comments') 
keywords = 'website, rating, opinions' 

ratings = [ 
    ('Very Bad', '-2'), 
    ('Bad', '-1'), 
    ('Not bad', '0'), 
    ('Good', '1'), 
    ('Very Good', '1') 
] 

# --------------- BUILD OVERVIEW ------------------- 

overview = Overview() 
overview.append_field('Title', 'Give your opinion on this website') 
overview.append(FormattedContent('hello')) 

qc1 = QuestionContent() 
qc1.append_field('Title', 'Your personal comments') 

fta2 = FreeTextAnswer() 

q = Question(identifier="comments", 
      content=qc1, 
      answer_spec=AnswerSpecification(fta2)) 

# --------------- BUILD THE QUESTION FORM ------------------- 

question_form = QuestionForm() 
question_form.append(overview) 
question_form.append(q) 

# --------------- CREATE THE HIT ------------------- 

hit_type = mtc.register_hit_type(
    title, 
    description, 
    0.05, 
    60*5, 
    keywords=keywords, 
    approval_delay=None, 
    qual_req=None)[0] 

print hit_type.HITTypeId 

hit = mtc.create_hit(
    hit_type=hit_type.HITTypeId, 
    questions=question_form, 
    max_assignments=1, 
    title=title, 
    description=description, 
    keywords=keywords, 
    duration=60*5, 
    reward=0.05)[0] 

print hit 
print dir(hit) 
print hit.HITTypeId 

sqs_connection = boto.sqs.connect_to_region(
    "us-west-2", 
    aws_access_key_id=ACCESS_ID, 
    aws_secret_access_key=SECRET_KEY) 

# Set up Amazon Simple Queue Service. 
queue_name = "wallace_queue" 
queue = sqs_connection.create_queue(queue_name) 
sqs_connection.add_permission(
    queue, 
    "MTurkSendMessage", 
    "755651556756", 
    "SendMessage") 

m = boto.sqs.message.Message() 
m.set_body("hello world.") 
queue.write(m) 

rs = queue.get_messages() 
for m in rs: 
    msg = m.get_body() 
    print "got message:" 
    print msg 
    assert msg == "hello world." 

# set up queue notifications 
qrl = "https://sqs.us-west-2.amazonaws.com/134127175127/" + queue_name 
all_event_types = [ 
    "AssignmentAccepted", 
    "AssignmentAbandoned", 
    "AssignmentReturned", 
    "AssignmentSubmitted", 
    "HITReviewable", 
    "HITExpired", 
] 
mtc.set_sqs_notification(
    hit.HITTypeId, qrl, event_types=all_event_types) 

print "Done." 

Répondre

-1

Si vous luttez toujours avec cela, il y a des autorisations dont vous avez besoin de mettre en SQS pour permettre MTurk d'envoyer des messages. Ils sont décrits ici: enter link description here

0

Vous devriez aller à votre propre file d'attente sur la console AWS SQS et ajoutez une nouvelle autorisation:

Effet: Permettre

principaux: arn: aws: iam :: 755651556756: utilisateur/MTurk-SQS

Actions: SendMessage

Plus tard, vous devez construire votre HITType avec vos notifications préférées et l'URL de votre file d'attente. De cette façon, lorsque vous créez une requête HIT sur mturk, le seul et unique utilisateur valide d'Amazon Mechanical Turk «MTurk-SQS» enverra vos messages de notifications de votre compte mturk requester.sandbox à votre file d'attente SQS.

Vous devrez peut-être voir ces étapes à partir de MTurkR's Notifications.