2017-05-11 4 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 샌드 박스에 설정되어 있습니다. MTurk Production 환경에서이 작업을 수행하려면 endpoint_url을 다음과 같이 변경하십시오. endpoint_url = 'https://mturk-requester-sandbox.us-east-1.amazonaws.com' – jrb

+0

감사합니다. 이 코드는 완벽하게 작동합니다. – Niko