我是 boto 的新手,我尝试迭代我可以获得的结果。
特别是,我想统计具有给定资格的所有 worker 。但是,限制是 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 不正确,但我不知道它应该是什么
最佳答案
有一些事情可能会让你搞砸。第一个(次要的)是您使用的客户端名为 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)
关于python - 如何使用 mturk 迭代 boto3 中的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43922317/