AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Cover von Amazon?

Ein Thema von mlspider · begonnen am 22. Sep 2009 · letzter Beitrag vom 4. Dez 2010
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Codewalker
Codewalker

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

Re: Cover von Amazon?

  Alt 23. Sep 2009, 16:24
Zitat von Cylence:
Was ist das für eine unschöne variante mit ner 3rd Party Komponente? Würde mich interessieren. Ich find dazu nichts.
Siehe hier: http://www.delphipraxis.net/internal...036119#1036119
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Cover von Amazon?

  Alt 23. Sep 2009, 16:31
cool thanx
Tom
Just DO it
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Cover von Amazon?

  Alt 23. Sep 2009, 17:18
So Leute, ich habe es geschafft mein Cover-Load auf die AWS Version 4.0 umzustellen.

Da sich ja leider bei Amazon ab dem 08.08.2009 leider bei Amazon einiges geändert hat, ist das Abrufen von Cover wesentlich erschwert worden. Vor den oben genannten Datum funktioniert folgende Variant einwandfrei.

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, JvGIF, StdCtrls, InvokeRegistry, Rio,
  SOAPHTTPClient, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, ComCtrls, amazonwebservices;

procedure TCover.Button3Click(Sender: TObject);
var AmazonService : AmazonSearchPort;
    myrequest : KeywordRequest;
    ret : ProductInfo;
begin
  myrequest := KeywordRequest.Create;
  HTTPRio1.WSDLLocation := 'http://soap-eu.amazon.com/schemas3/AmazonWebServices.wsdl';
  try
    myrequest.keyword := Edit1.Text;
    myrequest.page := '1';
    myrequest.mode := 'music-de';
    myrequest.sort := '+salesrank';
    myrequest.tag :='webservices-20';
    myrequest.type_ :='lite';
    myrequest.devtag := 'xxxxxxxxxxxxxxxxxxxxx';
    myrequest.locale :='de';
    ret:=ProductInfo.Create;
    try
      try
        Amazonservice := HTTPRio1 as AmazonSearchPort;
        ret:=AmazonService.KeywordSearchRequest(myrequest);
      except
        exit;
      end;

  {process Productinfo} 
    finally
      ret.free;
    end;
  finally
    myrequest.free;
  end;
end;
Jetzt greife ich via PHP über mein Tool (Delphi) auf den AWS zu.

Hier der Beweis:

http://identy-design.de/beam/screen/Cover.jpg

Und wenns interessiert, poste ich nachher mal meine vollständige Lösung.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#14

Re: Cover von Amazon?

  Alt 23. Sep 2009, 17:24
Zitat von mlspider:
Und wenns interessiert, poste ich nachher mal meine vollständige Lösung.
*interessiert*

米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Cover von Amazon?

  Alt 23. Sep 2009, 17:26
Ich habe leider jetzt noch einen Zahnarzttermin. Danach poste ich die vollstänig Lösung.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Cover von Amazon?

  Alt 23. Sep 2009, 19:54
Na dann wollen wir mal.

Die Lösung ist zwar nicht ganz sauber und funktioniert nur über den Umweg "PHP".
Zunächst benötigt ihr erst einmal einen Webspace mit PHP-Unterstützung, um später darauf euer Script ablegen und aufrufen zu können. Webspaceanbieter gibt es zu hauf, auch kostenlose!!! Solltet ihr bereits eine Domain euer Eigen nennen können, könnt ihr euch das Beschaffen von Webspace klemmen.

Als nächster Schrit steht eine kostenlose Registrierung bei Amazon-Webservice an. Hier geht ihr wie folgt vor:

1. ruft folgende URL auf: http://aws.amazon.com/
2. klickt danach auf die Schaltfläche "Sign up now" (oben rechts) um ein neuen Account anzulegen
3. Gebt alle benötigten Infos ein.
4. ihr bekommt darauf hin eine Mail mit weiteren Instruktionen
5. Nachdem ihr euch erfolgreich registriert habt, ruft ihr wieder oben genannte URL auf
6. Klickt dieses mal unter "Your Account" auf "Security Credentials"
7. Einloggen
8. Auf der Seite "Security Credentials", wo ihr jetzt hoffentlich seit, seht ihr eure persöhnlichen Identifikationsdaten (mehr im mittleren Bereich der Seite). Ihr benötigt eure "Access Key ID" sowie, und dafür auf "Show" klicken, euren "Secret Access Key". Am besten aufschreiben, speichern!!!!

Das war die Amazon-Kiste. Als nächstes erstellen wir uns ein PHP-Script. Dieses ruft unsere gewünschten Infos aus unserer Suchabfrage, zu der wir später kommen, vom Server ab.

Ihr könnt hierfür einen Texteditor, oder wer über Dreamweaver oder ähnliche Editoren verfügt, auch diesen verwenden. Nur mal so am Rande. Dreamweaver verfügt über ein brauchbares Syntax Highlighting und mach die ganze Sache übersichtlicher. Naja, soviel Codezeilen sind es ja nicht.

Mein vollständiger PHP-Code:

Code:
<?php
   session_start(); //Könnte man sich auch schenken, da wir ja nach der Abfrage nichts
                         //mehr vom Server wissen möchte
   $rubrik2 = $_REQUEST["rubrik1"]; //in dieser Variable steht die zu durchsuchende Rubrik drin
   $seite2 = $_REQUEST["seite1"]; //hier wird in dieser Variabel logischer Weise eine 1
                                       //drin, da wir ja den ersten Treffer zurück haben wollen
   $schluesselwort2 = $_REQUEST["schluesselwort1"]; //hier steht der gesuchte Begriff
//Damit man die Seite nicht von außen aufrufen kann, habe ich jetzt einen Sicherheitscheck eingebaut
//Somit ist nun gewährleistet, dass man nur aus eurem Programm auf das Script zugreifen kann
//und verarbeitet wird
   $check2 = $_REQUEST["check1"];
   if ( $check2 == 'nennen wir diesen jetzt mal "sehr einfallsreich' )
   {
                //sollte die Variable $check2 mit dem Request gepasst haben ist
      //alles OK
      $secret_access_key = "Eurer secret_access_key";
                //hier muß eurer secret_access_key rein

      $access_key_id       = "Eure access_key_id";
                //hier muß eure access_key_id rein

      $associate_id           = "ihredomainphantasie-23";
                //Die associate_id könnt ihr wie oben übernehmen
   }
   else
   {
                //Sollte von aussen zugeriffen werden, wird der Else-Block ausgeführt und beendet
                //das Script
      echo 'keine Berechtigung';
      die;
   }
?>
//Den Rest könnt ihr jetzt übernehmen
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
   $dierubrik   = "Music";
   $meinthema = "Nena";
   $tableweite = "width=\"100%\"";
$cellspacg = "cellspacing=\"0\" cellpadding=\"0\"";
$zelleprig  = "padding-right: 10px; padding-top: 12px; padding-bottom: 15px;";
$zelleleft   = "padding-left: 10px; padding-top: 12px; padding-bottom: 15px;";
$zellunten = "padding-left: 10px; padding-right: 10px; padding-top: 10px; padding-bottom: 10px;";
$tabla   = "target=\"_blank\"";
$goldbr = "<span class=\"goldbraun\">";

if ($_GET) {
  $SearchIndex = $rubrik2;
  $Keywords   = $schluesselwort2;
  $ItemPage    = $seite2;
 
  $eingang = array('Ä','ä','Ö','ö','Ü','ü','ß','<','>','(',')','{','}','[',']','/','\\',' ');
  $ausgang = array('Ae','ae','Oe','oe','Ue','ue','ss','no','nie','nicht','nein','na','nae','nee','nu','nn','mm','+');
  $umlautade = str_replace($eingang,$ausgang,$Keywords);
 
  $SearchIndex = preg_replace("/[^a-zA-Z]/", "no", $SearchIndex);    
  $ItemPage    = preg_replace("/[^0-9]/", "1", $ItemPage);        

  else {$SearchIndex = $dierubrik;
           $umlautade   = $meinthema;
           $ItemPage   = 1;
}

print "\t<hr style=\"color: #FDFCFB; background-color: #FDFCFB\">\n";

$aktuelle        = gmdate("Y-m-d\TH:i:s\Z");
$aktuellezeit   = urlencode($aktuelle);
$SearchIndex = urlencode($SearchIndex);
$umlautade     = urlencode($umlautade);

$alleparameter = "AWSAccessKeyId" ."=". $access_key_id               ."&".
                          "AssociateTag"        ."=". $associate_id                   ."&".
                          "ItemPage"              ."=". $ItemPage                       ."&".
                          "Keywords"             ."=". $umlautade                      ."&".
                          "Operation"              ."=". "ItemSearch"                    ."&".
                          "ResponseGroup"     ."=". "Medium"                         ."&".
                          "SearchIndex"          ."=". $SearchIndex                  ."&".
                          "Service"                 ."=". "AWSECommerceService" ."&".
                          "Timestamp"            ."=". $aktuellezeit                     ."&".
                          "Version"                 ."=". "2009-07-18";
   
   
   
        $stringsignr = "GET\n"."ecs.amazonaws.de"."\n"."/onca/xml"."\n".$alleparameter;
       
        $signature1 = base64_encode(hash_hmac("sha256", $stringsignr, $secret_access_key, True));
       
        $signature2  = urlencode($signature1);
      

$daten = file_get_contents("http://ecs.amazonaws.de/onca/xml?".$alleparameter."&Signature=".$signature2);

//Die XML-Datei wird als String geladen.

$response = simplexml_load_string($daten);


//Auf jeden Fall muss hier der Print der Tabelle beginnen

    echo "\n\t<table border=\"0\" ".$tableweite." ".$cellspacg.">\n";

 
foreach ($response->Items->Item as $movie) {

    echo "\t<tr><td align=\"center\" style=\"".$zelleprig." border-bottom: 1px solid rgb(255,255,255)\">\n";

//Bilder mit Link zur Detailseite

if($movie->MediumImage->URL){ 
      echo ("\t<a href=\"".$movie->DetailPageURL."\" ".$tabla."><img src=\"".$movie->LargeImage->URL."\" border=\"0\" alt=\"Cover\"></a></td>\n");
   } else { echo 'Leider kein Bild
 vorhanden.';
   }


   echo "\t<td align=\"center\" style=\"".$zelleleft." border-bottom: 1px solid rgb(255,255,255)\">\n";
   }
   
   foreach ($response->Items->Request as $gefunden) {   

    //echo ("Seite ".$gefunden->ItemSearchRequest->ItemPage);

    $SearchIndex = ($gefunden->ItemSearchRequest->SearchIndex);
   
   $Deutsch = array("Books"                       => "Bücher",
                           "Music"                       => "Musik",
                           "DVD"                        => "DVDs",
                           "Toys"                         => "Spielwaren &amp; Modellbau",
                           "OutdoorLiving"           => "Hobby &amp; Freizeit",
                           "Software"                   => "Software",
                           "Tools"                        => "Werkzeug",
                           "SoftwareVideoGames" => "Video &amp; PC Spiele",
                           "HomeGarden"             => "Haus &amp; Garten",
                           "Kitchen"                     => "Haushalt",
                           "Photo"                        => "Fotografie",
                           "Electronics"                => "Elektronik");
   
   $Keywords = ($gefunden->ItemSearchRequest->Keywords);

   
}     


foreach ($response->Items as $Ergebnisse) {
   
//echo ("
 Treffer insgesamt: ".$Ergebnisse->TotalResults);
//echo (" auf ".$Ergebnisse->TotalPages. " Seiten");   

}

?>
</body>
</html>
Speichert nun diese Datei als name.php. Name ist natürlich durch euren Dateinamen zu ersetzen.
Ladet diese nun auf eurem Webspace hoch.

Für ganz faule gibt es hier den Download des Scripts. Muß natürlich angepasst werden!!!!

Download PHP-Script Amazon Webservice

Fortsetzung folgt in ein paar Minuten. Brauche erst mal ein Käffchen!!!!!

Ich hoffe es war bis hier alles verständlich. Wenn nicht einfach posten.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Cover von Amazon?

  Alt 23. Sep 2009, 21:05
Teil 2

Nun kommt der Delphi-Teil

Oberfläche:

Wir benötigen 3 Edit-Kompos, 1 Indy-HTTP-Client, 4 Labels, 1 Memo, 1 Button, 1 Image-Kompo und ein TWebBrowser.

Schiebt euch die Kompos nach belieben zusammen, da die meisten Kompos, bis auf Image1, Edit1, Button1, TWebBrowser nicht sichtbar sind. (Eigenschaften - Visible)

Setzt nun die Eigenschaft Width von TWebBrowser auf 0. Damit ist dieser auch nicht mehr zur Laufzeit zu sehen.

Der Quelltext:

Delphi-Quellcode:
unit CoverUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP, ExtCtrls, DynamicSkinForm,
  SkinCtrls;

type
  TCover = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    WebBrowser1: TWebBrowser;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    Edit3: TEdit;
    Image1: TImage;
    Label3: TLabel;
    Label4: TLabel;
    spDynamicSkinForm1: TspDynamicSkinForm;
    spSkinPanel1: TspSkinPanel;
    procedure Button1Click(Sender: TObject);
    procedure WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
    FTime: Longword;
    FBytes: Longword;
  public
    { Public-Deklarationen }
  end;

var
  Cover: TCover;

implementation

{$R *.dfm}

//Werte an die PHP übergeben
//Hier werden alle benötigten Infos an unser Script Get-Methodenmäßig übergeben
procedure TCover.Button1Click(Sender: TObject);
var rubrik, seite, schluesselwort, check: String;
begin
 rubrik:='Music';
 seite:='1';
 schluesselwort:=Edit1.Text;
 check:='nennen wir diesen jetzt mal "sehr einfallsreich';
 WebBrowser1.Navigate('http://euer Server.de/Dateiname des Scripts.php?rubrik1='+rubrik+'&seite1='+seite+'&schluesselwort1='+schluesselwort+'&check1='+check);
end;

//Unser Script gibt nun die korrekte URL zum gesuchten Begriff aus
// Diese URL (vielmehr datei downloaden wir jetzt
//Danach parsen wir die Datei in das Memo1 und löschen diese wieder von unserer Festplatte
//Aus Memo1 wird nun das gewünschte Bild(URL) gefiltert und an Edit3 aufbereitet übergeben.
//Jetzt wird Die Datei runtergeladen und in Image1 angezeigt
procedure TCover.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var DownloadStream: TFilestream;
    Liste: TStrings;
    myString : String;
    ipString : String;
    i : Integer;
begin
 Label1.Caption:=ExtractFilePath(ParamStr(0))+
    'Conf\data\temp.html';
 Label4.Caption:=ExtractFilePath(ParamStr(0))+
    'Conf\data\temp.jpg';
 Edit2.Text:=WebBrowser1.LocationURL;
 Label2.Caption:=Edit2.Text;
 DownloadStream := TFileStream.Create(Label1.Caption,fmCreate);
  try
    IDHTTP1.Get(Label2.Caption, downloadstream);
  finally
    DownloadStream.Free;
  Liste := TStringlist.Create;
  Liste.LoadFromFile(Label1.Caption);
  Memo1.Lines.AddStrings(Liste);
  Liste.Free;
  myString := Memo1.Text;
  i := Pos ('ecx',mystring);
  Delete (myString,1,i);
  i := Pos ('"',mystring);
  ipString := Copy(myString,1,i-1);
  Edit3.Text := 'http://e'+ipString;
  Memo1.Clear;
  DeleteFile(Label1.Caption);
  DownloadStream := TFileStream.Create(Label4.Caption,fmCreate);
  IDHTTP1.Get(Edit3.Text, downloadstream);
  DownloadStream.Free;
  Image1.Picture.LoadFromFile(Label4.Caption);
  end;
end;

end.
Das wars. Ich wünsche nun viel Spass beim nachbauen. Sollte es Schwierigkeiten, Verbesserungsvorschläge und/oder Kritik geben, einfach posten. Auch ich bin nicht perfekt!!!

Auch Erfolgsergebnisse könnt ihr mir posten. Eine PN tuts auch.

lg, Mario

PS: An Euch Moderatoren: Wenn ihr der Meinung seit, dass dies ein Eintrag in der Code-Libary wert ist, dann nichts wie rein damit. Das wäre denn mein erstes Example.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Benutzerbild von Logic
Logic

Registriert seit: 28. Nov 2003
132 Beiträge
 
Delphi 7 Personal
 
#18

Re: Cover von Amazon?

  Alt 29. Apr 2010, 23:29
Hey mlspider,
du scheinst dich schon etwas mit AWS beschäftigt zu haben. Vielleicht kannst du mir weiterhelfen. Mein Problem ist jetzt nicht so kompliziert wie deins, geht nur um Standard-Produktdaten.

Ich versuche schon seit ein paar Tagen amazon dazu zu bringen anstatt nach einer ASIN nach einer EAN zu suchen. Hast du eine Idee wie ich den angehängten Code abändern könnte?
Mit der ASIN funktioniert es ohne Probleme, nur wenn ich den Typ auf EAN stelle und auch den Paramter ItemIndex hinzufüge, geht es immer noch nicht.
Angehängte Dateien
Dateityp: txt 2-3_585.txt (1,6 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Cover von Amazon?

  Alt 30. Apr 2010, 11:49
Wird die EAN überhaupt auf Amazon ausgegeben?
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Benutzerbild von Logic
Logic

Registriert seit: 28. Nov 2003
132 Beiträge
 
Delphi 7 Personal
 
#20

Re: Cover von Amazon?

  Alt 30. Apr 2010, 12:08
Zitat von mlspider:
Wird die EAN überhaupt auf Amazon ausgegeben?
Also auf der amazon webpage soviel ich weiß nicht. Aber wir grefein ja auf das AWS zu oder?
Laut "Product Advertising API" kann beim ItemLookup der IdType auch eine EAN sein: http://docs.amazonwebservices.com/AW...temLookup.html

deswegen hab ich meinen Request so angepasst, aber es klappt nicht.

Code:
$requestparms = 'AWSAccessKeyId='.$ACCESS_KEY_ID.'&AssociateTag=ws&IdType=EAN&ItemId=4010884534207&Operation=ItemLookup&SearchIndex=DVD&ResponseGroup=Request,Small&Service=AWSECommerceService&Timestamp='.$timestamp.'&Version=2009-10-01';
die API hat folgendes Beispiel, aber ich habe alle Parameter ausm Beispiel übernommen:

Code:
 In the following request, the ItemId is an EAN, which requires that you also specify the SearchIndex and ItemType.

[url]http://ecs.amazonaws.com/onca/xml?[/url]
Service=AWSECommerceService&
AWSAccessKeyId=[AWS Access Key ID]&
Operation=ItemLookup&
ItemId=[EAN]&
SearchIndex=Electronics&
IdType=EAN
&Timestamp=[YYYY-MM-DDThh:mm:ssZ]
&Signature=[Request Signature]
Und Signatur und Timestamp müssen richtig sein, weil für die ASIN funktioniert ja der Request, und ich änder ja nix als den Paramter ab. Und die Signatur wird ja für den Parameter entsprechend neuberechnet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz