Freitag, 12 Dezember 2025

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>
Vorheriges Tutorial
Nächstes Tutorial
Dreamcodes Redaktion
Dreamcodes Redaktion
Seit 1999 bewegt sich Dreamcodes in der Welt der digitalen Entwicklung, zwischen Codezeilen, Designentscheidungen und technischen Herausforderungen, die manchmal kleiner aussehen, als sie wirklich sind. Die Herausforderung besteht darin, komplexe Themen wie Webentwicklung, SEO, SEA, GEO, IT-Strukturen, Softwareentwicklung und moderne Technologien so aufzubereiten, dass sie verständlich, nachvollziehbar und vor allem praktisch nutzbar werden. Der Fokus liegt dabei darauf, Wissen nicht nur zu erklären, sondern es für reale Projekte anwendbar zu machen. Egal ob ein einfaches Script, ein umfangreicher Leitfaden oder ein tiefes technisches Tutorial: Das oberste Ziel dabei ist, dass Leser am Ende wirklich weiterkommen und ein Thema greifbarer wird als vorher. Über die Jahre gab es viele verschiedene Ansätze, Tools und Trends die kammen und auch wieder gingen. Genau das hilft neben Jahrelanger IT Erfahrung und mehrjähriger Tätigkeit im IT Bereich heute dabei, Inhalte mit Tiefe zu schreiben, die nicht nur Grundlagen vermitteln, sondern auch Hintergründe, Zusammenhänge und Best Practices erklären. Dreamcodes teilt diese Erfahrungen, mit dem Ziel, digitale Bildung für alle zugänglich zu machen, die neugierig sind, nach Lösungen suchen oder eigene digitale Projekte erfolgreich voranbringen möchten. Wenn dieses Wissen jemandem Zeit spart, ein Problem löst oder eine neue Idee auslöst, hat sich der Aufwand dahinter gelohnt. ;)

Vielleicht einen Blick wert