Crea un collegamento di affiliazione personalizzato con l'API di merchandising di Amazon Product

Il programma Amazon Associates, in collaborazione con Amazon Web Services (AWS), offre agli sviluppatori un mezzo potente per effettuare ricerche nel catalogo del negozio Amazon utilizzando un'API RESTful e integrare i dati praticamente per qualsiasi elenco di prodotti in una pagina Web. Se sei un programmatore con una mentalità aziendale e stai cercando modi per monetizzare il tuo sito, puoi iscriverti per diventare un affiliato di Amazon e guadagnare una commissione ogni volta che un utente fa clic sul link del prodotto e completa un acquisto. (E per quanto riguarda i programmi di affiliazione, le commissioni di Amazon sono tra le più generose.)

Per quelli di voi che sono nuovi all'idea del marketing di affiliazione, supponiamo che stiate gestendo un blog o un sito Web con recensioni di film. Per ogni recensione di film che viene pubblicata, puoi beneficiare includendo un link per i lettori per acquistare il film da qualche parte vicino al tuo articolo. Per rendere più attraente il clic, il collegamento può includere un'immagine in miniatura del DVD, il nome completo del film, il prezzo più basso disponibile e un pulsante "Acquista".

In questo tutorial, ti mostrerò come creare una classe dedicata e riutilizzabile in PHP che si colleghi all'API Merchandising del prodotto e recuperi i dati XML in base al nome del prodotto e alla categoria dello shopping (in questo caso "Film"). Alla fine, inseriremo questi dati in un modello HTML piccolo e completamente personalizzabile, così da finire con una demo funzionante di un mini modulo di affiliazione. Iniziamo.

[Si prega di notare prima di accedere alla dimostrazione di esempio che se si sceglie di acquistare o noleggiare il DVD dal link fornito, si tradurrà in una commissione di pagamento per Envato Tuts +.]

Registrazione per un ID affiliato e ottenere le credenziali

Innanzitutto, registrati per un account su affiliate-program.amazon.com. È gratuito e devi solo seguire i passaggi per creare un profilo per il tuo sito web. Ti verrà chiesto di verificare la tua identità alla fine del processo inserendo il tuo numero di telefono, ricevendo una chiamata automatica e inserendo il codice di accesso che ti viene fornito.

Una volta completata la registrazione, ti verrà dato un ID affiliato Amazon (in questo esempio, è "envtuts-20"). Accedi al tuo account principale con il tuo nome utente e password e clicca su API di merchandising del prodotto scheda. Qui, fai clic sul link per iniziare a utilizzare l'API. 

Dovrai registrarti a Amazon Web Services (aws.amazon.com), se non lo hai già fatto. Nella console AWS, sotto Credenziali di sicurezza, è possibile generare una chiave di accesso e una chiave segreta per effettuare richieste API. (Nota: è importante mantenere queste credenziali private e sicure. Non esporli mai pubblicamente su GitHub o altrove online.)

Impostazione della nostra classe helper PHP

Per gli scopi di questo esempio e per mantenere le cose relativamente semplici, implementeremo il modello di progettazione Singleton per creare una classe helper statica chiamata AmazonAssocHelperComprenderà un metodo pubblico che si collega all'API, cerca nel catalogo e restituisce i dati del prodotto utilizzando determinati parametri che passiamo. Ecco come l'ho impostato:

Le prime due righe dichiarano uno spazio dei nomi per la nostra classe e includono una classe di terze parti che dovremo fare una richiesta firmata all'API con le nostre credenziali. Le tre costanti che ho definito sono il nostro ID di affiliazione fondamentale, che abbiamo ottenuto dopo la registrazione, e la chiave di accesso AWS e la chiave segreta. Quando facciamo le nostre richieste API, l'ID affiliato viene automaticamente inserito nel link del prodotto che recuperiamo in modo che gli acquisti possano essere tracciati in modo appropriato sul nostro account e veniamo pagati! Assicurati di inserire tutti e tre questi valori per te stesso.

Le tre variabili private si riferiscono ai parametri di ricerca che forniremo per ogni richiesta. Sto usando "ItemSearch" come scelta operativa per cercare i risultati. "2013-08-01" è la data dell'ultima versione dell'API, che dobbiamo anche fornire alla nostra richiesta firmata e, infine, dobbiamo designare i gruppi di risposta che desideriamo vengano restituiti. Ci sono 55 scelte in totale, e variano in termini di dimensioni e tipo di dati restituiti. Per i nostri scopi, stiamo cercando il titolo completo del film e l'URL completo per la pagina di dettaglio, che sono entrambi nel gruppo di risposta "Piccolo". Abbiamo anche bisogno di un'immagine in miniatura del gruppo di risposta "Immagini" e del nuovo prezzo più basso del gruppo "OfferSummary".

Il fetch_product_data () la funzione è il nostro metodo pubblicamente esposto che prende due parametri:

  1. una frase chiave specifica che si riferisce al nome del prodotto che vogliamo cercare
  2. una categoria di prodotti Amazon accettata

Alla fine restituirà una matrice di dati relativi ai risultati di ricerca principali analizzati da una risposta XML. (In molti casi, il primo risultato sarà il prodotto che desideriamo, supponendo che la frase chiave che forniamo sia sufficientemente specifica. In alternativa, puoi decidere di modificare questo esempio per cercare il numero ASIN o ID specifico del prodotto invece, ma ci sono pro e contro in questo metodo: se si dispone di un ampio database di pagine di articoli per film diversi, l'utilizzo di un approccio basato sul nome si rivelerà molto più efficiente, poiché ti consentirà di generare automaticamente collegamenti di prodotti per tutti dei tuoi articoli all'istante e risparmia il tempo e l'impegno in più necessari per cercare manualmente e inserire gli ID per ciascuno di essi.)

Generazione di una richiesta firmata

Il passaggio successivo consiste nell'aggiungere una classe helper che effettuerà la richiesta firmata all'API del prodotto. Ho usato una funzione di terze parti scritta da Ulrich Mierendorff e l'ho avvolta nella sua stessa classe statica chiamata AWSSignedRequest. Occorrono diversi parametri, inclusa la regione (per l'archivio degli Stati Uniti, utilizziamo "com"), una serie di parametri di richiesta, le nostre chiavi AWS, i gruppi di risposta e la versione dell'API che abbiamo già definito. Il get_signed_request () il metodo essenzialmente crea e restituisce una stringa di richiesta URL completa da tutti questi pezzi.

L'URL della richiesta firmata finale sarà simile a questo:

http://webservices.amazon.com/onca/xml? AWSAccessKeyId = AKIAJILHUTAJ5MMQRJWA & AssociateTag = envtut-20 & Operation = ItemSearch & ResponseGroup = Small% 2CImages% 2COfferSummary & SearchIndex = Movies & Service = AWSECommerceService & Timestamp = 2015-11-06T20% 3A34% 3A52Z & Title = Jurassic% 20World & Version = 2013-08-01 & Signature = nwkfvvLCvl11Cunuthz6orXCbBMnBc1Z7S3HSfYW % 2B14% 3D

Nel AmazonAssocHelper classe, effettuare la chiamata a get_signed_request () in un metodo chiamato get_search_results ()e passare in un array contenente quattro parametri di ricerca ($ params) insieme agli altri argomenti come mostrato di seguito:

 / ** * Esegue la ricerca con richiesta firmata sull'API del prodotto utilizzando la chiave e il nome della categoria * restituisce: Oggetto XML * / funzione statica privata get_search_results ($ keyphrase, $ search_index) // Definire la richiesta $ params = array ("SearchIndex" = > $ search_index, // la categoria "Title" => $ keyphrase, "Operation" => self :: $ operation, "ResponseGroup" => self :: $ response_group); $ request = AWSSignedRequest :: get_signed_request ('com', $ params, self :: AMZ_ASSOC_ACCESSKEY, self :: AMZ_ASSOC_SECRETKEY, self :: AMZ_ASSOC_TAG, self :: $ version); $ response = file_get_contents ($ richiesta); // per testare / * header ('Content-type: application / xml'); echo $ risposta; exit; * / return simplexml_load_string ($ response); 

Nostro $ params array include l'operazione e la risposta che abbiamo già definito, così come i valori per 'Title' e 'SearchIndex'. In questo caso, SearchIndex è semplicemente la categoria di prodotto su cui stiamo cercando. Ora possiamo invocare il built-in di PHP file_get_contents () funzione per generare una risposta dalla richiesta e poiché la risposta è un documento XML, usiamo un'altra funzione incorporata, simplexml_load_string (), per caricarlo come un oggetto che possiamo analizzare. 

Test della risposta e anteprima dei dati XML

A questo punto, vorremmo essere in grado di provare la nostra richiesta API con alcuni valori di prodotto reali in modo da poter vedere un esempio reale di come sono i dati XML restituiti prima di analizzarlo. Come mostrato sopra, aggiungi alcune linee di test per impostare l'intestazione su application / XML e stampare il file $ risposta prima che venga restituito.

Ora crea un file che fungerà da pagina principale in cui verrà mostrato il link del prodotto. Ho deciso di chiamarlo index.php. In alto, aggiungi il seguente bit di codice:

Le prime due righe dichiarano il nostro spazio dei nomi e includono una funzione globale che consente ai nostri file di classe di essere caricati automaticamente, poiché non stiamo utilizzando un framework PHP. La prossima linea è quella importante. Chiamiamo il fetch_product_data () metodo pubblico sul nostro AmazonAssocHelper classe e assegnarlo a una variabile di matrice chiamata $ product_data, passare un nome specifico per il film come la frase chiave (ho scelto "Jurassic World" dalla lista corrente dei best sellers) e "Movies" come categoria. 

Quando carichi la tua pagina, l'inizio della tua risposta XML dovrebbe assomigliare a questo:

  807ede04-f196-44a0-99ff-ff1bb1c12fee             0,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    Dettagli tecnici  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  

Se si scorre e si scansiona l'output, si dovrebbe essere in grado di vedere tutti i dati che saranno utili alla nostra demo, incluso il , </code>, <code><LargeImage></code>, e <code><LowestNewPrice></code>. Ci saranno i nodi su cui ci concentreremo sull'analisi.</p><h2>Analisi del Response Object</h2><p>Nel <code>AmazonAssocHelper</code> classe, creare un altro metodo chiamato <code>get_top_result_data ()</code> che accetta il nostro oggetto risposta XML come parametro. Ora possiamo iniziare a leggere i nodi che contengono i dati che vogliamo catturare, ma prima di andare lì, pianifichiamo di incorporare qualche controllo degli errori. Ho aggiunto un paio di righe nella parte superiore della nostra funzione per richiamare un metodo che si occuperà di analizzare i nodi di errore per noi, e lo esaminerò più in dettaglio verso la fine di questo tutorial.</p><pre> / ** * Analizza il nodo di risultato superiore e i relativi attributi dall'oggetto XML * restituisce: matrice di dati di prodotto * / funzione statica privata get_top_result_data ($ xml) if (! Empty (self :: handle_errors ($ xml))) return array ('error' => self :: handle_errors ($ xml)); // ottiene il primo nodo del risultato $ 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' => (stringa) $ item_title, 'link' => (stringa) $ item_link, 'image' => (stringa) $ item_image, 'price' => (string) $ item_price); </pre><p>Come puoi vedere nel codice sopra, iniziamo recuperando il primo nodo dell'articolo (<code>Voce [0]</code>) dall'oggetto XML e memorizzandolo in una variabile (<code>$ FIRST_ITEM</code>). Quindi, operiamo su ciascuno dei suoi figli per raccogliere le informazioni che vogliamo (<code>$ ITEM_TITLE</code>, <code>$ ITEM_LINK</code>, <code>$ item_image</code>, <code>$ ITEM_PRICE</code>). Infine, impacchettiamo tutto in un array con attributi con nome e restituiamo l'array.</p><h2>Gestione degli errori</h2><p>Crea un metodo chiamato <code>handle_errors ()</code>e passare lo stesso oggetto XML. In base al modo in cui questa API viene impostata, più nodi di errore con codici e messaggi specifici vengono visualizzati in entrambi <code><OperationRequest></code> nodo o gli articoli <code><Request></code> nodo. È possibile testarli impostando un indice di ricerca o un gruppo di risposta non validi. Il seguente codice scorre attraverso ciascuno dei nodi e invia i messaggi di errore in una matrice che restituiamo:</p><pre>/ ** * Controlla gli errori nei ritorni request / result *: array con messaggi che descrivono "error" * / private static function handle_errors ($ xml) $ errors_arr = array (); // elabora gli errori nella richiesta foreach ($ xml-> OperationRequest-> Errors-> Error as $ error) error_log ("Codice errore:". $ error-> Code. "\ r \ n"); error_log ($ error-> Message. "\ r \ n"); error_log ( "\ r \ n"); array_push ($ errors_arr, (stringa) $ error-> Message); // controlla la presenza di una categoria non valida, nessuna corrispondenza o altro errore di ricerca foreach ($ xml-> Elementi-> Richiesta-> Errori-> Errore come $ errore) error_log ("Codice errore:". $ error-> Codice. "\ r \ n"); error_log ($ error-> Message. "\ r \ n"); error_log ( "\ r \ n"); array_push ($ errors_arr, (stringa) $ error-> Message); return $ errors_arr; </pre><h2>Compilazione dei dati in un modello HTML</h2><p>A questo punto, è possibile rimuovere le chiamate di test XML non appena siamo pronti per esaminare l'output finale dei dati. In index.php, stampa il reso <code>$ product_data array</code> e caricare la pagina. Dovresti vedere qualcosa di simile a questo:</p><pre>Array ([title] => Jurassic World [link] => http://www.amazon.com/Jurassic-World-Chris-Pratt/dp/B016W01EXI%3FSubscriptionId%3DAKIAJILHUTAJ5MMQRJWA%26tag%3Denvtut-20%26linkCode%3Dxm2% 26camp% 3D2025% 26creativo% 3D165953% 26creativoASIN% 3DB016W01EXI [image] => http://ecx.images-amazon.com/images/I/51ePeFXU2ML.jpg [prezzo] => $ 5,99)</pre><p>Una volta verificato che i dati sembrano corretti per ciascuna delle quattro proprietà a cui siamo interessati, puoi provare a eseguire la chiamata su altri film o prodotti per il confronto. Nota che l'ID affiliato (in questo caso "envtut-20") è stato automaticamente inserito nel "link" come dovremmo aspettarci.</p><p>Come passaggio finale, codifichiamo un semplice blocco di codice HTML per visualizzare i nostri dati di film e collegarli alla pagina di acquisto. Nel <em>index.php</em>, aggiungi il seguente sotto il blocco PHP:</p><pre><!doctype html> <html> <head> <title>Tuts + Demo: Amazon Product API

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

"target =" _ blank ">

su Amazon

"target =" _ blank "> Acquista ora

Tieni presente che, in caso di errore, ho deciso di nascondere del tutto il display, ma in alternativa potresti visualizzare il messaggio di errore appropriato al suo posto. 

Ora, con gli stili CSS aggiunti, l'output finale sarebbe simile a questo:

E il gioco è fatto! Una volta che hai lanciato il tuo modulo di affiliazione nel mondo, puoi monitorare tutti gli acquisti e le entrate accedendo al tuo account. 

Conclusione

In questo tutorial, abbiamo coperto tutti i passaggi necessari per un programmatore PHP per creare una soluzione di codice scalabile che generi immediatamente un link di affiliazione personalizzato per qualsiasi prodotto in Amazon Store. In base alle tue esigenze o preferenze, puoi decidere di modificare o estendere questo esempio con parametri diversi. 

Puoi anche esplorare la documentazione dell'API in modo più dettagliato per scoprire ancora di più di ciò che è possibile. Il vero potere nell'utilizzo dell'API di merchandising del prodotto risiede nella flessibilità che consente di organizzare e visualizzare una gamma completa di informazioni in tempo reale su un prodotto o un elenco di prodotti. Con il generatore di link predefinito di Amazon (nessuna conoscenza di codifica richiesta), non si ottiene quasi la stessa quantità di controllo e le opzioni sono limitate. 

L'API brilla davvero sulle pagine web generate dinamicamente e sulle pagine in cui è necessario un maggiore controllo sull'aspetto dei tuoi link, quindi se stai lavorando su un sito Web o blog seguendo queste linee e cercando di incorporare la monetizzazione, spero che hai trovato utile questo tutorial.