Diese Woche am beliebtesten

Vertiefendes Material

Amazon Produktsuche

Mit diesem Amazon-Suchformular können Besucher gezielt nach Produkten suchen und erhalten sofort passende Ergebnisse. Alle angezeigten Links sind mit einem individuellen Amazon-Partnerlink versehen. Dadurch wird der Nutzer direkt zu Amazon weitergeleitet, wo er detaillierte Produktinformationen, Bilder und Preise einsehen kann.
Für jede qualifizierte Bestellung, die über diese Links zustande kommt, erhält der Betreiber eine Affiliate-Provision.

Das System eignet sich besonders für:

  • Webseiten, Blogs oder Portale mit Produktempfehlungen
  • Nischenseiten, die sich auf bestimmte Themenbereiche konzentrieren
  • Projekte, die Besucher einfach und schnell zu Amazon-Produkten weiterleiten möchten

Technische Merkmale:

  • Einfache Suchfunktion über ein Formular
  • Automatische Generierung von Affiliate-Links mit Partner-ID
  • Ausgabe von Produktvorschlägen oder direkten Suchergebnissen
  • Anpassbar an verschiedene Layouts und Designs
<?php

// Zugangsdaten (UNBEDINGT austauschen!)
$accessKey = "DEIN_ACCESS_KEY";
$secretKey = "DEIN_SECRET_KEY";
$partnerTag = "deinpartner-21"; // Partner-ID
$region = "de"; // "de", "com", "co.uk" etc.
$host = "webservices.amazon." . $region;
$endpoint = "https://$host/paapi5/searchitems";

// Eingabe aus Formular
$query = isset($_GET['q']) ? trim($_GET['q']) : "";
$results = [];

// Wenn gesucht wurde:
if ($query !== "") {
    $payload = json_encode([
        "Keywords"   => $query,
        "PartnerTag" => $partnerTag,
        "PartnerType"=> "Associates",
        "Marketplace"=> "www.amazon." . $region,
        "Resources"  => [
            "Images.Primary.Medium",
            "ItemInfo.Title",
            "Offers.Listings.Price"
        ]
    ]);

    // Header vorbereiten
    $hostHeader = "host:" . $host;
    $contentHeader = "content-type:application/json; charset=UTF-8";
    $amzDate = gmdate("Ymd\THis\Z");
    $dateStamp = gmdate("Ymd");

    $canonicalURI = "/paapi5/searchitems";
    $canonicalQueryString = "";
    $canonicalHeaders = $contentHeader . "\n" . $hostHeader . "\n" . "x-amz-date:" . $amzDate . "\n";
    $signedHeaders = "content-type;host;x-amz-date";
    $payloadHash = hash("sha256", $payload);
    $canonicalRequest = "POST\n" . $canonicalURI . "\n" . $canonicalQueryString . "\n" . $canonicalHeaders . "\n" . $signedHeaders . "\n" . $payloadHash;

    // Signatur vorbereiten
    $algorithm = "AWS4-HMAC-SHA256";
    $credentialScope = $dateStamp . "/" . $region . "/ProductAdvertisingAPI/aws4_request";
    $stringToSign = $algorithm . "\n" . $amzDate . "\n" . $credentialScope . "\n" . hash("sha256", $canonicalRequest);

    function sign($key, $msg) {
        return hash_hmac("sha256", $msg, $key, true);
    }

    $kDate = sign("AWS4" . $secretKey, $dateStamp);
    $kRegion = sign($kDate, $region);
    $kService = sign($kRegion, "ProductAdvertisingAPI");
    $kSigning = sign($kService, "aws4_request");
    $signature = hash_hmac("sha256", $stringToSign, $kSigning);

    $authorizationHeader = $algorithm . " Credential=" . $accessKey . "/" . $credentialScope . ", SignedHeaders=" . $signedHeaders . ", Signature=" . $signature;

    $headers = [
        $contentHeader,
        $hostHeader,
        "x-amz-date:" . $amzDate,
        "Authorization:" . $authorizationHeader
    ];

    // Anfrage ausführen
    $ch = curl_init($endpoint);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);
    curl_close($ch);

    if ($response) {
        $data = json_decode($response, true);
        if (isset($data["SearchResult"]["Items"])) {
            foreach ($data["SearchResult"]["Items"] as $item) {
                $title = $item["ItemInfo"]["Title"]["DisplayValue"] ?? "Ohne Titel";
                $image = $item["Images"]["Primary"]["Medium"]["URL"] ?? "";
                $url   = $item["DetailPageURL"] ?? "#";
                $price = $item["Offers"]["Listings"][0]["Price"]["DisplayAmount"] ?? "Preis nicht verfügbar";

                $results[] = [
                    "title" => $title,
                    "image" => $image,
                    "url"   => $url,
                    "price" => $price
                ];
            }
        }
    }
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <title>Dreamcodes - Amazon Produktsuche</title>
  <style>
    body { font-family: Arial, sans-serif; margin: 40px; }
    form { margin-bottom: 20px; }
    input[type=text] { padding: 8px; width: 250px; }
    button { padding: 8px 12px; cursor: pointer; }
    .product { border: 1px solid #ddd; padding: 10px; margin-bottom: 15px; display: flex; align-items: center; }
    .product img { margin-right: 15px; max-width: 100px; }
    .product a { color: #0073bb; text-decoration: none; font-weight: bold; }
    .product a:hover { text-decoration: underline; }
  </style>
</head>
<body>
  <h1>Amazon Produktsuche</h1>
  <form method="get" action="">
    <input type="text" name="q" placeholder="Produkt suchen..." value="<?= htmlspecialchars($query) ?>">
    <button type="submit">Suchen</button>
  </form>

  <?php if ($query && $results): ?>
    <h2>Suchergebnisse für „<?= htmlspecialchars($query) ?>“</h2>
    <?php foreach ($results as $item): ?>
      <div class="product">
        <?php if ($item["image"]): ?>
          <img src="<?= htmlspecialchars($item["image"]) ?>" alt="">
        <?php endif; ?>
        <div>
          <a href="<?= htmlspecialchars($item["url"]) ?>" target="_blank"><?= htmlspecialchars($item["title"]) ?></a><br>
          <span><?= htmlspecialchars($item["price"]) ?></span>
        </div>
      </div>
    <?php endforeach; ?>
  <?php elseif ($query): ?>
    <p>Keine Ergebnisse gefunden.</p>
  <?php endif; ?>
</body>
</html>
Dreamcodes Redaktion
Dreamcodes Redaktion
Jeder Inhalt auf Dreamcodes entsteht mit einem klaren Anspruch: geprüfte Praxis statt schneller Theorie. Was hier veröffentlicht wird, basiert auf Best Practices, echten Projekterfahrungen und technischem Verständnis, das über das Offensichtliche hinausgeht. Unser Ziel ist ein Fundament, auf dem du aufbauen kannst, nicht eines, das beim ersten produktiven Einsatz bricht. Wie du die Inhalte integrierst, absicherst und in deinen Kontext überträgst, liegt bei dir. Die fachliche Grundlage liefern wir, die Verantwortung für den Einsatz bleibt deine.
Vorheriges Tutorial
Nächstes Tutorial

Vielleicht einen Blick WERT?