Zur Boardunity Forenstartseite

Zurück   Boardunity Ratgeber Forum » Technik » Programmierung und Datenbanken

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1  
Alt 09.01.2005, 00:49
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.605

Klasse gesucht um auf die Amazon API zugreifen zu können


Guten Morgen,

Der Titel sagt eigentlich alles.. Ich such eine Klasse mit der ich Bücher (o.ä.) von Amazon auf meiner Seite anzeigen lassen kann.

Ich hab gerade bereits folgende probiert:

http://freshmeat.net/projects/amazon_webservice_api/


Leider funktioniert sie nicht so gut bzw. garnicht da unvollständig und nur für echte Experten geeignet


Ziel ist es, zu einem Suchbegriff passende Bücher auszulesen, den Link mit meiner Partner-ID zu verknüpfen und so ein paar Cent mehr zu machen.


Ich hab es bei Reimer mal gesehen, vielleicht öffnet er ja seine Schatztruhe für mich?

Würd' mich über Antworten freuen


(P.S. Hab mich bei Amazon bereits für den Development Service angemeldet und habe eine gültige ID)


Hilfe, das Forum ist runtergerutscht und ich hab das falsche erwischt Kann es jemand dahin verschieben wo es eigentlich hin sollte?
  #2  
Alt 09.01.2005, 01:31
Benutzerbild von Jan Stöver
Boardunity Team
 
Registriert seit: 12.2003
Ort: Lübeck
Beiträge: 2.183
Ich bin gerade am testen von diesem Ding ... kannst dir ja auch mal anschauen. Bin aber noch nicht näher darauf eingegangen.

Habe aber bei vielen Leuten gelesen, dass sie auf nuSOAP schwören, weil man damit längst nicht auf Amazon beschränkt ist.

Reimer´s Erfahrung und Umsetzung würde mich allerdings auch interessieren.

__________________
Jan Stöver
  #3  
Alt 09.01.2005, 01:40
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.605
Ich bin jetzt an http://associatesshop.filzhut.de/dow...ferer=#Summary dran.

Ist leider vollkommen auf englisch ausgelegt und bietet ein komisches System, sodass ich mir nicht sicher bin ob meine Partnerlinks auch gehen.

Würde denn ein Link wie http://www.amazon.de/exec/obidos/asi...agodentreff-20 reichen? (Nicht klicken, sonst denkt ihr noch ich will Kohle machen )


Ansonsten werd ich das wohl nehmen. Es ist zwar knapp über 1000 Zeilen lang (allein die Funktionen), es bietet aber ne Caching-Funktion und wenn ich den ganzen Unsinn rausschmeisse dürfte ich auf 200 Zeilen kommen *g*

  #4  
Alt 09.01.2005, 01:45
Benutzerbild von Jan Stöver
Boardunity Team
 
Registriert seit: 12.2003
Ort: Lübeck
Beiträge: 2.183
Der associatesshop ist ja schon wieder ein richtiger Shop wenn ich das richtig lese und mir die Examples anschaue.

Das finde ich schon wieder zu übertrieben.

__________________
Jan Stöver
  #5  
Alt 09.01.2005, 01:50
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.605
Ich klau mir ja nur die Funktionen zum Zugriff *g*

Momentan verwende ich ne modifizierte Version der Demo: http://associatesshop.filzhut.de/dow...ple1_index.php

(Die dort nicht funktioniert weil dort keine Developer-ID hinterlegt ist)

Was mir allerdings aufgefallen ist: Die Demo von der Klasse die du grade testest findet ein Produkt anhand der ASIN welches 'meine' Klasse nicht findet. Ausserdem findet es Bücher, kann die Details auch anzeigen und wenn ich es dann bestellen will oder mir die Details auf amazon.de angucken will findet er das Produkt nicht. Komisches Ding, das.


btw. Hab den Beitrag über deinem letzten geändert, lies das mal

btw.² Verschieb es mal bitte ins passende Forum

  #6  
Alt 09.01.2005, 09:10
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 989
Fast jeder kennt Amazon von Namen her und viele weitere sind dort registrierte Kunden. Amazon bietet zudem ein Partnerprogramm an um auf der eigenen Seite für Artikel von Amazon zu werben. Das Problem ist, dass dies mit einem großen Arbeitsaufwand verbunden ist. Für jeden Artikel müssen Bannercodes verwaltet werden und in die Seite eingefügt werden.

Wäre es nicht schön, wenn man dies automatisieren können? Und hier greift uns Amazon unter die Arme durch die Amazon API. Diese ermöglicht uns den Zugriff auf die Datenbank von Amazon um so selbstständig Artikel von Amazon auszulesen und auf der eigenen Seite darzustellen.

Beim WebhostingIndex verfolge ich die Idee, dass die Artikel von Amazon abhängig vom Inhalt der Seite dargestellt werden wie es Google Adwords vormacht. Leider werden wir nicht das gleiche Resultat wie Adwords erreichen, nämlich die komplette Unabhängigkeit, doch zumindest geht das Ergebnis in diese Richtung.

Beispielsweise werde ich im Bereich Rootserver Bücher über Linux, Bash, Windows Server etc. anzeigen lassen. Im Bereich Housing werde ich Hardwareartikel wie Prozessoren und Arbeitsspeicher anzeigen und bei Gameservern aktuelle Multiplayerspiele.

Amazon erlaubt es uns auf die Datenbank via HTTP zuzugreifen und sendet uns die Daten als XML zurück. Hier zeigt sich bereits wie das Programm arbeiten wird:
  1. Erstellen des HTTP Zugriffs
  2. Verarbeiten des XML Outputs
  3. Darstellen der Seite
1. Zugriff

Zuerst stellt sich die Frage, wie der HTTP Zugriff aussehen soll. Hier ein Beispiel:

Code:
ttp://xml-eu.amazon.com/onca/xml3?ManufacturerSearch=O%27Reilly&mode=books-de&sort=%2Bsalesrank&page=1&type=heavy&f=xml&t=webhostingtalk-21&dev-t=0KVCASXM41XKT66GEKG2&locale=de&
Wir ihr hoffentlich erkennt, wird die Ausgabe der API durch den Aufbau der URI gesteuert. So erlangen wir die Kontrolle über die API und so sieht es im einzelnen aus.

ManufacturerSearch
In diesem Beispiel werden nur Bücher von Herstellern angezeigt, in denen der String O Reilly zu finden ist.

mode
Dies erlaubt uns die Suche auf bestimmte Artikelgruppe zu reduzieren. In diesem Fall bin ich ausschließlich auf der Suche nach Büchern aus Deutschland.

sort
Dieser Wert ermöglicht uns die Reihenfolge der einzelnen Produkte zu steuern.

page
Die Ausgabe von Amazon wird auf 10 Artikel pro Seite beschränkt. Dieser Wert gibt die Seite an, welche aufgerufen wird.

type
Durch diesen Wert können wir steuern, wie viele Informationen die API an uns senden soll. Bei Heavy haben wir eine sehr ausführliche Wiedergabe, wo zum Beispiel auch die Kundenmeinungen zu finden sind.

f
Dies gibt das Ausgabeformat an.

t
Da ich Werbepartner bin, gebe hier meine Werbepartner ID an um meine paar Prozent zu erhalten.

dev-t
Dies ist der Entwicklerzugangskey, welcher es mir erlaubt die API zu nutzen. Diesen erhaltet ihr bei der Registrierung.

locale
Und weil ich für den deutschen Raum programmiere, soll es brav alles Deutsch bleiben.

Und ja, es gibt noch eine Vielzahl weiterer Möglichkeiten um die API zu kontrollieren, aber das steht auch alles im Handbuch und dieses kannst du sicherlich ohne Probleme dir dann auch selber durchlesen.

Also, wir wissen jetzt wie das mit dem Aufruf klappt. Fangen wir mit dem PHP Code an. Ich will natürlich nicht jedesmal die URL von Hand eingeben, sondern viel das automatisiert haben, so dass einfach wie GET oder via POST die entsprechenden Daten angeben muss.

PHP-Code:
<? 
 
// BasisURL
$base         'http://xml-eu.amazon.com/onca/xml3';
 
// Leerer Querystring
$query_string '';
 
// Array mit möglichen Parametern. Im Moment nur die, die ich brauche. 
$params = array

'ManufacturerSearch' => $_REQUEST['manufacturersearch'],
     
'mode' => $_REQUEST['mode'],
     
'sort' => $_REQUEST['sort'],
     
'page' => $_GET['page'],
     
'type' => $_REQUEST['type'],
     
'f'     => 'xml',
     
't'     => 'webhostingtalk-21' ,
     
'dev-t' => '0KVCASXM41XKT66GEKG2' ,
     
'locale'=> 'de',
     
'KeywordSearch' => $_REQUEST['keywordsearch'],
     
'BrowseNode' => $_REQUEST['browsenode']
);
 
// Hier erzeuge ich die Querystring für die API. Ist ein Element des Arrays nicht leer, so füge ich es zum Querystring hinzu.
foreach ($params as $key => $value) { 
     if(!empty(
$value))
     {
$query_string .= "$key=" urlencode($value) . "&";
     }
}
 
// Voilá: Die Anfrage:
$request "$base?$query_string"?>
Geben wir die Anfrage in unserer Browser ein, so erhalten wir hoffentlich als Ergebnis eine XML Datei mit dem Inhalt für unsere Anfrage. In meinem Projekt speicher ich das Ergebnis in einer MySQL Tabelle und lese bei einer erneuten Abfrage das Ergebnis aus der Tabelle aus. Grund ist, dass dieses wesentlich schneller ist als die permanten Abfragen an Amazon.

2. Verarbeiten

Nun gilt es sich dem zweiten Punkt des Programms zu lösen. Wie verarbeiten wir unsere XML Datei und dazu nutze ich die Funktion von Simple XML, welche ab PHP5 verfügbar ist. Diese Möglichkeit ist so einfach, dass vermutlich einfacher ist ein Update auf PHP5 durchzuführen als eine Alternative zu finden.

PHP-Code:
<?
$filename 
$request;
$xmlstring '';
 
// Datei in den $xmlstring einlesen
$handle fopen ($filename"r");
while (!
feof($handle)) {
    
$xmlstring .= fgets($handle4096);
}
fclose ($handle);
 
// Simple XML starten    
$xml simplexml_load_string($xmlstring);
?>
Und das war bereits der Teil 2 des Programms. Schon stehen uns alle Informationen der XML Datei als hübsches Objekt in PHP zur Verfügung und wir könne sofort mit dem Output starten. Also, auf zu Punkt Nummer 3.

3. Output

Simple XML macht es uns zum Glück extrem einfach nun die Daten auszugeben. Unser Objekt besitzt alle Elemente und diese können wir bequem mir der Funktion foreach ausgeben.

PHP-Code:
<?php 
foreach ($xml->Details AS $book)
{
// Ich wandel UTF zu ISO um.
echo utf8_decode($book->ProductName);
echo 
"<br />";
echo 
$book->Isbn
echo "<br />";
echo 
"Comments"
foreach($book->Reviews->CustomerReview AS $comment)
{
echo 
utf8_decode($comment->Summary);
echo 
"<br />";
echo 
utf8_decode($comment->Comment);
echo 
"<br />";
}
echo 
"<hr />";
 

?>
Und damit sind fertig. Es werden uns in diesem Beispielcode dann Titel, ISBN Nummer sowie Kommentare ausgeben.

Ich hoffe, dass dies eine Anregung für eure Seite ist und damit den Anfang für euren Shop gemacht worden ist.


Geändert von TRS (09.01.2005 um 10:53 Uhr).
  #7  
Alt 09.01.2005, 14:10
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.605
Ich habe das kleine Script mal etwas erweitert da es mir ein bissl zu langsam ist wenn bei jedem Aufruf erstmal Amazon bemüht wird.

Es ist teilweise schon für mich angepasst, so wird jetzt auch z.B. die Grafik für die Bewertung angezeigt etc.

PHP-Code:
<?php
 
 $base 
'http://xml-eu.amazon.com/onca/xml3'// BasisURL
 
 
define ("CACHEDIR""cache/");          // Das Verzeichnis für die Cachedatei
 
define ("CACHEMAXTIME""86400");          // Wie lange soll eine Suche im Cache bleiben (in Sekunden)
 
define ("ASSOCIATESID""pagodentreff-20");   // Die ID für DEIN Partnerprogramm
 
define ("DEVTOKEN""1A4VDPC6E61R5X3F21R2");  // Deine Entwickler-ID
 
 
 
function cachexml($URL) {
   
// Cachedatei z.B. cache/28bb8b1dc668f471620630405f58fdde.dat
   
$LocalFile CACHEDIR.md5($URL).".dat";
   
   
// Ist die Datei da? Ist die Datei jünger als die eingestellte Cachedatei?
   
if((file_exists($LocalFile)) && (($TmpTime time())-filemtime($LocalFile) < CACHEMAXTIME) && CACHEDIR)
    {
     
// Cachedatei in einen String einladen
     
$String = @file($LocalFile);
     if(
is_array($String))
      { 
$String implode("",$String); }
    }
   else
    { 
       
$handle fopen ($URL"r");
          while (!
feof($handle)) {
              
$String .= fgets($handle128);
              }
              
             
fclose ($handle);
 
     if(
$String && file_exists(CACHEDIR) && CACHEDIR)
      { 
fwrite(fopen("$LocalFile""w"), $Stringstrlen($String)); }
    }
   return 
$String;
 }
 
 
// Erstmal alles leeren was hinterher gebraucht wird
 
$query_string '';
 
$xmlstring    '';
 
 
 
// Array mit möglichen Parametern. Im Moment nur die, die ICH brauche.
 
$params = array
 (
      
'mode'         => 'books',
      
'page'         => '1',
      
'type'         => 'heavy',
      
'f'            => 'xml',
      
't'            =>  ASSOCIATESID,
      
'dev-t'        =>  DEVTOKEN,
      
'locale'       => 'de',
      
'keyword'      => 'mercedes benz',
      
'KeywordSearch'=> 'mercedes benz'
 
 
);
 
 
// Hier erzeuge ich die Querystring für die API. Ist ein Element des Arrays nicht leer, so füge ich es zum Querystring hinzu.
 
foreach ($params as $key => $value) {
      if(!empty(
$value))
      {
 
$query_string .= "$key=" urlencode($value) . "&";
      }
 }
 
 
// Voilá: Die Anfrage:
 
$request "$base?$query_string";
 
 
$filename $request;
 
 
 
$xmlstring cachexml($filename); // XML Datei einlesen, aus Cache oder vom Amazon
 
 
$xml simplexml_load_string($xmlstring); // Simple XML starten  
 
 
foreach ($xml->Details AS $book)
 {
 
// Ich wandel UTF zu ISO um.
 
echo "<h2>"utf8_decode($book->ProductName) ."</h2>";
 
 if(
$book->Authors->Author) {
 foreach(
$book->Authors->Author AS $author)
 {
 echo 
"<h3>"utf8_decode($author) ."</h3>";
 }
 }
 echo 
"<h3>"utf8_decode($book->Manufacturer) ."</h3>";
 echo 
"<img src=\"$book->ImageUrlSmall\" />";
 echo 
"<br />";
 echo 
$book->Isbn;
 
 if(
$book->Reviews->CustomerReview->Rating) {
 echo 
"<img src='http://g-images.amazon.com/images/G/01/detail/stars-".$book->Reviews->CustomerReview->Rating."-0.gif' width=64 height=12 align=absolute>";
 }
 if(
$book->Reviews->CustomerReview) {
 echo 
"<br />";
 echo 
"Comments";
 foreach(
$book->Reviews->CustomerReview AS $comment)
 {
 echo 
utf8_decode($comment->Summary);
 echo 
"<br />";
 echo 
utf8_decode($comment->Comment);
 echo 
"<br />";
 }
 }
 echo 
"<hr />";
 
 } 
 
?>

  #8  
Alt 09.01.2005, 14:15
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 989
Sieht gut - Ich speicher die Daten in einer MySQL Tabelle um noch etwas mehr Performance rauszuholen. Nachts im vier wird die Tabelle geleert und irgendwelche Suchmaschinen Bots werden dann den Cache schnell wieder aufstocken.

  #9  
Alt 09.01.2005, 14:20
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.605
Da ich höchstens 3-4 Keywords für die Suche (ohne passende bleibts bei dem einen) habe mach ich mir da keine grosse Mühe

  #10  
Alt 09.01.2005, 14:34
Benutzerbild von Jens*
:-)
 
Registriert seit: 07.2003
Ort: Ljubljana
Beiträge: 513
Ja mit Amamzon habe ich mich vor einiger Zeit auch mal intensiver beschäftigt. Irgendwie fehlte dann abr wieder die Zeit.

http://scripts.justwilliams.com/amazon/index.htm
ist auch ein ganz interessanter Shop....

  #11  
Alt 10.01.2005, 14:02
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.605
Komplette Shops habe ich mir auch schon angeschaut, werde davon allerdings Abstand nehmen da es mir nur darum geht zu bestimmten Forendiskussionen Buchtipps anzuzeigen.

Ich finde es ne gute Idee, dass Amazon so bereitwillig seine Daten zur eigenen „miss“handlung freigibt.

  #12  
Alt 29.06.2005, 11:27
neues Mitglied
 
Registriert seit: 06.2005
Beiträge: 1
Hallo,

erstmal danke für eure Beiträge, die haben mir schon etwas geholfen...(bin durch google drauf gestoßen)

Nun noch eine Frage:

Wie muss ich die PHP-Skripte abändern, damit ich auch eine kurze
Buchbeschreibung als Antwort bekomme?

In der Doku habe ich leider nix gefunden..

Grüße agooddaytofly

  #13  
Alt 30.06.2005, 17:02
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.605
Also, so weit ich mich erinnern kann gibt es eine Doku in welcher steht welche Variable was enthält.

Wenn du mal den Codeschnippsel aus Beitrag #7 (von mir) nimmst und daraus ne URL formst bekommst du ein XML-Dokument welches dir die Struktur preisgibt.

Hier mal ne Beispiel:

Code:
   <Details url="##">
      <Asin>3898803910</Asin>
      <ProductName>Oldtimer Katalog</ProductName>
      <Catalog>Book</Catalog>
      <Authors>
         <Author>Günther Zink</Author>
      </Authors>
      <ReleaseDate>April 2005</ReleaseDate>
      <Manufacturer>Heel</Manufacturer>
      <ImageUrlSmall>http://images-eu.amazon.com/images/P/3898803910.03.THUMBZZZ.jpg</ImageUrlSmall>
      <ImageUrlMedium>http://images-eu.amazon.com/images/P/3898803910.03.MZZZZZZZ.jpg</ImageUrlMedium>
      <ImageUrlLarge>http://images-eu.amazon.com/images/P/3898803910.03.LZZZZZZZ.jpg</ImageUrlLarge>
      <ListPrice>EUR 16,73</ListPrice>
      <OurPrice>EUR 17,90</OurPrice>
      <UsedPrice>EUR 14,00</UsedPrice>
      <ThirdPartyNewPrice>EUR 17,90</ThirdPartyNewPrice>
      <SalesRank>7.459</SalesRank>
      <BrowseList>
         <BrowseNode>
            <BrowseId>3829701</BrowseId>
            <BrowseName>Kategorien - Lernen &amp; Nachschlagen - Kataloge - Überblick</BrowseName>
         </BrowseNode>
         <BrowseNode>
            <BrowseId>189212</BrowseId>
            <BrowseName>Kategorien - Naturwissenschaften &amp; Technik - Ingenieurwissenschaft &amp; Technik - Kraftfahrzeugtechnik - Allgemein</BrowseName>
         </BrowseNode>
      </BrowseList>
      <Media>Broschiert</Media>
      <Isbn>3898803910</Isbn>
      <Availability>Versandfertig bei Amazon in 24 Stunden.</Availability>
      <Reviews>
         <AvgCustomerRating>4</AvgCustomerRating>
         <TotalCustomerReviews>1</TotalCustomerReviews>
         <CustomerReview>
            <Rating>4</Rating>
            <Summary>Nachschlagewerk!</Summary>
            <Comment>Europas größter Marktführer für Klassische Automobile. Das über 300 Seiten starke Nachschlagwerk ist reich illustriert und gibt Auskunft über 150 Marken sowie 1100 Modellen von Abarth bis Zündapp. Auch viele "Youngtimer" werden behandelt. Zu jedem Modell gibt es eine kurze Beschreibung, die wichtigsten Daten, Produktionszahl, Verfügbarkeit am Markt, Ersatzteilsituation und Preisempfehlungen für die Zustandskategorien 1-5.</Comment>
         </CustomerReview>
      </Reviews>
      <SimilarProducts>
         <Product>3898800490</Product>
         <Product>3831090092</Product>
         <Product>3613872617</Product>
         <Product>3898800997</Product>
         <Product>3613021099</Product>

      </SimilarProducts>
   </Details>

Wie man daran erkennen kann findet man höchsten ne Zusammenfassung welche von einem Benutzer geschrieben wird.

So wie du es dir gedacht hast geht es dann scheinbar wohl nicht

  #14  
Alt 30.06.2005, 17:27
Benutzerbild von Jens*
:-)
 
Registriert seit: 07.2003
Ort: Ljubljana
Beiträge: 513
Ganz gut find ich auch das Skript von Mr. Rat http://www.mrrat.com/aws/

Habe daraus mal das folgende gebastelt

klick


Geändert von Jens* (12.11.2005 um 11:14 Uhr).
  #15  
Alt 24.07.2005, 16:43
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.605
Anderes Problem.. Wie bekomme ich Amazon dazu nach Zeitschriften mit dem Schlüsselwort 'Oldtimer' zu suchen?

Habe nun folgendes:
PHP-Code:
// Array mit möglichen Parametern. Im Moment nur die, die ICH brauche.
$params = array
(
     
'mode'         => 'magazines',
     
'page'         => '1',
     
'type'         => 'heavy',
     
'f'            => 'xml',
     
't'            =>  ASSOCIATESID,
     
'dev-t'        =>  DEVTOKEN,
     
'locale'       => 'de',

     
'KeywordSearch'=> 'oldtimer',
     
'BrowseNode'   => '1196118'

); 
Aber es zeigt mir was vollkommen anderes als wenn ich direkt bei Amazon.de nach Oldtimerzeitschriften suche

Antwort


Stichworte
-

Themen-Optionen
Thema bewerten
Thema bewerten:

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.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
In einer Klasse auf eine andere Klasse zugreifen MrNase Programmierung und Datenbanken 4 13.10.2004 05:46






1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24