Amazon Product Advertising API – Authentifizierung

10 07 2009

Amazon plant zum 15.08.2009 eine meiner Meinung nach recht komplizierte Änderung an der XML-Schnittstwelle zum Abfragen von Amazon-Daten.
Die Product Advertising API (ehemals Amazon Web Service) benötigt ab dem 15.08.2009 eine Authentifizierung sonst bekommt man keine Daten mehr ausgeliefert. Die Authentifizierungsmethode ist recht schwer zu verstehen finde ich, deshalb poste ich hier mal meine Lösung. Ist nicht gerade die eleganteste Lösung aber es müsste funktionieren. Aber ich übernehme keinen Gewähr ;-)

Die Abfrage ($api_url) ist eine Beispielabfrage und muss durch Eure eigene ersetzt werden. Aussderm müssen der “Access Key” und der “Secret Access Key” von Euch eingetragen werden.
Ganz wichtig ist dass die URL “urlencoded” sein muss. Und zwar aus dem UTF8-Zeichensatz heraus. Soll heissen erst den String (z.B. das übergebene Suchwort) nach UTF8 umwandeln und dann “urlencoden”.

Zum Beispiel:
$query_keyword = “Hängematte”;
$query_keyword = urlencode(utf8_encode($query_keyword));
Query:
http://webservices.amazon.de/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=xxx&Operation=ItemSearch&Keywords=”.$query_keyword.”&ResponseGroup=Medium&SearchIndex=Electronics&ItemPage=1

Solltet Ihr nicht aus Deutschland kommen dann muss noch die Local-Zone angepasst werden. Also in der URL und beim “$host” einfach .de durch Eure Local-Zone ersetzen.
Die Ergebnis-URL muss noch urlencoded werden und kann dann direkt z.B. mit simple_load_file geparst werden.
Also viel Spass damit und wenn es Fragen oder Anregungen gibt, immer her damit! Die Doku zur Amazon Product Advertising API ist übrigens auch recht schwer zu verstehen finde ich.

$api_url = "http://webservices.amazon.de/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=ACCESS_KEY&Sort=-price&Operation=ItemSearch&Keywords=KEYWORD&ResponseGroup=Medium&SearchIndex=SEARCH_INDEX&ItemPage=1";
 
#############################################################################################
## Amazon Product Advertising API Authentifizierung #########################################
#############################################################################################
function amazon_url_signer($raw_amazon_url){
	$file_03_01 = $raw_amazon_url."&Version=".date("Y-m-d");
	$file_03_02 = $file_03_01."&Timestamp=".str_replace(":", "%3A", str_replace("+00:00", "", gmdate("c")."Z"))."";
	$file_03_03 = str_replace(",", "%2C", $file_03_02);
	$file_03_04 = str_replace(";", "%3B", $file_03_03);
 
	$file_03_05 = parse_url($file_03_04);
	$file_03_06 = explode("&", $file_03_05["query"]);
		asort($file_03_06);
		for($i=0; $i < count($file_03_06); $i++){
			$file_03_06 = implode("&", $file_03_06);
		}
	$uri = "/onca/xml";
	$host = "webservices.amazon.de";
	$method = "GET";
	$file_03_07 = $method."\n".$host."\n".$uri."\n".$file_03_06;
 
	$file_03_08 = base64_encode(hash_hmac('sha256',$file_03_07,'SECRET_KEY',true));
	$file_03_09 = str_replace("%7E", "~", rawurlencode($file_03_08));
 
	$file_03_xx = $file_03_04."&Signature=".$file_03_09;
	return $file_03_xx;
}
############################################################################################# 
 
$file_for_xml = amazon_url_signer($api_url);

Aktionen

Informationen

2 Antworten zu “Amazon Product Advertising API – Authentifizierung”

18 07 2009
admin (11:00:25) :

Hi Christopher,

ich kenne Dein CMS leider überhaupt nicht, deshalb kann ich Dir auch nicht weiterhelfen. Du musst Dich wohl an den Programmierer des CMS wenden und ihn bitten bzw. darauf hoffen, dass dieser das entsprechende Amazon Adon für das CMS aktualisiert.

Gruss Markus

18 07 2009
Christopher (16:45:43) :

Danke für Deine Rückmeldung. Ich habe bisschen gesucht und einen speziellen Widget für mein CMS gefunden. Dieser Widget, ist speziell für Amazon API entwickelt worden. Ich werde wohl diese Daten anpassen müssen.

Schreib einen Kommentar

Du kannst diese Tags verwenden : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">