Ciao a tutti,
sto provando a sviluppare uno script con le API di AWS che, dato il codice ISBN di un libro, restituisca i relativi dettagli (Titolo, Autore etc...).
Come sicuramente saprete, Amazon richiede la firma delle GET Request, che io eseguo tramite questa Funzione PHP:
L'URL che viene generato però pare non andare bene ad AWS, in quanto mi viene restituito il seguente errore, quando in realtà sto eseguendo una sola richiesta:
Sapreste aiutarmi a risolvere il problema?
Grazie Mille
sto provando a sviluppare uno script con le API di AWS che, dato il codice ISBN di un libro, restituisca i relativi dettagli (Titolo, Autore etc...).
Come sicuramente saprete, Amazon richiede la firma delle GET Request, che io eseguo tramite questa Funzione PHP:
Codice:
$q="CODICE_ISBN";
$private_key = "LAMIAPKEY";
$params["AWSAccessKeyId"] = "LAMIAKEY";
$params["AssociateTag"] = "REFTAG";
$params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");
function signAmazonUrl($url, $secret_key)
{
$original_url = $url;
// Decode anything already encoded
$url = urldecode($url);
// Parse the URL into $urlparts
$urlparts = parse_url($url);
// Build $params with each name/value pair
foreach (explode('&', $urlparts['query']) as $part) {
if (strpos($part, '=')) {
list($name, $value) = explode('=', $part, 2);
} else {
$name = $part;
$value = '';
}
$params[$name] = $value;
}
// Include a timestamp if none was provided
if (empty($params['Timestamp'])) {
$params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');
}
// Sort the array by key
ksort($params);
// Build the canonical query string
$canonical = '';
foreach ($params as $key => $val) {
$canonical .= "$key=".rawurlencode(utf8_encode($val))."&";
}
// Remove the trailing ampersand
$canonical = preg_replace("/&$/", '', $canonical);
// Some common replacements and ones that Amazon specifically mentions
$canonical = str_replace(array(' ', '+', ',', ';'), array('%20', '%20', urlencode(','), urlencode(':')), $canonical);
// Build the sign
$string_to_sign = "GET\n{$urlparts['host']}\n{$urlparts['path']}\n$canonical";
// Calculate our actual signature and base64 encode it
$signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secret_key, true));
// Finally re-build the URL with the proper string and include the Signature
$url = "{$urlparts['scheme']}://{$urlparts['host']}{$urlparts['path']}?$canonical&Signature=".rawurlencode($signature);
return $url;
}
$amazon_request=signAmazonUrl('http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&Operation=ItemLookup&ResponseGroup=Large&SearchIndex=All&IdType=ISBN&ItemId='.$q.'&AWSAccessKeyId='.$params["AWSAccessKeyId"].'&AssociateTag='.$params["AssociateTag"].'&Timestamp='.$params["Timestamp"], $private_key);
echo "$amazon_request";
L'URL che viene generato però pare non andare bene ad AWS, in quanto mi viene restituito il seguente errore, quando in realtà sto eseguendo una sola richiesta:
Codice:
<Error>
<Code>RequestThrottled</Code>
<Message>
AWS Access Key ID: *LAMIAKEY*. You are submitting requests too quickly. Please retry your requests at a slower rate.
</Message>
</Error>
Sapreste aiutarmi a risolvere il problema?
Grazie Mille