Package Data | |
---|---|
Maintainer Username: | pauly4it |
Maintainer Contact: | paul@foryt.com (Paul Foryt) |
Package Create Date: | 2015-06-17 |
Package Last Update: | 2019-12-26 |
Home Page: | |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-22 03:11:27 |
Package Statistics | |
---|---|
Total Downloads: | 145 |
Monthly Downloads: | 2 |
Daily Downloads: | 0 |
Total Stars: | 5 |
Total Watchers: | 2 |
Total Forks: | 3 |
Total Open Issues: | 3 |
Provides a Laravel 5 package to communicate with the Amazon Mechanical Turk API.
Mechanical Turk Production Websites:
Mechanical Turk Sandbox Websites:
Amazon Mechanical Turk Documentation:
Install by adding laraturk to your composer.json file:
require : {
"pauly4it/laraturk": "dev-master"
}
or with a composer command:
composer require "pauly4it/laraturk": "dev-master"
After installation, add the provider to your config/app.php providers:
For Laravel 5.0:
'Pauly4it\LaraTurk\LaraTurkServiceProvider',
For Laravel 5.1+:
'Pauly4it\LaraTurk\LaraTurkServiceProvider::class',
and the facade to config/app.php aliases:
For Laravel 5.0:
'LaraTurk' => 'Pauly4it\LaraTurk\Facades\LaraTurk',
For Laravel 5.1+:
'LaraTurk' => 'Pauly4it\LaraTurk\Facades\LaraTurk::class',
First publish the config file:
php artisan vendor:publish
This will create a laraturk.php
config file. There you can define default values of parameters used in all functions.
If you will only be creating one type of HIT, you should specify all the default values in the config file.
You will also need to set two environment variables which the laraturk.php config file uses: AWS_ROOT_ACCESS_KEY_ID
and AWS_ROOT_SECRET_ACCESS_KEY
. If these are not set and you try to use LaraTurk, LaraTurk will throw a LaraTurkException
.
For all functions (except getAccountBalance
), you will pass the function an array of paramaters. If you have defaults set in the config file, then the parameters you pass will override the defaults (for the keys you assign). For most of the implemented functions, refer to AWS documentation for required and optional parameters and the format of those parameters. A few parameters require different formats in LaraTurk compared to official documentation. Please see the "Special Parameter Formats" section below for those.
You must signup on the Mechanical Turk Requester site using your AWS root account email. If you plan on using the Mechanical Turk sandbox (highly recommended), you must also create a separate sandbox Requester account using your AWS root account email.
All API calls to Amazon Mechanical Turk return an XML response. LaraTurk converts the XML to an array. Thus, for all LaraTurk calls, the returned object will be an array.
For example, the Mechanical Turk API documentation shows the following XML as a response for creating a HIT:
<CreateHITResponse>
<OperationRequest>
<RequestId>ece2785b-6292-4b12-a60e-4c34847a7916</RequestId>
</OperationRequest>
<HIT>
<Request>
<IsValid>True</IsValid>
</Request>
<HITId>GBHZVQX3EHXZ2AYDY2T0</HITId>
<HITTypeId>NYVZTQ1QVKJZXCYZCZVZ</HITTypeId>
</HIT>
</CreateHITResponse>
The returned array from LaraTurk will then look like so:
[
"OperationRequest" => [
"RequestId" => "ece2785b-6292-4b12-a60e-4c34847a7916"
],
"HIT" => [
"Request" => [
"IsValid" => "True"
],
"HITId" => "GBHZVQX3EHXZ2AYDY2T0",
"HITTypeId" => "NYVZTQ1QVKJZXCYZCZVZ"
]
]
Here are a couple examples of usage:
This assumes a HIT Layout has been created on the Requester site and a HIT Type has been registered.
$params = [
'HITTypeID' => '',
'HITLayoutId' => '',
'HITLayoutParameter' => [
[
'Name' => 'image_title',
'Value' => 'Some image'
],
[
'Name' => 'description',
'Value' => 'None'
]
],
'LifetimeInSeconds' => 300,
'MaxAssignments' => 3
];
$turk = new LaraTurk;
$response = $turk->forceExpireHIT($params);
The $response
object is in the form of:
[
"OperationRequest" => [
"RequestId" => "ece2785b-6292-4b12-a60e-4c34847a7916"
],
"HIT" => [
"Request" => [
"IsValid" => "True"
],
"HITId" => "GBHZVQX3EHXZ2AYDY2T0",
"HITTypeId" => "NYVZTQ1QVKJZXCYZCZVZ"
]
]
The API response is only a true/false response, so if a LaraTurkException is not thrown, then the request succeeded.
$turk = new LaraTurk;
$response = $turk->forceExpireHIT(['HITId' => '3AQGTY5GMKYZ11S8P0G0J0DRP0MU70']);
The $response
object is in the form of:
[
"OperationRequest" => [
"RequestId" => "ece2785b-6292-4b12-a60e-4c34847a7916"
],
"ForceExpireHITResult" => [
"Request" => [
"IsValid" => "True"
]
]
]
Set the Reward
parameter like so:
$params['Reward'] = [
'Amount' => 0.07,
'CurrencyCode' => 'USD',
'FormattedPrice' => '$0.07' // optional parameter
];
Set the HITLayoutParameter
parameter like so:
$params['HITLayoutParameter'] = [
[
'Name' => 'image_title',
'Value' => 'Some image'
],
[
'Name' => 'description',
'Value' => 'None'
]
];
These correspond to the parameters you defined in your HIT Layout template.
Set the QualificationRequirement
parameter like so:
$params['QualificationRequirement'] = [
[
'QualificationTypeId' => '00000000000000000071', // Worker locale qualification
'Comparator' => 'In',
'LocaleValue' => [
[
'Country' => 'US'
],
[
'Country' => 'CA'
]
] // located in the US or Canada
],
[
'QualificationTypeId' => '00000000000000000040', // Worker approved hits qualification
'Comparator' => 'GreaterThanOrEqualTo',
'IntegerValue' => '1000'
],
[
'QualificationTypeId' => '000000000000000000L0', // Worker approval percentage qualification
'Comparator' => 'GreaterThanOrEqualTo',
'IntegerValue' => '98'
]
];
This qualification would require the worker to be located in the US or Canada, have completed at least 1000 HITs, and have at least a 98% assignment approval percentage to be able to accept your HIT.
Set the Notification
parameter like so:
$params['Notification'] = [
[
'Destination' => 'example@example.com',
'Transport' => 'Email',
'Version' => '2006-05-05',
'EventType' => [
'HITReviewable',
'HITExpired'
]
],
[
'Destination' => 'foo@bar.com',
'Transport' => 'Email',
'Version' => '2006-05-05',
'EventType' => [
'AssignmentAccepted'
]
]
];
HITs
createHITByTypeIdAndByLayoutId()
createHITByLayoutId()
changeHITTypeOfHIT()
extendHIT()
forceExpireHIT()
disableHIT()
disposeHIT()
setHITAsReviewing()
getReviewableHITs()
searchHITs()
getHIT()
registerHITType()
Assignments
getAssignmentsForHIT()
getAssignment()
approveAssignment()
rejectAssignment()
approveRejectedAssignment()
grantBonus()
getBonusPayments()
Notifications
setHITTypeNotification()
sendTestEventNotification()
Workers
blockWorker()
unblockWorker()
getBlockedWorkers()
getRequesterWorkerStatistic()
getFileUploadURL()
notifyWorkers()
Requester Account
getAccountBalance()
getRequesterStatistic()
Notes:
QuestionForm
parameter is not currently supported. You must create a HIT Layout within Mechanical Turk (for both production and sandbox modes) and get the HITLayoutID.AssignmentReviewPolicy
and/or a HITReviewPolicy
is not yet supported.If a required parameter is not found in the parameters passed or if the API call returns an error for any reason, LaraTurk will throw a LaraTurkException
. This exception works just like the base Exception
class in Laravel, but also includes an additional getErrors()
function that will return the error array returned from the API call.
For example, if the API call returns an error because the AWS credentials were invalid and you catch the exception:
...
catch(LaraTurkException $e)
{
// your code here
}
Calling $e->getMessage()
would return:
AWS credentials rejected.
Calling $e->getErrors()
would return:
"Error" => [
"Code" => "AWS.NotAuthorized",
"Message" => "The identity contained in the request is not authorized to use this AWSAccessKeyId (5934433916915 s)"
]
https://github.com/pauly4it/laraturk
If you need any help with this package or find a bug, please submit an issue.
Feel free to submit a pull request! Please add a detailed description to help me understand your change. Thanks!
The LaraTurk package is licensed under the MIT license.