Thema: Delphi Cover von Amazon?

Einzelnen Beitrag anzeigen

Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Cover von Amazon?

  Alt 22. Sep 2009, 17:57
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).
  Mit Zitat antworten Zitat