2017-05-11 1 views
1

Je suis un débutant à boto et j'essaie de parcourir les résultats de la je peux obtenir.Comment peut itérer à travers les résultats dans boto3 avec mturk

En particulier, je veux compter tous les travailleurs ayant une qualification donnée. Cependant, la limite est 100 et je ne comprends pas comment cela fonctionne avec NextToken. Quelqu'un pourrait-il m'aider?

# next_token = 1 
qualification_count = 0 
while True: 
    response = s3.list_workers_with_qualification_type(
     QualificationTypeId=qualification_id, 
     Status='Granted', 
     MaxResults=100, 
     NextToken=next_token 
    ) 
    next_token = response['NextToken'] 
    qualification_count += response['NumResults'] 

clairement le next_token n'est pas correct, mais je ne sais pas ce qu'elle devrait être

+0

J'ai vérifié les documents mais il n'explique pas la partie: http://boto3.readthedocs.io/en/latest/reference/services/mturk.html#MTurk.Client.list_workers_with_qualification_type – Niko

Répondre

0

Il y a quelques choses qui pourraient être vissant cela pour vous. La première, qui est mineure, est que le client que vous utilisez s'appelle s3. Cela peut être simplement un nom de variable que vous avez choisi pour MTurk, mais il vaut la peine de vous assurer que vous n'essayez pas de l'appeler par rapport au client AWS S3. La seconde est que vous référencez next_token (la variable) lors de votre premier appel dans la boucle While. Le problème est qu'il ne sera pas initialisé votre première fois, donc est voué à l'échec. Encore une fois, cela pourrait être une relique du bref extrait de code que vous avez montré et pas vraiment le problème.

Mais de toute façon, le code suivant devrait fonctionner. Notez que vous pouvez configurer la taille de la page à retourner (jusqu'à 100, je crois). Mais l'important est qu'il ne passe jamais dans un NextToken non initialisé et qu'il configure correctement le client MTurk. Ce code fonctionne sur ma fin. Faites-moi savoir si vous rencontrez des problèmes avec cela. Heureux d'aider plus loin.

import boto3 

region_name = 'us-east-1' 
aws_access_key_id = 'YOUR_ACCESS_KEY' 
aws_secret_access_key = 'YOUR_SECRET_KEY' 

PAGE_SIZE = 20 

endpoint_url = 'https://mturk-requester-sandbox.us-east-1.amazonaws.com' 

client = boto3.client('mturk', 
    endpoint_url = endpoint_url, 
    region_name = region_name, 
    aws_access_key_id = aws_access_key_id, 
    aws_secret_access_key = aws_secret_access_key, 
) 

qualification_id='9W4ZQKNWM3FZ5HGM2070' 

response = client.list_workers_with_qualification_type(
     QualificationTypeId=qualification_id, 
     Status='Granted', 
     MaxResults=PAGE_SIZE 
    ) 
next_token = response['NextToken'] 

qualification_count = response['NumResults'] 
while (response['NumResults'] == PAGE_SIZE): 
    print "Using next token of {}".format(next_token) 
    response = client.list_workers_with_qualification_type(
      QualificationTypeId=qualification_id, 
      Status='Granted', 
      MaxResults=PAGE_SIZE, 
      NextToken=next_token 
    ) 
    next_token = response['NextToken'] 
    qualification_count += response['NumResults'] 

print "There are {} Workers in Qualification {}".format(qualification_count, qualification_id) 
+0

Aussi, il est probablement évident, mais veuillez noter que l'exemple de code ci-dessus est défini pour MTurk Sandbox. Si vous avez besoin de le faire dans l'environnement MTurk Production, changez simplement endpoint_url en: endpoint_url = 'https://mturk-requester-sandbox.us-east-1.amazonaws.com' – jrb

+0

Merci beaucoup pour la réponse! Ce code fonctionne parfaitement. – Niko