Construiți o legătură personalizată cu afacerea Amazon Product Merchandising API

Programul de Amazon Associates, coroborat cu Amazon Web Services (AWS), ofera dezvoltatorilor un mijloc puternic pentru a căuta catalogul Store Amazon folosind un API REST și integrarea datelor pentru aproape orice produs înregistrare într-o pagină web. Dacă sunteți un programator cu o mentalitate de afaceri și căutați modalități de a genera bani din site-ul dvs., vă puteți înscrie să fiți un afiliat Amazon și veți câștiga o comisie de fiecare dată când un utilizator face clic pe link-ul dvs. de produs și încheie o achiziție. (Și, în ceea ce privește programele de venituri afiliate, comisiile Amazonului se numără printre cele mai generoase.)

Pentru cei care sunteți noi în ideea de marketing afiliat, să presupunem că aveți un blog sau un site web care oferă recenzii de filme. Pentru fiecare revizuire a filmelor postate, puteți beneficia prin includerea unui link pentru cititori pentru a cumpăra filmul undeva în apropierea articolului dvs. Pentru a face mai atractivă clicul, link-ul poate include o imagine miniaturală a DVD-ului, numele filmului complet, cel mai mic preț disponibil și un buton "Cumparare".

În acest tutorial, vă vom arăta cum să creați o clasă dedicată, reutilizabilă în PHP care să se conecteze la API Merchandising Product și să preia datele XML bazate pe numele produsului și pe categoria de cumpărături (în acest caz "Movies"). În cele din urmă, vom completa aceste date într-un șablon HTML simplu, complet personalizabil, astfel încât să ajungem la un demo de lucru al unui modul mini-afiliat. Să începem.

[Vă rugăm să rețineți, înainte de a accesa demo-ul de exemplu că, dacă optați pentru cumpărarea sau închirierea DVD-ului din linkul furnizat, va duce la plata unei comisioane către Envato Tuts +.]

Înregistrarea unui cod de afiliere și obținerea acreditărilor

În primul rând, înscrieți-vă pentru un cont la affiliate-program.amazon.com. Este gratuit și trebuie doar să urmați pașii pentru a crea un profil pentru site-ul dvs. web. Vi se va solicita să vă confirmați identitatea la sfârșitul procesului introducând numărul dvs. de telefon, primind un apel automat și introducând codul de trecere pe care vi-l oferiți.

După ce ați terminat înregistrarea, vi se va da un ID de Afiliere Amazon (în acest exemplu, este "envtuts-20"). Conectați-vă la zona principală de cont cu numele dvs. de utilizator și parola și faceți clic pe Product API Merchandising tab. Acolo, faceți clic pe link pentru a începe să utilizați API-ul. 

Va trebui să vă înscrieți pentru Amazon Web Services (aws.amazon.com), dacă nu ați făcut deja acest lucru. În consola AWS, sub Instrucțiuni de securitate, puteți genera o cheie de acces și o cheie secretă pentru a face cereri API. (Notă: este important să păstrați aceste acreditări private și securizate. Nu le expuneți niciodată public pe GitHub sau oriunde altundeva online.)

Configurarea clasei PHP Helper

Pentru scopurile acestui exemplu și pentru a păstra lucrurile relativ simple, vom implementa modelul de design Singleton pentru a crea o clasă helper statică numită AmazonAssocHelperAcesta va include o metodă publică care se conectează la API, caută catalogul și returnează datele despre produs utilizând anumiți parametri pe care le trecem. Iată cum am creat-o:

Primele două linii declară un spațiu de nume pentru clasa noastră și includ o clasă terță parte căreia trebuie să facem o cerere semnată API-ului cu acreditările noastre. Cele trei constante pe care le-am definit sunt ID-ul nostru de afiliere foarte important, pe care l-am obținut după înscriere, cheia de acces AWS și cheia secretă. Când facem cererile noastre API, ID-ul afiliat se introduce automat în link-ul de produs pe care îl preluăm, astfel încât achizițiile să poată fi urmărite corespunzător în contul nostru și ne plătim! Asigurați-vă că ați completat toate aceste trei valori pentru dvs..

Cele trei variabile private se referă la parametrii de căutare pe care îi vom furniza pentru fiecare solicitare. Folosesc "ItemSearch" ca alegerea noastră de operare pentru a căuta rezultate. "2013-08-01" este data ultimei versiuni API, pe care trebuie de asemenea să o furnizăm cererii noastre semnate și, în fine, trebuie să desemnați care grupuri de răspuns am dori să le întoarcem. Există în total 55 de opțiuni și variază în funcție de mărimea și tipul de date returnate. În scopurile noastre, căutăm titlul complet al filmului și adresa URL completă a paginii cu detalii, ambele din grupul de răspuns "Mic". De asemenea, avem nevoie de o imagine miniaturală din grupul de răspuns "Imagini" și de cel mai mic preț nou din grupul "OfferSummary".

fetch_product_data () funcția este metoda expusă publicului nostru care are doi parametri:

  1. o expresie cheie specifică care se referă la numele produsului pe care dorim să îl căutăm
  2. o categorie de produs acceptată Amazon

În cele din urmă, va reveni o serie de date referitoare la rezultatul de căutare de sus analizat dintr-un răspuns XML. (În multe cazuri, primul rezultat va fi produsul pe care îl dorim, presupunând că fraza cheie pe care o furnizăm este destul de specifică. Ca alternativă, puteți decide să modificați acest exemplu pentru a căuta după numărul ASIN sau ID al produsului în schimb, există argumente pro și contra pentru această metodă.Dacă aveți o bază de date vastă de pagini de articole pentru diferite filme, folosirea unei abordări bazate pe nume se va dovedi mai eficientă, deoarece vă va permite să generați automat linkuri de produse pentru toți din articolele dvs. instantaneu și vă salvează timpul și efortul suplimentar de a fi nevoiți să căutați manual și să introduceți coduri pentru fiecare dintre acestea.)

Generarea unei solicitări semnate

Următorul pas este să adăugați o clasă de ajutor care va face cererea semnată API-ului produsului. Am folosit o funcție terță parte scrisă de Ulrich Mierendorff și l-am înfășurat în clasa sa statică numită AWSSignedRequest. Este nevoie de câțiva parametri, inclusiv regiunea (pentru magazinul din S.U.A., folosim "com"), o serie de parametri de solicitare, cheile AWS, grupurile de răspuns și versiunea API pe care am definit-o deja. get_signed_request () metoda în mod esențial construiește și returnează un șir de solicitare URL complet din toate aceste piese.

Adresa URL a solicitării finale semnat va arăta astfel:

http://webservices.amazon.com/onca/xml? AWSAccessKeyId = AKIAJILHUTAJ5MMQRJWA & AssociateTag = envtut-20 & Funcționare = ItemSearch & ResponseGroup = Mici% 2CImages% 2COfferSummary & SearchIndex = Filme & Service = AWSECommerceService & Timestamp = 2015-11-06T20% 3A34% 3A52Z & Titlu = Jurassic% 20World & Versiunea = 2013-08-01 & Semnătură = nwkfvvLCvl11Cunuthz6orXCbBMnBc1Z7S3HSfYW % 2B14% 3D

În AmazonAssocHelper clasa, apelați la get_signed_request () într-o metodă numită get_search_results ()și să treacă într-o matrice care conține patru parametri de căutare ($ params), împreună cu celelalte argumente prezentate mai jos:

 / ** * Execută căutare cu cererea semnat la API-ul produs folosind keyphrase și numele categoriei * returnează: obiect XML * / get_search_results privat statice ale funcției ($ keyphrase, $ search_index) // Definiți cerere de $ params = array ( "SearchIndex" = > $ search_index, // categoria "Title" => cheie cheie, "Operation" => self :: $ operation, "ResponseGroup" => self :: $ response_group); $ Cerere = AWSSignedRequest :: get_signed_request ( 'com', $ params, auto :: AMZ_ASSOC_ACCESSKEY, auto :: AMZ_ASSOC_SECRETKEY, auto :: AMZ_ASSOC_TAG, auto :: $ versiune); $ response = file_get_contents (solicitare $); // pentru testarea / * header ('Content-type: application / xml'); răspunsul echo $; ieșire; * / return simplexml_load_string ($ answer); 

Al nostru $ params array include operația și răspunsul pe care l-am definit deja, precum și valorile pentru "Titlu" și "SearchIndex". În acest caz, SearchIndex este pur și simplu categoria de produs pe care căutăm. Acum, putem invoca PHP-ul încorporat file_get_contents () pentru a genera un răspuns din solicitare, și din moment ce răspunsul este un document XML, folosim o altă funcție încorporată, simplexml_load_string (), pentru ao încărca ca un obiect pe care îl putem analiza. 

Testarea răspunsului și examinarea datelor XML

În acest moment, vom dori să putem încerca cererea noastră API cu câteva valori reale ale produselor, astfel încât să vedem un exemplu real al aspectului datelor XML returnate, înainte de al analiza. După cum se arată mai sus, adăugați câteva linii de testare pentru a seta antetul la aplicație / XML și a imprima răspuns $ înainte de a se întoarce.

Acum, creați un fișier care va servi drept pagină principală în care va fi afișată legătura produsului. Am decis să o sun index.php. În partea de sus, adăugați următorul cod de cod:

Primele două linii declară spațiul nostru de nume și includ o funcție globală care permite ca fișierele de clasă să fie încărcate automat, deoarece nu folosim un cadru PHP. Următoarea linie este una importantă. Noi numim fetch_product_data () metodă publică pe site-ul nostru AmazonAssocHelper clasă și să o atribuiți unei variabile de matrice numite $ product_data, trecând într-un anumit nume de film ca frază-cheie (am ales "Jurassic World" din lista curentă de cele mai bune vânzări) și "Movies" ca categorie. 

Când încărcați pagina, începutul răspunsului dvs. XML ar trebui să arate astfel:

  807ede04-f196-44a0-99ff-ff1bb1c12fee             .0887890000000000   ...  37 4 ...   B016W01EXI  http://www.amazon.com/Jurassic-World-Chris-Pratt/dp/B016W01EXI%3FSubscriptionId%3DAKIAJILHUTAJ5MMQRJWA%26tag%3Denvtut-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB016W01EXI    Detalii tehnice  http://www.amazon.com/Jurassic-World-Chris-Pratt/dp/tech-data/B016W01EXI%3FSubscriptionId%3DAKIAJILHUTAJ5MMQRJWA%26tag%3Denvtut-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN% 3DB016W01EXI  

Dacă defilați și scanați ieșirea, ar trebui să puteți vedea toate datele care vor fi utile demo-ului nostru, inclusiv , </code>, <code><LargeImage></code>, și <code><LowestNewPrice></code>. Există nodurile pe care le vom concentra pe parsare.</p><h2>Parsarea obiectului de răspuns</h2><p>În <code>AmazonAssocHelper</code> clasa, creați o altă metodă numită <code>get_top_result_data ()</code> care ia obiectul nostru de răspuns XML ca parametru. Acum putem începe să citim nodurile care conțin datele pe care vrem să le capturăm, dar înainte de a merge acolo, să planificăm includerea unor verificări de erori. Am adăugat câteva linii în partea de sus a funcției noastre pentru a invoca o metodă care va avea grijă de parsarea nodurilor de eroare pentru noi și voi trece peste asta în detaliu spre sfârșitul acestui tutorial.</p><pre> / ** * Analizează nod rezultat de top, și atributele sale, de la * returnează obiect XML: matrice de date produs * / privat static funcția get_top_result_data ($ xml) if (gol (auto :: handle_errors ($ xml))!) retur array ('error' => self :: handle_errors ($ xml)); // obține primul nod rezultat $ first_item = $ xml-> Items [0] -> Item; $ item_title = $ first_item-> ItemAttributes-> Titlu; $ item_link = $ first_item-> DetailPageURL; $ item_image = $ first_item-> LargeImage-> URL; $ item_price = $ first_item-> OfferSummary-> LowestNewPrice-> FormattedPrice; întoarce array ( 'title' => (string) $ ITEM_TITLE, 'link' => (string) $ ITEM_LINK, 'imagine' => (string) $ item_image, 'preț' => (string) $ ITEM_PRICE); </pre><p>După cum puteți vedea în codul de mai sus, începem prin preluarea primului element nod (<code>Postul [0]</code>) din obiectul XML și stocarea acestuia într-o variabilă (<code>$ FIRST_ITEM</code>). Apoi, operăm pe fiecare dintre copii să colecteze informațiile pe care le dorim (<code>$ ITEM_TITLE</code>, <code>$ ITEM_LINK</code>, <code>$ item_image</code>, <code>$ ITEM_PRICE</code>). În cele din urmă, le ambalăm într-o matrice cu atribute numite și returnează matricea.</p><h2>Manipularea erorilor</h2><p>Creați o metodă numită <code>handle_errors ()</code>și să treacă același obiect XML. În funcție de modul în care este setat acest API, mai multe noduri de eroare cu coduri și mesaje specifice sunt setate să apară fie în <code><OperationRequest></code> nod sau elemente <code><Request></code> nodul. Puteți să le testați prin setarea unui index sau a unui grup de răspuns nevalid. Următorul cod buclează prin fiecare dintre noduri și împinge mesajele de eroare într-o matrice pe care o returnează:</p><pre>/ ** * Verifică erorile din cererea / rezultatul * întoarce: matrice cu mesaje care descriu "eroare" * / funcția statică privată handle_errors ($ xml) $ errors_arr = array (); // eroare de proces în cerere foreach ($ xml-> OperationRequest-> Erori-> eroare ca eroare $) error_log ("Cod de eroare:". $ error-> Code. "\ r \ n"); error_log ($ error-> Message. "\ r \ n"); error_log ( "\ r \ n"); array_push ($ errors_arr, (șir) $ error-> Message); // verificați pentru categoria nevalidă, fără potriviri sau altă eroare de căutare ($ xml-> Items-> Request-> Errors-> Error as $ error) error_log ("Codul de eroare:" $ error-> Code. "\ r \ n"); error_log ($ error-> Message. "\ r \ n"); error_log ( "\ r \ n"); array_push ($ errors_arr, (șir) $ error-> Message); return $ errors_arr; </pre><h2>Popularea datelor într-un șablon HTML</h2><p>În acest moment, puteți elimina apelurile de testare XML, deoarece suntem pregătiți să examinăm rezultatele finale ale datelor. În index.php, imprimați mesajul returnat <code>$ matrice produs_data</code> și încărcați pagina. Ar trebui să vedeți ceva de genul:</p><pre>Array ([title] => Lumea jurasică [link] => http://www.amazon.com/Jurassic-World-Chris-Pratt/dp/B016W01EXI%3FSubscriptionId%3DAKIAJILHUTAJ5MMQRJWA%26tag%3Denvtut-20%26linkCode%3Dxm2% 26camp% 3D2025% 26creativ% 3D165953% 26creativeASIN% 3DB016W01EXI [image] => http://ecx.images-amazon.com/images/I/51ePeFXU2ML.jpg [pret] => 5.99 dolari)</pre><p>După ce ați verificat dacă datele arată corect pentru fiecare dintre cele patru proprietăți interesate, puteți încerca să efectuați apelul pe alte filme sau produse pentru comparație. Rețineți că identitatea afiliată (în acest caz "envtut-20") a fost introdusă automat în link-ul "așa cum ar trebui să ne așteptăm".</p><p>Ca ultim pas, să codificăm un simplu bloc de cod HTML pentru a afișa datele despre filme și pentru a le conecta la pagina de achiziție. În <em>index.php</em>, adăugați următoarele sub blocul PHP:</p><pre><!doctype html> <html> <head> <title>Tuts + Demo: Produs API Amazon

"target =" _ blank "> <?php echo $product_data['title']; ?>

"target =" _ blank ">

pe Amazon

"target =" _ blank "> Cumpărați acum

Rețineți că, în cazul în care o eroare a fost returnată, am optat pentru ascunderea afișajului total, dar, alternativ, ați putea afișa în locul ei mesajul de eroare adecvat. 

Acum, cu stilurile CSS adăugate, rezultatul final ar arăta cam așa:

Și acolo aveți! Odată ce ați lansat modulul dvs. de afiliere în lume, puteți urmări toate achizițiile și câștigurile, conectându-vă la contul dvs.. 

Concluzie

În acest tutorial, am abordat toți pașii necesari pentru un programator PHP pentru a construi o soluție de cod scalabil care generează instantaneu o legătură personalizată de afiliere pentru aproape orice produs din Magazinul Amazon. Pe baza nevoilor sau preferințelor dvs., puteți decide să modificați sau să extindeți acest exemplu cu diferiți parametri. 

De asemenea, puteți explora documentația API cu mai multe detalii pe cont propriu pentru a descoperi cât mai mult posibil. Puterea reală în utilizarea aplicației Merchandising Product API constă în flexibilitatea pe care o oferă pentru aranjarea și afișarea unei game complete de informații în timp real despre un produs sau o listă de produse. Cu generatorul de linkuri implicit al Amazonului (fără cunoștințe de codificare necesare), nu obțineți aproape aceeași cantitate de control, iar opțiunile dvs. sunt limitate. 

API-ul strălucește cu adevărat pe paginile web generate în mod dinamic și pe paginile în care aveți nevoie de un nivel mai ridicat de control asupra aspectului legăturilor dvs. Deci, dacă lucrați pe un site web sau un blog pe această linie și căutați să încorporați generarea de bani, sper că ați găsit acest tutorial util. 

Cod