Bis vor dem 1. August war das recht unkompliziert. Amazon bietet einen Webservice an, über den das relativ einfach ging. Benötigt wird der
Access Key ID und der Secret
Access Key und die
WSDL-Definition des Webdienstes (etwas versteckt war die auch zum Download bei Amazon erhältlich). Diese kann man in Delphi dann importieren und bekommt eine
Unit (AWSECommerceService.pas) erstellt mit einer Klasse die den Zugriff auf Amazon kapselt. Der Zugriff lief ungefähr so (SmallImage, MediumImage und LargeImage sind Images auf der Form, Util eine kleine Hilfsunit von mir ):
Delphi-Quellcode:
var
AmazonPort: AWSECommerceServicePortType;
body: ItemLookup;
aRequest: ItemLookUpRequest;
aResponse: ItemLookupResponse;
Id: Array_Of_string;
groups: Array_Of_string;
Item: Item4
memstr: TMemoryStream;
begin
AmazonPort := GetAWSECommerceServicePortType(true, '', HTTPrio); // Verbindung aufbauen. HTTPrio wird gebraucht, um Umlaut per UTF8InHeader zu verarbeiten
body := ItemLookup.Create;
body.AWSAccessKeyId := 'DEIN ACCESSKEY';
body.SubscriptionId := 'Dein Amazon Associate Benutzername';
body.AssociateTag := 'Dein Amazon Associate Benutzername';
aRequest := ItemLookupRequest.Create;
{ Abfrage per ASIN-ID - der Amazon-Produktschlüssel}
SetLength(Id, 1);
Id[0] := 'Die ASIN zum Suchen';
aRequest.ItemId := Id;
{ Abfrage Gruppen (s. Dokumentation von Amazon) }
SetLength(groups, 4);
groups[0] := 'EditorialReview';
groups[1] := 'Images';
groups[2] := 'ItemAttributes';
groups[3] := 'Medium';
aRequest.ResponseGroup := groups;
{ Abfrage mit Body verbinden }
SetLength(arr_request, 1);
arr_request[0] := aRequest;
body.Request := arr_request;
aResponse := AmazonPort.ItemLookup(body); // Abfrage durchführen
item := aResponse.Items[0].Item[0]; // Rückgabewert verarbeiten (Quick & Dirty fürs kurze zeigen)
{ Laden der Coverbilder }
memstr := TMemoryStream.Create;
Util.DownloadFromToStream(aResponse.Items[0].Item[0].SmallImage.URL,
memstr);
memstr.Seek(0, 0);
SmallImage.LoadFromStream(memstr);
memstr.Clear;
Util.DownloadFromToStream(aResponse.Items[0].Item[0].MediumImage.URL,
memstr);
memstr.Seek(0, 0);
MediumImage.LoadFromStream(memstr);
memstr.Clear;
Util.DownloadFromToStream(aResponse.Items[0].Item[0].LargeImage.URL,
memstr);
memstr.Seek(0, 0);
LargeImage.LoadFromStream(memstr);
memStr.Free;
end;
Problem ist: Seit August muss jede Anfrage auf eine bestimmte Weise signiert sein. Damit habe ich mich nur am Rande beschäftigt. Im Prinzip bleibt es so wie oben gezeigt, aber ein passender Hashwert muss dazu - falls das jemand mit Delphi hinbekommt wäre ich sehr interessiert (in der
DP gibt es eine unschöne Lösung mit einer 3rd-Party-Komponente).