Here is a simple code example that I came across in order to access Mechanical Turk. It creates a signature and invokes the GetAccountBalance operation.
using System;
using System.Globalization;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
namespace TurkTest {
class Program {
static void Main(string[] args) {
const string SERVICE_NAME = "AWSMechanicalTurkRequester";
const string TIMESTAMP_FORMAT = "yyyy-MM-ddTHH:mm:ss.fffZ";
const string operation = "GetAccountBalance";
const string accessKey = "<Your access key>";
const string secretAccessKey = "<Your secret access key>";
DateTime now = DateTime.UtcNow;
now = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, 0, DateTimeKind.Utc);
string timeStamp = now.ToString(TIMESTAMP_FORMAT, CultureInfo.InvariantCulture);
var hmac = new HMACSHA1(Encoding.UTF8.GetBytes(secretAccessKey));
var dataBytes = Encoding.UTF8.GetBytes(SERVICE_NAME + operation + timeStamp);
string signature = Convert.ToBase64String(hmac.ComputeHash(dataBytes));
string url =
@"https://mechanicalturk.amazonaws.com/?Service=AWSMechanicalTurkRequester&AWSAccessKeyId={0}&Version=2012-03-25&Operation={1}&Signature={2}&Timestamp={3}";
url = string.Format(url, accessKey, operation, signature, timeStamp);
using (WebClient client = new WebClient()) {
using (StreamReader reader = new StreamReader(client.OpenRead(url))) {
Console.WriteLine(reader.ReadToEnd());
}
}
Console.Read();
}
}
}
source
share