Comment afficher les meilleures ventes Amazon sur son blog ?


Voici un tutoriel plus technique que d’habitude, destiné à tous ceux qui sont inscrits au programme Partenaires d’Amazon. Ce programme d’affiliation permet aux abonnés de toucher une petite commission sur toutes les ventes réalisées via leur site. J’ai longtemps cherché comment afficher sur le blog les meilleures ventes Amazon du moment dans une catégorie précise (les livres, films, etc).

A quoi ça sert ? Ça peut donner au lecteur des envies d’achat (et donc être pour vous un moyen de monétiser son blog), ça peut également vous permettre de suivre les tendances du moment, ce qui marche, les grandes nouveautés littéraires ou high-tech par exemple.

J’ai fini par régler le problème grâce à l’aide précieuse du développeur et photographe Stephen Tierney. Il a gentiment accepté que je partage avec vous son code, que j’ai personnalisé pour l’adapter à Amazon France. Comme je n’ai rien trouvé sur le sujet en français, je me dis que ça aidera peut-être certains lecteurs ou visiteurs qui utilisent ce programme d’affiliation !

S’inscrire à la Product Advertising API Amazon

Bon, je reprécise d’abord à toutes fins utiles que vous devez être inscrit au programme d’affiliation Amazon avant de commencer. Vous devez ensuite vous inscrire à la Product Advertising API Amazon. Ce service vous permet, derrière son nom compliqué, de trouver plein de ressources pour faire la promotion des produits Amazon sur votre site.

Pour simplifier, le programme Partenaires d’Amazon prévoit des outils « prêts à l’emploi » qui répondent à la majorité des besoins de l’utilisateur moyen (créer des widgets, des liens vers les produits, etc). La Product Advertising API permet d’aller plus loin et d’intégrer ses liens d’affiliation d’une manière vraiment personnalisée.

Une fois votre compte créé, allez dans la rubrique « Gérez votre compte » et cliquez sur la partie « Identifiants de connexion ». Vous allez à nouveau devoir vous authentifier puis vous accédez à une page qui ressemble à ça :

Amazon API - Sécurité
Amazon API – Sécurité

Dans la partie « Clés d’accès », vous allez pouvoir créer une nouvelle clé d’accès. Une clé d’accès, c’est une succession de lettres et chiffres qui n’a aucun sens. A cette étape, Amazon va vous créer deux clés :

  • Une clé privée (la « Secret Access Key »). Il faut toujours la garder complètement secrète, elle permet de sécuriser le dispositif. Elle est très longue (autour de 40 caractères) et mélange majuscules, minuscules et chiffres.
  • Une clé publique (la « Access Key ID »). Elle est plus courte et ressemble à ça : AZ70453583XVDV2VO3FJ.

Notez bien vos clés (ou téléchargez le fichier au moment de leur création), nous allons en avoir besoin par la suite. Notez qu’une fois le jeu de clés créé, vous ne pourrez plus récupérer la clé privée si vous ne l’avez pas notée. Une fois que vous avez effectué cette étape, nous allons nous intéresser au choix d’une catégorie de produits sur Amazon.

Trouver la bonne catégorie de produits

Comme tous les sites Internet, le site web d’Amazon a une logique très hiérarchique : on trouve de grandes catégories de produits (DVD & Blu-Ray, Bagages, Jeux et Jouets, High-Tech) et, à l’intérieur, des catégories de plus en plus ciblées. Par exemple, au sein des DVD & Blu-Ray, on trouve des classements par genre.

Chacun de ces niveaux hiérarchiques correspond à un chiffre, on appelle ça un « node ». Vous devez donc dans un premier temps cibler le « node » qui vous intéresse… et pour ça, il y a un site web très pratique, Find Browse Nodes. Si vous ne trouvez pas votre bonheur, vous pouvez également aller sur la page Parcourir les rubriques Amazon. En passant la souris sur chaque lien, vous verrez que chaque URL de rubrique se termine par « &node= » avec un chiffre.

Amazon - Parcourir les rubriques
Amazon – Parcourir les rubriques

Prenons par exemple le node « 578608 ». Il correspond aux promos DVD & Blu-Ray du moment.

Préparer son code

Vous allez préparer une jolie adresse web. Rien de très compliqué… mais il faut mettre un peu les mains dans le cambouis !

https://webservices.amazon.fr/onca/xml?AWSAccessKeyId=[CLE D'ACCES PUBLIQUE]&AssociateTag=[CODE AFFILIE]&BrowseNode=[LE NUMERO DU NODE]&Operation=ItemSearch&ResponseGroup=Medium&SearchIndex=[REQUETE DE RECHERCHE]&Service=AWSECommerceService&Sort=salesrank

[CLE D’ACCES PUBLIQUE] : vous l’avez obtenue lors de la création des clés d’accès dans la Product Advertising API.
[CODE AFFILIE] : il figure dans tous vos liens d’affiliation, vous pouvez aussi le retrouver dans la rubrique Gérez vos ID de suivi de votre compte Partenaire.
[LE NUMERO DU NODE] : vous l’avez identifié à la deuxième étape de ce tutoriel.
[REQUETE DE RECHERCHE] : vous ne l’avez pas encore.

Notez que la première partie du code correspond ici à Amazon France, vous pouvez tout à fait l’adapter à votre pays en remplaçant l’URL française par celle de votre boutique Amazon locale (ces adresses, appelées « Endpoints », sont disponibles sur le site d’Amazon).

Trouver la bonne requête de recherche

La requête de recherche, c’est le nom de la grande catégorie à laquelle se rattache votre « node ». Par exemple, je vous ai parlé du node des DVD & Blu-Ray, le node 578608. Il faut aller sur la page de documentation Amazon et regarder à quoi correspond ce node dans la deuxième colonne du tableau, celle qui s’appelle « Search Index ».

Là, le node 578608 correspond au Search Index « DVD ». Tous ces index sont en anglais et vous devrez les laisser en anglais. Ce tableau est intéressant car il vous indique aussi quel genre d’informations vous pouvez récupérer sur les produits (dans la colonne de droite). Par exemple, dans la rubrique DVD, vous pouvez récupérer entre autres le nom des acteurs, du réalisateur, le titre, etc.

Dans mon exemple, l’adresse ressemblera donc à ça :

https://webservices.amazon.fr/onca/xml?AWSAccessKeyId=AZ70453583XVDV2VO3FJ&AssociateTag=moncode-01&BrowseNode=578608&Operation=ItemSearch&ResponseGroup=Medium&SearchIndex=DVD&Service=AWSECommerceService&Sort=salesrank

Grâce à cette adresse, on indique à Amazon qui on est (via la clé d’accès et le code affilié), où l’on veut récupérer des informations (dans la catégorie DVD & Blu-Ray, rattachée à la grande rubrique « DVD »), quel genre d’information on veut (des noms de produits : « ItemSearch »), combien on en veut (un nombre de résultats « medium ») et comment il faut les classer (en fonction du nombre de ventes = « salesrank »).

Créer la liste des meilleures ventes Amazon

Vous allez créer un nouveau fichier avec l’extension php, par exemple « bestsellers.php ». Dedans, vous allez copier tout le code ci-dessous, en n’oubliant pas de personnaliser les éléments en couleur.

<?php
$serviceURL2 = 'https://webservices.amazon.fr/onca/xml?AWSAccessKeyId=AZ70453583XVDV2VO3FJ&AssociateTag=moncode-01&BrowseNode=578608&Operation=ItemSearch&ResponseGroup=Medium&SearchIndex=DVD&Service=AWSECommerceService&Sort=salesrank'; 
$serviceURL2 = amazonSign($serviceURL2,"VOTRE SECRET ACCESS KEY");
$resp = simplexml_load_file($serviceURL2);
echo "<ul class=\"topsellers\">";
foreach ($resp->Items->Item as $item) {
$url     = $item->DetailPageURL;
$title   = $item->ItemAttributes->Title;     	
$titre   = htmlentities($title, ENT_NOQUOTES, 'UTF-8');
$getlength = strlen($titre);$thelength = 38;echo "<li class=\"topsellers\"><a href=\"$url\" rel=\"nofollow\" target=\"_blank\" title=\"$titre\">";echo substr($titre, 0, $thelength);if ($getlength > $thelength) echo "..."; echo "</a></li>"; 
}
echo "</ul>";
function amazonEncode($text)
{
$encodedText = "";
$j = strlen($text);
for($i=0;$i<$j;$i++)
{
$c = substr($text,$i,1);
if (!preg_match("/[A-Za-z0-9\-_.~]/",$c))
{
$encodedText .= sprintf("%%%02X",ord($c));
}
else
{
$encodedText .= $c;
}
}
return $encodedText;
}
function amazonSign($url,$secretAccessKey)
{
$url .= "&Timestamp=".gmdate("Y-m-d\TH:i:s\Z");
$urlParts = parse_url($url);
parse_str($urlParts["query"],$queryVars);
ksort($queryVars);
$encodedVars = array();
foreach($queryVars as $key => $value)
{
$encodedVars[amazonEncode($key)] = amazonEncode($value);
}
$encodedQueryVars = array();
foreach($encodedVars as $key => $value)
{
$encodedQueryVars[] = $key."=".$value;
}
$encodedQuery = implode("&",$encodedQueryVars);
$stringToSign  = "GET";
$stringToSign .= "\n".strtolower($urlParts["host"]);
$stringToSign .= "\n".$urlParts["path"];
$stringToSign .= "\n".$encodedQuery;
if (function_exists("hash_hmac"))
{
$hmac = hash_hmac("sha256",$stringToSign,$secretAccessKey,TRUE);
}
elseif(function_exists("mhash"))
{
$hmac = mhash(MHASH_SHA256,$stringToSign,$secretAccessKey);
}
else
{
die("No hash function available!");
}
$hmacBase64 = base64_encode($hmac);
$url .= "&Signature=".amazonEncode($hmacBase64);
return $url;
}
?>

En rouge, vous retrouvez l’adresse créée à l’étape précédente. En vert, vous devez indiquer la clé d’accès secrète (Secret Access Key, celle qui mélange les majuscules et minuscules) que vous avez créée dans la Product Advertising API.

Dans mon exemple, grâce à la partie $item->ItemAttributes->Title;, je récupère le titre du DVD ou du Blu-Ray mais on aurait pu imaginer autre chose. Par exemple, sur le blog, je pouvais aussi récupérer le nom de l’auteur dans le cas des livres, de manière à afficher à la fois le titre et le nom de l’auteur dans un widget :

Widget meilleures ventes Amazon

Ce long code permet en fait d’envoyer une demande totalement sécurisée à Amazon pour récupérer des informations qui nous intéressent. Vous vous doutez bien qu’Amazon ne peut pas laisser n’importe qui accéder n’importe comment à tout son catalogue de produits ! Ils ont besoin de contrôler qui fait quoi avec. Grâce à ce code, on construit une sorte de « code secret » qui va indiquer au site ce que l’on veut mais aussi le « rassurer » sur notre identité.

J’ai personnalisé le code de Stephen Tierney pour plusieurs raisons principales :

  • D’abord, je voulais qu’il sache gérer les accents… car en français, nous avons des accents partout contrairement à lui qui est anglophone. J’ai donc ajouté un petit bout de code qui permet de régler les problèmes d’affichage liés aux accents.
  • Ensuite, pour le référencement : il est important aujourd’hui de mettre les liens affiliés en nofollow, j’ai donc fait en sorte que les liens vers Amazon possèdent cet attribut nofollow et s’ouvrent dans une nouvelle fenêtre (ce qui n’oblige pas vos visiteurs à quitter votre site).
  • J’ai limité la longueur des titres à 38 caractères. En effet, certains produits ont des titres à rallonge, par exemple « 50 nuances de Grey [édition collector double DVD avec fouet et menottes offertes] » (ce titre est bien sûr totalement fictif). Bref, pas forcément joli en termes d’affichage si votre titre s’étale sur 12 lignes ! Vous pouvez bien sûr remplacer ce chiffre par un autre !

Vous pouvez maintenant stocker le fichier sur votre blog. Par exemple, en le mettant dans le dossier de votre thème WordPress via le FTP. A ce stade, si vous entrez l’adresse du fichier (monsuperblogparfait.com/wp-content/themes/nomdutheme/bestsellers.php), vous devez voir une liste de 10 produits s’afficher.

Afficher les meilleures ventes Amazon dans un widget

Il ne nous reste qu’une étape sur WordPress : afficher cette liste dans un widget. Pour ma part, j’utilise le plugin gratuit Insert PHP Code Snippet. Il suffit de créer un snippet PHP en y insérant cette ligne :

<?php include(TEMPLATEPATH.'/bestsellers.php'); ?>

Nous demandons à WordPress d’inclure (« include ») dans le widget le fichier bestsellers.php qui se trouve dans le dossier du thème (« templatepath »). Insérez ainsi le snippet fraîchement créé dans un widget. Votre liste des meilleures ventes devrait s’afficher.

Pour peaufiner le tout, vous pouvez ensuite personnaliser l’affichage dans votre fichier CSS avec la classe « topsellers » (que j’ai créée dans le long code que vous avez recopié). Il faut savoir par exemple que cette méthode vous renverra presque toujours 10 noms de produits. On ne peut pas faire autrement donc si vous voulez en afficher moins – c’était mon cas – il faudra en fait cacher les produits en trop dans votre fichier CSS, avec un « display:none; ».

Voilà pour ce long tutoriel. Je crois que vous comprenez maintenant, au vu du nombre d’étapes, pourquoi j’ai passé pas mal de temps à tâtonner avant de trouver la bonne méthode pour afficher les grmglmrlgmrlg de meilleures ventes de Tonnerre de Brest ;)

Je précise pour finir que je ne suis pas du tout développeur web, juste bidouilleuse… Le code fonctionne encore à l’heure où je mets à jour cet article, je l’utilise sur mon blog livres et cinéma à droite des articles. Cependant, si vous avez du mal à le personnaliser, je vous conseille de vous tourner vers des forums de « pros » du développement web (type Stack Overflow) qui pourront sûrement mieux vous aider ;)


Poster un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Lorsque vous postez un commentaire sur le blog, le nom indiqué dans la case "Prénom" ainsi que votre message apparaîtront publiquement. Votre adresse e-mail restera confidentielle.

9 commentaires sur “Comment afficher les meilleures ventes Amazon sur son blog ?

  • mohamed

    Bonsoir,

    J’espère que vous vous portez bien, merci infiniment pour toutes ces informations fort utiles.
    Juste une question la plateforme d’affiliation Amazon permet elle de détenir sur son site d’autre plateforme d’affiliation comme par exemple « Jvzoo » ?

    Merci d’avance pour votre réponse

    Répondre à mohamed
    • Marlène

      Bonsoir, je ne connais pas la plateforme en question mais oui, les conditions actuelles du programme Partenaires permettent tout à fait d’utiliser d’autres plateformes d’affiliation, j’ai moi-même une affiliation Amazon + une affiliation Booking.com sur mon blog voyage.

      Répondre à Marlène
  • Nathalie

    Bonjour Marlène,
    Sais tu si depuis que tu as crée ce tuto quelques choses à changé dans ce code ? car j’ai tenté de le reproduire avec mes Ids and key et cela en fonctionne pas ( j’ai testé avec la categorie DVD comme toi)
    Merci

    Répondre à Nathalie
    • Marlène

      Hello Nathalie, j’utilise toujours le même code pour afficher les best-sellers dans la sidebar de mon blog culture, justement dans la catégorie DVD & Blu-Ray. Je crois qu’Amazon a légèrement modifié la façon d’obtenir des clés API, il faudrait que je reteste le tutoriel « en partant de zéro » comme si je n’avais pas de clé… mais sur le code lui-même, je n’ai rien touché en tout cas !

      Répondre à Marlène
    • Nathalie

      Re :) finalement le pb venait bien de mes clés. Merci à toi pour ce code, car c’est une vrai galère je trouve pour trouver de la doc claire en fr sur les api Amazon.

      Répondre à Nathalie
    • Marlène

      Ah, contente qu’il y ait une solution ! Je trouve aussi que c’est un vrai casse-tête (pourtant, je parle anglais) et n’étant pas développeur web, ça l’est encore plus :)

      Répondre à Marlène
  • Maximilien

    Salut Marlène,

    Excellent tuto, bravo :) Je viens de tester sur un de mes sites mais j’ai cette erreur qui ressort :

    Warning: Invalid argument supplied for foreach() in /home/users5/m/ […] /bestsellers.php on line 6

    Cela te dit quelque chose ?

    Merci par avance !

    Répondre à Maximilien
    • Marlène

      Hello, peut-être un lien avec les attributs que tu choisis de montrer ? Par exemple, si l’attribut Title n’existe pas ou ne s’appelle pas comme ça sur le produit que tu veux mettre en avant, ça pourrait expliquer que l’argument soit jugé invalide…

      N’hésite pas à poser la question sur un forum plus axé dev parce que je ne suis pas une immense experte du sujet :) Comme je le mentionne dans le tuto j’ai su adapter ce code existant mais je maîtrise pas PHP au point de savoir faire du débogage avancé :) Désolée de ne pas pouvoir t’aider davantage !

      Répondre à Marlène
    • Maximilien

      Ca marche ! Merci en tout cas pour ton aide, je vais tester ça ;)

      Répondre à Maximilien
Si vous aimez les articles du site, n'hésitez pas à faire vos achats sur Amazon.fr via ce lien ; il me permettra de toucher une commission grâce au programme Partenaires Amazon EU.