Home
Navigation
Impressum
SEO Welten - Webcoding, Editoren, Scripte und Anwendungen

Aktualisiertes Script zur Nutzung des Amazon Web Services mit SimpleXML und PHP 5.6

Webcoding - 2015

Auf dieser Seite möchten wir ein Script vorstellen, welches in die Jahre gekommen zu Fehlern neigte und aus diesem Grund 2015 aktualisiert wurde. Ausgangspunkt war das Script von dieser Seite aus dem Jahre 2009: langiso.htm

Die durchgeführten Aktualisierungen waren beinahe mit einer kleinen Generalüberholung vergleichbar, da mehr als nur einige Kleinigkeiten angepasst wurden. Unter anderem wurde das HTML-Makeup bei der Aktualisierung angepasst und gleich in Richtung HTML5 validiert.
Da bei HTML5 statt dem Zeichensatz ISO-8859-1 die Verwendung des Zeichensatzes Windows-1252 vom Validator gefordert wird, insofern nicht UTF-8 zur Anwendung kommt, wurde HTML und Script für diesen Charset angepasst. Doch ISO-8859-1 und Windows-1252 unterscheiden sich ohnehin nur geringfügig und nicht bei relevanten Zeichen, wie den deutschen Umlauten.

Wesentlicheren Änderungen:

Zu den wesentlicheren Änderungen gehört hingegen das Setzen eines Headers mit Windows-1252 in der ersten Zeile. Dabei ist unbedingt zu beachten, dass vor dem ersten öffnenden PHP-Tag keine Ausgabe erfolgt, auch kein Leerzeichen oder dergleichen vor diesen Tag vorhanden sein darf.

<?php header("Content-Type: text/html; charset=windows-1252"); ?>

Weitere Änderungen betrafen veränderte PHP Funktion. So wird bei der Funktion htmlspecialchars von PHP ab der Version 5.4 und höher UTF-8 als Standardwert verwendet. Davon abweichende Zeichensätze können benutzt werden, müssen jedoch als Parameter wie im Beispiel notiert werden:

htmlspecialchars(utf8_decode($movie->ItemAttributes->Binding), ENT_QUOTES, "Windows-1252")

Weiterhin hat sich die Prüfung von Objekten[0] auf true und false verändert:

  if ($movie->ItemAttributes->Author[0]) { ... }         // Bis PHP 5.3 noch möglich
  if (isset($movie->ItemAttributes->Author[0])) { ... }  // Ab PHP 5.4 oder höher nur noch mit der Verwendung von isset möglich

Im Donloadverzeichnis (Zip-Archiv) befinden sich die alte Version simpleiso.php von 2009 und die aktualisierte Version longiso.php von 2015.

Download: » Aktualisierte Version «

Das überarbeitete Script:

<?php header("Content-Type: text/html; charset=windows-1252"); ?>
<!DOCTYPE html>
<html>

<head>
<title>Literatur / B&uuml;cher zum Thema: Computer</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<link rel="stylesheet" type="text/css" href="demos.css">
</head>

<body style="background-color:#f1edda">
<h1 style="text-align:center">Ein Demo mit SimpleXML und ISO</h1>
<div style="text-align:center; margin:auto">

<?php
//------ Hier bitte Ihre persoenlichen Zugangsschluessel eintragen --------

$secret_access_key = "00..........";   //-- Hier bitte Ihren geheimen Zugangs-Schlüssel eintragen
$access_key_id     = "00.........";    //-- Hier bitte Ihre AWSAccessKeyId eintragen
$associate_id      = ".....-21";       //-- Hier bitte Ihre Partner-Id eintragen

//------ Rubrik und Thema vorwaehlen, damit Seite nicht leer ladet --------

$dierubrik = "Books";     //-- Eine Rubrik eintragen, z.B. Books oder Tools
$meinthema = "Computer";  //-- Ein Suchwort, Thema, Titel oder Autor eintragen

//------ Ab hier bitte nur bei Bedarf die Zahlenwerte abaendern! ----------

$tableweite = "width:100%";  //-- Tabellenweite anpassen -----------------
$cellspacg  = "border-collapse:separate; border-spacing:0px;";
$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;";

//------ Ab hier bitte keine Veraenderungen mehr vornehmen! ------------------
//------ Auslagerung dient nur zur Verkuerzung der Zeilen --------------------

$tabla  = "target=\"_blank\"";
$goldbr = "<span class=\"goldbraun\">";


//------ Der Briefkasten vom Formular mit Umwandlung der Umlaute -------------

if (isset($_GET['SearchIndex']) and isset($_GET['Keywords']) and isset($_GET['ItemPage'])) {

    $SearchIndex = $_GET['SearchIndex'];
    $Keywords    = $_GET['Keywords'];
    $ItemPage    = $_GET['ItemPage'];

    $eingang = array( 'Ä','ä','Ö','ö','Ü','ü','ß',
                      '%C3%84','%C3%A4','%C3%96','%C3%B6','%C3%9C','%C3%BC','%C3%9F',
                      '%c3%84','%c3%a4','%c3%96','%c3%b6','%c3%9c','%c3%bc','%c3%9f',
                    );
    $ausgang = array( 'Ae','ae','Oe','oe','Ue','ue','ss',
                      'Ae','ae','Oe','oe','Ue','ue','ss',
                      'Ae','ae','Oe','oe','Ue','ue','ss',
                    );

    $umlautade = str_replace($eingang,$ausgang,$Keywords);

    $umlautade = preg_replace("/[^a-zA-Z0-9-]/", " ", $umlautade);
    $umlautade = trim($umlautade);
    $fuerform  = $umlautade;
    $umlautade = preg_replace("/[ ]/", "+", $umlautade);

    $SearchIndex = preg_replace("/[^a-zA-Z]/", "no", $SearchIndex);
    $ItemPage    = preg_replace("/[^0-9]/", "1", $ItemPage);
}
else {
    $SearchIndex = $dierubrik;
    $umlautade   = $meinthema;
    $fuerform    = "";
    $ItemPage    = 1;
}

//------ Die Titelzeile und das obere Suchformular ------------------------

echo "\t<table style=\"border:0px; ".$tableweite."; ".$cellspacg."\">\n".
     "\t<tr><td style=\"width:100%; padding-top:1px; padding-bottom:2px\">\n".
     "\t<p style=\"text-align:center\">".$goldbr."Literatur / B&uuml;cher zum Thema: " .$fuerform. " bei Amazon</span></td></tr>\n".
     "\t</table>\n";
?>
<form name="Suchoptionen" action="<?php echo basename($_SERVER["PHP_SELF"]);?>" method="get" accept-charset="windows-1252">
<select name="SearchIndex">
    <option value="Books">B&uuml;cher</option>
    <option value="DVD">DVD</option>
    <option value="Music">Musik</option>
    <option value="Toys">Spielwaren</option>
    <option value="OutdoorLiving">Hobby &amp; Freizeit</option>
    <option value="Software">Software</option>
    <option value="Tools">Werkzeug</option>
    <option value="SoftwareVideoGames">Video &amp; PC Spiele</option>
    <option value="HomeGarden">Haus &amp; Garten</option>
    <option value="Kitchen">Haushalt</option>
    <option value="Photo">Fotografie</option>
    <option value="Electronics">Elektronik</option>
</select>
&nbsp; Eingabe
<input type="text" name="Keywords" value="" size="30">
<input type="hidden" name="ItemPage" value="1">
<input type="submit" value="Suchen">
</form>

<?php

echo "\t<hr style=\"color:#fdfcfb; background-color:#fdfcfb\">\n";

/* Das eigentliche Sende- und Empfangsteil. Ein Teil der restlichen Parameter wird gebildet und wo es sein muss für den
   Versand kodiert. Die Parameter werden dann entsprechend des Byte-Wertes ihrer Schlüssel geordnet. Auch wenn es auf dem
   ersten Blick so erscheint, so entspricht diese Anordnung nicht ganz dem Alphabet, da in der Reihenfolge das kleine a
   erst hinter dem großen Z kommt. So sind die Anfangsbuchstaben AW höher als die Anfangsbuchstaben As einzuordnen.

   Im Anschluss wird die Signatur gebildet und der komplette String zusammen gesetzt.
*/

$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 style=\"".$tableweite." ".$cellspacg." border:none; margin:auto\">\n";


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

    echo "\t<tr><td style=\"text-align:center; ".$zelleprig." border-bottom:1px solid #fff\">\n";

//------ Bilder mit Link zur Detailseite --------------------------------------

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

   echo "\t<td style=\"text-align:center; ".$zelleleft." border-bottom:1px solid #fff\">\n";

//------ Die Titel von den Produkten mit Link zur Detailseite ------------

   echo "\t<a href=\"".$movie->DetailPageURL."\" ".$tabla." class=\"braungold\">".
        htmlspecialchars(utf8_decode($movie->ItemAttributes->Title), ENT_QUOTES, "Windows-1252")."</a><br>";

//------ Autoren, Mitautoren und Übersetzer ------------------------------

   if (isset($movie->ItemAttributes->Author[0]) and !empty($movie->ItemAttributes->Author[0])) {
      echo "Autor: ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Author[0]), ENT_QUOTES, "Windows-1252");
   }  else {}
   if (isset($movie->ItemAttributes->Author[1]) and !empty($movie->ItemAttributes->Author[1])) {
      echo " - ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Author[1]), ENT_QUOTES, "Windows-1252");
   }  else {}
   if (isset($movie->ItemAttributes->Author[2]) and !empty($movie->ItemAttributes->Author[2])) {
      echo " - ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Author[2]), ENT_QUOTES, "Windows-1252");
   }  else {}

//------ Verlag, Produzent, Art der Bindung, Datum -------------------------

   if ($movie->ItemAttributes->Publisher) {
       echo "<br>Verlag/Produzent: ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Publisher), ENT_QUOTES, "Windows-1252");
   }   else {}
   if ($movie->ItemAttributes->Binding) {
       echo " - ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Binding), ENT_QUOTES, "Windows-1252");
   }   else {}
   if ($movie->ItemAttributes->PublicationDate) {
       echo "<br>erschienen: ".htmlspecialchars(utf8_decode($movie->ItemAttributes->PublicationDate), ENT_QUOTES, "Windows-1252");
   }   else {}

//------ Bemerkungen zur Beschaffenheit - falls vorhanden ------------------

   if (isset($movie->ItemAttributes->Feature[0])) {
       echo "<br>Beschaffenheit: ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Feature[0]), ENT_QUOTES, "Windows-1252");
   }   else {}
   if (isset($movie->ItemAttributes->Feature[1])) {
       echo ", ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Feature[1]), ENT_QUOTES, "Windows-1252");
   }   else {}
   if (isset($movie->ItemAttributes->Feature[2])) {
       echo ", ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Feature[2]), ENT_QUOTES, "Windows-1252");
   }   else {}

//------ Neupreis und Angebotspreise ---------------------------------------

   if ($movie->OfferSummary->LowestNewPrice->FormattedPrice) {
       echo "<br>Preis: ".htmlspecialchars($movie->OfferSummary->LowestNewPrice->FormattedPrice, ENT_QUOTES, "Windows-1252");
   }   else { echo '<br>Preis: keine Angaben';
   }
   if ($movie->OfferSummary->LowestUsedPrice->FormattedPrice) {
       echo " / erhältlich ab: ".htmlspecialchars($movie->OfferSummary->LowestUsedPrice->FormattedPrice, ENT_QUOTES, "Windows-1252");
   }   else { echo ' / erhältlich ab: keine Angebote';
   }

//------ Link zur Detailseite und Zellenende -------------------------------

    echo "<br><br>\n\t<a href=\"".$movie->DetailPageURL."\" ".$tabla." class=\"braungold\">weitere Details</a><br>";
    echo "\n\t</td></tr>\n\n";
}

    echo "\t<tr><td style=\"text-align:center; ".$zellunten."\" colspan=\"2\">\n\n";

//------- Die Auswertung vom Response und Umwandlung der Rubriknamen ------

foreach ($response->Items->Request as $gefunden) {

    echo "Seite ".$gefunden->ItemSearchRequest->ItemPage;
    $SearchIndex = $gefunden->ItemSearchRequest->SearchIndex;

    //------ Hier erhalten die Kategorien ihren deutschen Namen ---------------

    $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");

    echo " - Rubrik ".$Deutsch[(string)$SearchIndex]." - Thema: ".$fuerform;
}

foreach ($response->Items as $Ergebnisse) {

    echo "<br> Treffer insgesamt: ".$Ergebnisse->TotalResults;
    echo " auf ".$Ergebnisse->TotalPages. " Seiten";

}

//------- Hier beginnt das untere Formular ---------------------------------------
?>
<br><br>
<form name="Searchoptionen" action="<?php echo basename($_SERVER["PHP_SELF"]);?>" method="get" accept-charset="windows-1252">
<select name="SearchIndex">
    <option value="Books">B&uuml;cher</option>
    <option value="DVD">DVD</option>
    <option value="Music">Musik</option>
    <option value="Toys">Spielwaren</option>
    <option value="OutdoorLiving">Hobby &amp; Freizeit</option>
    <option value="Software">Software</option>
    <option value="Tools">Werkzeug</option>
    <option value="SoftwareVideoGames">Video &amp; PC Spiele</option>
    <option value="HomeGarden">Haus &amp; Garten</option>
    <option value="Kitchen">Haushalt</option>
    <option value="Photo">Fotografie</option>
    <option value="Electronics">Elektronik</option>
</select>
&nbsp; Eingabe
<input type="text" name="Keywords" value="" size="30">
<input type="hidden" name="ItemPage" value="1">
<input type="submit" value="Suchen">
</form>

<?php
    echo "\t</td></tr>\n\t<tr><td style=\"padding-top:10px; padding-bottom:10px\" colspan=\"2\">\n";
    echo "\t<table style=\"width:100%; border:none\"><tr><td  style=\"width:33%; text-align:left; padding-left:20px\">\n";

/* Die Links zur naechsten Seite und zurueck werden gebildet, wobei die Anwendung von htmlspecialchars
   in diesem Fall auch der Validierung des Dokuments dient, um bei der Ausgabe das & in ein &amp; zu ver-
   wandeln.
*/

$TotalPages  =  $Ergebnisse->TotalPages;
$SearchIndex =  $gefunden->ItemSearchRequest->SearchIndex;
$Keywords    =  $gefunden->ItemSearchRequest->Keywords;
$ItemPage    =  $gefunden->ItemSearchRequest->ItemPage;
$Keywords    =  preg_replace("/[ ]/", "+", $Keywords);

if ($TotalPages > 1) {
    if ($ItemPage > 1) {

        echo "\t<a class=\"braungold\" href=\"".htmlspecialchars("?".
             "SearchIndex"."=". $SearchIndex  ."&".
             "Keywords"   ."=". $Keywords     ."&".
             "ItemPage"   ."=".($ItemPage -1)).
             "\">« zur&uuml;ck </a>\n";

    }  else {echo "\t<span class=\"zueinsam\">« zur&uuml;ck</span></td>\n";}
}

$scautor  = "Script von www.seo-welten.de";
$lscautor = "href=\"http://www.seo-welten.de\"";

echo "\t<td style=\"width:33%; text-align:center\"><a class=\"braunklein\" ".$lscautor." ".$tabla.">".$scautor."</a></td>\n";
echo "\t<td style=\"width:34%; text-align:right; padding-right:20px\">\n";

 if ($TotalPages > 1) {
    if ($ItemPage*1 <= $TotalPages) {

        echo "\t<a class=\"braungold\" href=\"".htmlspecialchars("?".
              "SearchIndex"."=". $SearchIndex  ."&".
              "Keywords"   ."=". $Keywords     ."&".
              "ItemPage"   ."=".($ItemPage +1)).
              "\">n&auml;chste Seite »</a>\n";

    }  else {echo "*\n";}
}
echo "\t</td></tr></table>\n\n</td></tr></table>\n";
?>

</div>
</body>
</html>

Copyright © 2006 - Verlag Horst Müller - Stendal | Datenschutz | Nutzungsbedingungen