Le programme Amazon Associates, associé à Amazon Web Services (AWS), offre aux développeurs un moyen puissant de rechercher dans le catalogue de l'Amazon Store à l'aide d'une API RESTful et d'intégrer les données de pratiquement toutes les listes de produits dans une page Web. Si vous êtes un programmeur ayant un esprit d'entreprise et cherchant des moyens de monétiser votre site, vous pouvez vous inscrire en tant qu'affilié d'Amazon et gagner une commission chaque fois qu'un utilisateur clique sur votre lien de produit et complète un achat. (Et en ce qui concerne les programmes d'affiliation, les commissions d'Amazon sont parmi les plus généreuses.)
Pour ceux d'entre vous qui débutent dans le marketing d'affiliation, supposons que vous dirigez un blog ou un site Web proposant des critiques de films. Pour chaque critique de film publiée, vous pouvez bénéficier d'un lien permettant aux lecteurs d'acheter le film quelque part près de votre article. Pour rendre le clic plus attrayant, le lien peut inclure une vignette du DVD, le nom complet du film, le prix le plus bas disponible et un bouton "Acheter"..
Dans ce tutoriel, je vais vous montrer comment créer une classe PHP dédiée et réutilisable qui se connecte à l'API Product Merchandising et récupère les données XML en fonction du nom du produit et de la catégorie d'achat (dans ce cas, "Films"). À la fin, nous peuplerons ces données dans un petit modèle HTML entièrement personnalisable afin de nous retrouver avec une démonstration de travail d'un mini module d'affilié. Commençons.
[Veuillez noter, avant d'accéder à l'exemple de démonstration, que si vous choisissez d'acheter ou de louer le DVD à partir du lien fourni, cela entraînera un paiement de commission à Envato Tuts +.]
Commencez par créer un compte sur affiliate-program.amazon.com. C'est gratuit et il vous suffit de suivre les étapes pour créer un profil pour votre site Web. Vous serez invité à vérifier votre identité à la fin du processus en entrant votre numéro de téléphone, en recevant un appel automatisé et en saisissant le code d'accès qui vous a été attribué..
Une fois l'enregistrement terminé, vous recevrez un ID d'affilié Amazon (dans cet exemple, il s'agit de "envtuts-20"). Connectez-vous à votre compte principal avec votre nom d'utilisateur et votre mot de passe et cliquez sur le bouton API de marchandisage de produit languette. Là, cliquez sur le lien pour commencer à utiliser l'API.
Si vous ne l'avez pas déjà fait, vous devrez vous inscrire à Amazon Web Services (aws.amazon.com). Dans la console AWS, sous Identifiants de sécurité, vous pouvez générer une clé d'accès et une clé secrète pour effectuer des requêtes d'API. (Remarque: il est important de garder ces informations d'identification privées et sécurisées. Ne les exposez jamais publiquement sur GitHub ou ailleurs en ligne.)
Pour les besoins de cet exemple et pour que les choses restent relativement simples, nous allons implémenter le modèle de conception Singleton pour créer une classe d'assistance statique appelée AmazonAssocHelper
. Il inclura une méthode publique qui se connecte à l'API, effectue une recherche dans le catalogue et renvoie les données du produit à l'aide de certains paramètres que nous transmettons. Voici comment je l'ai mis en place:
Les deux premières lignes déclarent un espace de noms pour notre classe et incluent une classe tierce dont nous aurons besoin pour faire une demande signée à l'API avec nos informations d'identification. Les trois constantes que j'ai définies sont notre identifiant d'affilié, que nous avons obtenu après notre inscription, ainsi que la clé d'accès et la clé secrète AWS. Lorsque nous faisons nos demandes d'API, l'ID d'affilié est automatiquement inséré dans le lien de produit que nous récupérons afin que les achats puissent être correctement retracés sur notre compte et que nous soyons payés! Assurez-vous de remplir ces trois valeurs pour vous-même.
Les trois variables privées font référence aux paramètres de recherche que nous fournirons pour chaque demande. J'utilise "ItemSearch" comme choix d'opération pour rechercher des résultats. "2013-08-01" correspond à la date de la dernière version de l'API, que nous devons également fournir à notre demande signée. Enfin, nous devons désigner les groupes de réponses à renvoyer. Il existe 55 choix en tout et ils varient en taille et en type de données. Pour nos besoins, nous recherchons le titre complet du film et l'URL complète de la page de détail, qui figurent tous deux dans le groupe de réponses "Petit". Nous avons également besoin d'une vignette du groupe de réponses "Images" et du nouveau prix le plus bas du groupe "OfferSummary"..
le
fetch_product_data ()
function est notre méthode exposée publiquement qui prend deux paramètres:
- une phrase-clé spécifique faisant référence au nom du produit que nous souhaitons rechercher
- une catégorie de produits Amazon acceptée
Il renverra finalement un tableau de données se rapportant au résultat de recherche supérieur analysé à partir d'une réponse XML. (Dans de nombreux cas, le premier résultat sera le produit souhaité, en supposant que la phrase clé fournie soit suffisamment spécifique. Vous pouvez également décider de modifier cet exemple afin de rechercher le numéro ASIN ou ID spécifique du produit. Si vous disposez d'une vaste base de données de pages d'articles pour différents films, l'utilisation d'une approche basée sur les noms s'avérera probablement plus efficace, car elle vous permettra de générer automatiquement des liens de produits pour tous. instantanément et économisez du temps et des efforts supplémentaires dus à la recherche manuelle et à l’insertion d’ID pour chaque article.)
Générer une demande signée
L'étape suivante consiste à ajouter une classe d'assistance qui effectuera la demande signée à l'API du produit. J'ai utilisé une fonction tierce écrite par Ulrich Mierendorff et l'ai enveloppée dans sa propre classe statique appelée
AWSSignedRequest
. Il faut plusieurs paramètres, y compris la région (pour le magasin américain, nous utilisons "com"), un tableau de paramètres de requête, nos clés AWS, nos groupes de réponses et la version de l'API que nous avons déjà définie. leget_signed_request ()
méthode essentiellement construit et retourne une chaîne de demande d'URL complète à partir de toutes ces pièces.L'URL de la demande signée finale ressemblera à ceci:
http://webservices.amazon.com/onca/xml? AWSA % 2B14% 3Ddans le
AmazonAssocHelper
classe, appelez àget_signed_request ()
dans une méthode appeléeget_search_results ()
et passez un tableau contenant quatre paramètres de recherche ($ params
) ainsi que les autres arguments ci-dessous:/ ** * Lance la recherche avec une requête signée sur l'API du produit à l'aide de la phrase clé et du nom de catégorie * retourne: objet XML * / fonction statique privée get_search_results ($ keyphrase, $ search_index) // Définit la requête $ params = array ("SearchIndex" = > $ search_index, // la catégorie "Title" => $ keyphrase, "Operation" => self :: $ operation, "ResponseGroup" => self :: $ response_group); $ request = AWSSignedRequest :: get_signed_request ('com', $ paramètres, self :: AMZ_ASSOC_ACCESSKEY, self :: AMZ_ASSOC_SECRETKEY, self :: AMZ_ASSOC_TAG, self :: $ version); $ response = file_get_contents ($ request); // pour tester / * en-tête ('Content-type: application / xml'); echo $ réponse; exit; * / return simplexml_load_string ($ response);Notre
$ params
tableau inclut l'opération et la réponse que nous avons déjà définies, ainsi que les valeurs de 'Title' et 'SearchIndex'. Dans ce cas, SearchIndex est simplement la catégorie de produit sur laquelle nous effectuons une recherche. Maintenant, nous pouvons appeler PHP intégréfile_get_contents ()
function pour générer une réponse à partir de la requête, et comme la réponse est un document XML, nous utilisons une autre fonction intégrée,simplexml_load_string ()
, pour le charger en tant qu'objet que nous pouvons analyser.Test de la réponse et prévisualisation des données XML
À ce stade, nous souhaitons pouvoir tester notre requête d'API avec des valeurs de produit réelles afin de voir un exemple réel de ce à quoi nos données XML renvoyées ressemblent avant de les analyser. Comme indiqué ci-dessus, ajoutez quelques lignes de test pour définir l’en-tête sur application / XML et imprimez le
$ réponse
avant qu'il ne soit rendu.Maintenant, créez un fichier qui servira de page principale sur laquelle le lien du produit sera affiché. J'ai décidé de l'appeler index.php. En haut, ajoutez le bit de code suivant:
Les deux premières lignes déclarent notre espace de noms et incluent une fonction globale qui permet le chargement automatique de nos fichiers de classe, car nous n'utilisons pas de framework PHP. La ligne suivante est la plus importante. Nous appelons le
fetch_product_data ()
méthode publique sur notreAmazonAssocHelper
classe et l'affecter à une variable de tableau appelée$ product_data
, en passant un nom de film spécifique comme phrase clé (j'ai choisi "Jurassic World" dans la liste actuelle des meilleures ventes) et "Films" comme catégorie.Lorsque vous chargez votre page, le début de votre réponse XML devrait ressembler à ceci:
807ede04-f196-44a0-99ff-ff1bb1c12fee 0.0887890000000000 … 37 4 … B016W01EXI Il existe un nombre suffisant de lecteurs Détails techniques http://www.amazon.com/Jurassic-World-Chris-Pratt/dp/tech-data/B016W01EXI%3FSubscriptionId%3DAKIAJILHUTAJ5Module de sachet 3DB016W01EXI Si vous faites défiler et scannez la sortie, vous devriez pouvoir voir toutes les données utiles à notre démo, y compris la
,
,
, et
. Il y a les nœuds que nous allons nous concentrer sur l'analyse.
Analyser l'objet de réponse
dans le
AmazonAssocHelper
classe, crée une autre méthode appeléeget_top_result_data ()
cela prend notre objet de réponse XML comme paramètre. Nous pouvons maintenant commencer à lire les noeuds contenant les données que nous voulons capturer, mais avant d’y aller, prévoyons d’incorporer une vérification des erreurs. J'ai ajouté quelques lignes en haut de notre fonction pour appeler une méthode qui se chargera de l'analyse des noeuds Error pour nous, et je reviendrai sur cela plus en détail vers la fin de ce tutoriel../ ** * Analyse le noeud de résultat supérieur et ses attributs de l'objet XML * retourne: tableau de données de produit * / fonction statique privée get_top_result_data ($ xml) if (! Empty (self :: handle_errors ($ xml))) return array ('error' => self :: handle_errors ($ xml)); // obtient le premier noeud de résultat $ first_item = $ xml-> Items [0] -> Item; $ item_title = $ first_item-> ItemAttributes-> Title; $ item_link = $ first_item-> DetailPageURL; $ item_image = $ first_item-> LargeImage-> URL; $ item_price = $ first_item-> OfferSummary-> LowestNewPrice-> FormattedPrice; return array ('title' => (chaîne) $ item_title, 'link' => (chaîne) $ item_link, 'image' => (chaîne) $ item_image, 'price' => (chaîne) $ item_price);Comme vous pouvez le constater dans le code ci-dessus, nous commençons par récupérer le premier nœud d’article (
Item [0]
) à partir de l'objet XML et le stocker dans une variable ($ first_item
). Ensuite, nous intervenons sur chacun de ses enfants pour collecter les informations souhaitées ($ item_title
,$ item_link
,$ item_image
,$ item_price
). Finalement, nous emballons le tout dans un tableau avec des attributs nommés et retournons le tableau.Gestion des erreurs
Créez une méthode appelée
handle_errors ()
et passez le même objet XML. Selon la configuration de cette API, plusieurs nœuds d’erreur avec des codes et des messages spécifiques sont configurés pour apparaître dans lenoeud ou les éléments
nœud. Vous pouvez les tester en définissant un index de recherche ou un groupe de réponses non valide. Le code suivant parcourt chacun des nœuds et pousse les messages d'erreur dans un tableau que nous renvoyons:
/ ** * Vérifie les erreurs dans la requête / résultat * retourne: array avec le (s) message (s) décrivant "l'erreur" * / private static function handle_errors ($ xml) $ errors_arr = array (); // traite les erreurs dans la requête foreach ($ xml-> OperationRequest-> Erreurs-> Erreur sous forme d'erreur $ error) error_log ("Code d'erreur:". $ error-> Code. "\ r \ n"); error_log ($ error-> Message. "\ r \ n"); error_log ("\ r \ n"); array_push ($ errors_arr, (chaîne) $ error-> Message); // recherche les catégories non valides, les correspondances et autres erreurs de recherche foreach ($ xml-> Items-> Request-> Errors-> Error as $ error) error_log ("Code d'erreur:". $ error-> Code. "\ r \ n"); error_log ($ error-> Message. "\ r \ n"); error_log ("\ r \ n"); array_push ($ errors_arr, (chaîne) $ error-> Message); return $ errors_arr;Remplir les données dans un modèle HTML
À ce stade, vous pouvez supprimer les appels de test XML, car nous sommes prêts à examiner la sortie finale des données. Dans index.php, affiche le résultat
tableau $ product_data
et chargez la page. Vous devriez voir quelque chose comme ça:Array ([title] => Monde jurassique [link] => http://www.amazon.com/Jurassic-World-Chris-Pratt/dp/B016W01EXI%3FSubscriptionId%3DAKIAJILHUTAJ5MMQRJWA%26tag%3Denvtut%%%%%c%C3%A9t; 26camp% 3D2025% 26creative% 3D165953% 26creativeASIN% 3DB016W01EXI [image] => http://ecx.images-amazon.com/images/I/51ePeFXU2ML.jpg [price] => 5,99 $)Une fois que vous avez vérifié que les données semblent correctes pour chacune des quatre propriétés qui nous intéressent, vous pouvez essayer d'exécuter l'appel sur d'autres films ou produits à des fins de comparaison. Notez que l'ID de l'affilié (dans ce cas, "envtut-20") a été automatiquement inséré dans le "lien" comme prévu.
Enfin, codons un simple bloc HTML pour afficher les données de notre film et le lier à la page d’achat. Dans index.php, ajoutez ce qui suit sous le bloc PHP:
Tuts + Demo: API de produit Amazon "target =" _ blank ">"target =" _ blank ">
sur Amazon
"target =" _ blank "> Acheter maintenantNotez que si une erreur est renvoyée, j'ai choisi de masquer complètement l'affichage, mais vous pouvez également afficher le message d'erreur approprié à la place..
Maintenant, avec les styles CSS ajoutés, la sortie finale ressemblerait à ceci:
Et voila! Une fois que vous avez lancé votre module d’affiliation dans le monde, vous pouvez suivre tous les achats et revenus en vous connectant à votre compte..
Conclusion
Dans ce didacticiel, nous avons présenté toutes les étapes nécessaires à un programmeur PHP pour créer une solution de code évolutive générant instantanément un lien d'affiliation personnalisé pour pratiquement tous les produits d'Amazon Store. En fonction de vos besoins ou de vos préférences, vous pouvez décider de modifier ou d'étendre cet exemple avec différents paramètres..
Vous pouvez également explorer vous-même la documentation de l'API plus en détail pour découvrir encore plus de ce qui est possible. L’utilisation réelle de l’API de marchandisage réside dans la flexibilité qu’elle offre pour organiser et afficher une gamme complète d’informations en temps réel sur un produit ou une liste de produits. Avec le générateur de liens par défaut d’Amazon (aucune connaissance en matière de codage requise), vous n’obtenez pas le même contrôle et vos options sont limitées..
L’API brille vraiment sur les pages Web générées de manière dynamique et sur les pages où vous avez besoin d’un contrôle plus strict de l’apparence de vos liens. Par conséquent, si vous travaillez sur un site Web ou un blog dans ce sens et que vous souhaitez intégrer la monétisation, j’espère que vous avez trouvé ce tutoriel utile.