2. Juni 2015 tecker2010

Tutorial: Produkte inserieren mit der Amazon API und PHP

Amazon API mit PHPUm mit der eigenen Webseite Geld zu verdienen gibt es heutzutage verschiedene Möglichkeiten. Die am meisten genutzte ist die Einblenung von Werbeanzeigen (z.B. über Google Adsense) basierend auf einem Costs-per-Click Bezahlsystem. Aber auch Affiliate-Marketing ist weit verbreitet, bei welcher der Webseitenbetreiber von seinem Vertriebspartner Werbemittel zur Verfügung gestellt bekommt und beim Verkauf bzw. Vertrieb über dessen Webseite eine Provision (in der Regel ein paar Prozent) erhält. Sehr beliebt ist hierbei das Amazon Affiliate Programm. Auf der Webseite werden Produkte von Amazon zum Kauf angeboten, z.B. durch Amazon Widgets zum Einbetten in die Webseite oder Verlinkungen auf ein Amazon-Produkt, die mit einer Partner-ID versehen sind. Die Nutzung von Amazon Widgets ist unkompliziert und schnell eingebunden, hat jedoch den Nachteil, dass sie von Adblockern erkannt und ausgeblendet werden. Bei der Nutzung von Produktlinks fehlen dagegen die anschaulichen Mittel, wie Produktbild, Preis und Beschreibungen. Mit Hilfe der Amazon Product Advertising API können diese Informationen abgefragt und auf der Webseite genutzt werden. Im folgenden zeige ich, wie die API mit Hilfe von PHP in die eigene Webseite integriert werden kann und sich somit die Provisionserlöse deutlich steigern lassen.

1. Anmeldung bei Amazon

Um Anfragen an die Amazon API schicken zu können, müssen Sie sich bei dieser authentifizieren. Dies erfolgt mit einer Benutzerkennung, bestehend aus privaten und öffentlichen Schlüssel. Die Kennung erhält man nach erfolgreicher Registrierung beim Amazon Partnerprogramm. Neben der Authentifizierung über ein Schlüsselpaar ist auch die Verwendung eines X.509 Zertifikats möglich. Wurde ein Schlüsselpaar angelelegt, können Anfragen an die API gesendet werden.

 

2. Erstellung der PHP-Klassen

In diesem Tutorial nutzen wir PHP um die Request an die Amazon API zu senden. Hierzu erstellen wir eine PHP Klasse mit notwendigen Variablen und einer Funktion zum Senden der Anfrage. Der Associate-Tag ist ein alphanumerischer String und dient zur eindeutigen Zuordnung des Publishers. Es ist der selbe String, welcher als „&tag=“ Parameter anzuhängen ist, damit Amazon die Provision dem richtigen Konto zuordnen kann.

<?php

require_once 'aws_signed_request.php';

class AmazonProductAPI
{

    private $public_key     = "PUBLIC_KEY";
    private $private_key    = "PRIVATE_KEY";

    private $associate_tag  = "ASSOCIATE_TAG";
   
    public function queryAmazon($parameters)
    {
        return aws_signed_request("de",
            $parameters,
            $this->public_key,
            $this->private_key,
            $this->associate_tag);
    }
}

Die in Zeile 3 eingebundene Datei aws_signed_request.php beinhaltet die Funktion, welche den eigentlichen Aufruf an die API erzeugt erzeugt. Die Funktion selbst wird in der queryAmazon() Funktion aufgerufen und alle notwendigen Parameter übergeben.

<?php

function  aws_signed_request($region,
                             $params,
                             $public_key,
                             $private_key,
                             $associate_tag)
{

    $method = "GET";
    $host = "ecs.amazonaws.".$region;
    $uri = "/onca/xml";


    $params["Service"]          = "AWSECommerceService";
    $params["AWSAccessKeyId"]   = $public_key;
    $params["AssociateTag"]     = $associate_tag;

    $params["Timestamp"]        = gmdate("Y-m-d\TH:i:s\Z");
    $params["Version"]          = "2009-03-31";

    /* The params need to be sorted by the key, as Amazon does this at
      their end and then generates the hash of the same. If the params
      are not in order then the generated hash will be different from
      Amazon thus failing the authentication process.
    */
    ksort($params);

    $canonicalized_query = array();

    foreach ($params as $param=>$value)
    {
        $param = str_replace("%7E", "~", rawurlencode($param));
        $value = str_replace("%7E", "~", rawurlencode($value));
        $canonicalized_query[] = $param."=".$value;
    }

    $canonicalized_query = implode("&", $canonicalized_query);

    $string_to_sign = $method."\n".$host."\n".$uri."\n".
    $canonicalized_query;

    /* calculate the signature using HMAC, SHA256 and base64-encoding */
    $signature = base64_encode(hash_hmac("sha256",
    $string_to_sign, $private_key, True));

    $signature = str_replace("%7E", "~", rawurlencode($signature));

    $request = "http://".$host.$uri."?".$canonicalized_query."&Signature=".$signature;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$request);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

    $xml_response = curl_exec($ch);

    if ($xml_response === False)
    {
        return False;
    }
    else
    {
        $parsed_xml = @simplexml_load_string($xml_response);
        return ($parsed_xml === False) ? False : $parsed_xml;
    }
}

 

3. Einbindung in die Webseite

Die PHP Klasse AmazonProductAPI können wir nun in unserer Webseite nutzen und eine erste Anfrage an die API senden. Wir erstellen eine index.php Datei, binden dort die PHP Klasse ein und fragen die Produktdaten des PHP Kochbuchs mit ASIN B00BLS51CC ab. Die ASIN ist die Amazon Standard Identification Number und wird u.a. auf jeder Amazon Produktseite angezeigt. Zur Abfrage der Produktdaten nutzen wir die ItemLookup Operation. Die ResponseGroup ist optional und dient zur Filterung der Rückgabedaten.

<?php

include("amazon_api_class.php");

$amazon = new AmazonProductAPI();
$single = array(
    'Operation' => 'ItemLookup',
    'ItemId' => 'B00BLS51CC',
    'ResponseGroup' => 'Medium'
);

try
{
    $result = $amazon->queryAmazon($single);
}
catch(Exception $e) {
    echo $e->getMessage();
}

// Ausgabe
print "<pre>";
print_r($result->Items);
print "</pre>";

Wird die index.php aufgerufen, erhält man im Browser die Ausgabe der Produktdaten als XML Objekt. Diese Daten können nun genutzt und anschauliches auf der Webseite dargestellt werden.

Tagged: , ,

Kontakt & Angebot

Webdesign, Webanwendungen oder IT-Beratung - ich helfe Ihnen gern weiter! Nutzen Sie das Kontaktformular für Fragen oder ein kostenloses Angebot.