2017-05-11 17 views
1

私はbotoの初心者です。私が得ることのできる結果を反復しようとしています。mturkでboto3の結果を反復処理する方法

特に、特定の資格を持つすべての労働者を数えたいと思います。ただし、制限は100で、NextTokenとの動作は分かりません。誰も私を助けることができますか?

# 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'] 

はっきりnext_tokenが正しくありませんが、私はそれが

+0

私は、ドキュメントをチェックしますが、一部については説明しません:http://boto3.readthedocs.io/en/latest/reference/services/mturk.html#MTurk.Client.list_workers_with_qualification_typeを – Niko

答えて

0

あなたのためにこれを台無しにするかもしれないいくつかのものがありますがどうあるべきか分かりません。最初の部分は、使用しているクライアントの名前がs3であるということです。これは、あなたがMTurkのために選択した変数の名前かもしれませんが、AWS S3クライアントに対してこれを呼び出さないようにする価値があります。

二つ目は、あなたがWhileループにあなたの最初の呼び出しで(変数)をnext_token参照していることです。問題は、最初に初期化されず、失敗することになるということです。繰り返しますが、これはあなたが示した簡単なコードスニペットの遺物であり、実際には問題ではありません。

いずれにしても、次のコードが有効です。返すページのサイズを設定することができます(最大100、私は信じています)。しかし重要な点は、初期化されていないNextTokenで決して通過しないことと、MTurkクライアントを正しく設定することです。このコードは私の最後で動作します。あなたがそれに問題を抱えたら教えてください。さらに喜んで助けてください。

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

また、それはおそらくです上記のコードサンプルはMTurk Sandbox用に設定されていることに注意してください。 endpoint_url =「https://mturk-requester-sandbox.us-east-1.amazonaws.com」 – jrb

+0

おかげで答えのために多くのことを:あなたはMTurk本番環境でこれを実行する必要がある場合は、ちょうどにendpoint_urlを変更!このコードは完全に機能します。 – Niko

関連する問題