Come usare Amazon ECS PHP API

DiFabio

Come usare Amazon ECS PHP API

Nel nostro primo articolo relativo ad Amazon, vi abbiamo spiegato come accedere al servizio e come registrarsi. Passiamo ora al passo successivo. Ora vi starete chiedendo come cercare un prodotto all’interno del catalogo amazon; come visualizzarlo e come visualizzare tutti i suoi dettagli, come immagini, recensioni, prezzi, offerte e prodotti correlati. Come creare un aShop basato su Amazon? Per fare ciò, iniziamo a lavorare con le API di Amazon. Le API (Application Programming Interface) sono un’interfaccia applicativa attraverso la quale è possibile utilizzare i servizi che un sito web mette a disposizione. Le API vengono rilasciate dal sito stesso, solitamente per più linguaggi di programmazione. Qui parleremo delle API AMAZON per PHP.

Vediamo da dove inziare. La prima cosa da fare è scaricare le librerie AMAZON per PHP. A questo link potete trovare una versione dell’Amazon ECS Library V.1.3.3, altrimenti potete cercare l’ultima versione QUI.

Una volta scaricate e scompattate, le librerie appariranno così:
amazonlib

La cartella che più ci interessa e su cui andremo a lavorare è la cartella samples. Questa contiene i file fondamentali per far funzionare il nostro Amazon Shop. Vediamo insieme:

  • sampleSettings.php-dist
    • E’ il file di configurazione. Questo file, una volta rinomiato in sampleSettings.php va modificando inserendo i nostri dati di riconoscimento di Amazon, per fare in modo che i click, provenienti dal nostro sito, vengano tracciati.
  • sampleItemSearch.php
    • Attraverso questo file è possibile eseguire le ricerche nel database di Amazon e di mostrare tutti i risultati relativi alla stringa di ricerca utilizzata.
  • sampleItemLookup.php
    • Una volta trovato il prodotto che ci interessa, attraverso il SampleItemSearch.php, basterà usare la funzionalità offerta da questo file, per avere tutti i dettagli del prodotto che abbiamo ricercato.

Andiamo ora a vedere nel dettaglio il contenuto di ogni singolo file.

Inziamo con il file sampleSettings.php che una volta scaricato apparirà come segue:

View source

<?php
define('AWS_API_KEY', 'inserisciquiiltuoapikey');
define('AWS_API_SECRET_KEY', 'inserisciquilatuascretkey');
define('AWS_ASSOCIATE_TAG', 'inserisciquiiltuoassociatetag');
define('AWS_ANOTHER_ASSOCIATE_TAG', 'ANOTHER ASSOCIATE TAG');

 

Il file va modificato inserendo i nostri dati, recuperati da questa pagina. Una volta personalizzato il file, questo non va mai più modificato a meno di eventuali future modifiche alle credenziali Amazon.

Vediamo ora come visualizzare i prodotti derivanti dalla ricerca, attraverso il file sampleItemSearch.php

View source

<?php
/**
 * For a running Search Demo see: http://amazonecs.pixel-web.org
 */

if ("cli" !== PHP_SAPI)
{
    echo "<pre>";
}

if (is_file('sampleSettings.php'))
{
  include 'sampleSettings.php';
}

defined('AWS_API_KEY') or define('AWS_API_KEY', 'API KEY');
defined('AWS_API_SECRET_KEY') or define('AWS_API_SECRET_KEY', 'SECRET KEY');
defined('AWS_ASSOCIATE_TAG') or define('AWS_ASSOCIATE_TAG', 'ASSOCIATE TAG');

require '../lib/AmazonECS.class.php';

try
{
    // get a new object with your API Key and secret key. Lang is optional.
    // if you leave lang blank it will be US.
    $amazonEcs = new AmazonECS(AWS_API_KEY, AWS_API_SECRET_KEY, 'de', AWS_ASSOCIATE_TAG);

    // If you are at min version 1.3.3 you can enable the requestdelay.
    // This is usefull to get rid of the api requestlimit.
    // It depends on your current associate status and it is disabled by default.
    // $amazonEcs->requestDelay(true);

    // for the new version of the wsdl its required to provide a associate Tag
    // @see https://affiliate-program.amazon.com/gp/advertising/api/detail/api-changes.html?ie=UTF8&pf_rd_t=501&ref_=amb_link_83957571_2&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=&pf_rd_s=assoc-center-1&pf_rd_r=&pf_rd_i=assoc-api-detail-2-v2
    // you can set it with the setter function or as the fourth paramameter of ther constructor above
    $amazonEcs->associateTag(AWS_ASSOCIATE_TAG);

    // changing the category to DVD and the response to only images and looking for some matrix stuff.
    $response = $amazonEcs->category('DVD')->responseGroup('Large')->search("Matrix Revolutions");
    //var_dump($response);

    // from now on you want to have pure arrays as response
    $amazonEcs->returnType(AmazonECS::RETURN_TYPE_ARRAY);

    // searching again
    $response = $amazonEcs->search('Bud Spencer');
    //var_dump($response);

    // and again... Changing the responsegroup and category before
    $response = $amazonEcs->responseGroup('Small')->category('Books')->search('PHP 5');
    //var_dump($response);

    // category has been set so lets have a look for another book
    $response = $amazonEcs->search('MySql');
    //var_dump($response);

    // want to look in the US Database? No Problem
    $response = $amazonEcs->country('com')->search('MySql');
    //var_dump($response);

    // or Japan?
    $response = $amazonEcs->country('co.jp')->search('MySql');
    //var_dump($response);

   // Back to DE and looking for some Music !! Warning "Large" produces a lot of Response
   $response = $amazonEcs->country('de')->category('Music')->responseGroup('Small')->search('The Beatles');
   //var_dump($response);

   // Or doing searchs in a loop?
   for ($i = 1; $i < 4; $i++)
   {
     $response = $amazonEcs->search('Matrix ' . $i);
     //var_dump($response);
   }

   // Want to have more Repsonsegroups?                         And Maybe you want to start with resultpage 2?
   $response = $amazonEcs->responseGroup('Small,Images')->optionalParameters(array('ItemPage' => 2))->search('Bruce Willis');
   //var_dump($response);

   // With version 1.2 you can use the page function to set up the page of the resultset
   $response = $amazonEcs->responseGroup('Small,Images')->page(3)->search('Bruce Willis');
   //var_dump($response);
}
catch(Exception $e)
{
  echo $e->getMessage();
}

if ("cli" !== PHP_SAPI)
{
    echo "</pre>";
}

 

Iniziamo ad analizzare la riga:

$response = $amazonEcs->category('DVD')->responseGroup('Large')->search("Matrix Revolutions");

Decommentando la riga subito successiva, cancellando i 2 //:

//var_dump($response);

e richiamando la pagina  sampleItemSearch.php, otterremo tutti i dati relativi alla categoria DVD che corrispondono alla ricerca per “Matrix Revolutions”.

La risposta che riceveremo sarà un Array Amazon sampleItemSearch example. Ora non ci resterà altro da fare che eseguire il parsing dei dati per mostrarli ben formattati. Tra i dati forniti dall’output di sampleIteamSearch.php ce n’è uno molto importante che è l’ASIN, ovvero il codice identificativo univoco di Amazon. Dando in pasto questo codice al file sampleItemLookup.php, potremo vedere i dettagli di ogni singolo prodotto.

Sul sito brickers.com (che si occupa di LEGO) potete vedere un buon esempio di come formattare i dati provenienti da sampleItemLookup.php

Nel prossimo articolo vi mostreremo come creare uno shop dedicato ad amazon con tanto di motore di ricerca. Torna a trovarci presto!

Se avete dei dubbi o domande, commentate!

Buon Lavoro!!!

Info sull'autore

Fabio administrator

Appassionato di tecnologia, lavoro nel mondo dell'informatica dal 1999. Mi diletto con PHP e MYSQL e ultimamente mi sono appassionato al mondo SEO ...più per sfida che per necessità. In questo blog voglio condividere con gli utenti quello che imparo, sperando che altri possano trarne "profitto" .

15 Commenti finora

GABRIELEPubblicato il10:36 pm - Giu 4, 2014

CIAO ARTICOLO UTILISSIMO MA MI DA UN PROBLEMA CON LA CLASSE SOAPCLIENT MI DICE NOTFOUND.

Fabio IegriPubblicato il9:43 pm - Giu 14, 2014

Ciao Gabriele, probabilmente non hai il soap client di php istallato.
Se istallato potrebbe non essere abilitato.
Per istallarlo dovresti ricompilati php con l’opzione –enable-soap .

Su sistema operativo CentOS o Red-Hat potrebbe essere sufficiente: yum install php-soap.
Qualunque opzione scegli, ti consiglio di fare prima un backup.
In questa pagina comunque trovi tutti i dettagli: http://www.php.net/manual/en/soap.installation.php

Spero di esserti stato utile

Ciao
Fabio

GiacomoPubblicato il9:11 am - Set 29, 2015

Ottimo tutorial, finalmente qualcuno che lo ha spiegato in italiano. Una cosa fondamentale però, la “inserisciquilatuascretkey” dove la si trova? Grazie

GiacomoPubblicato il11:07 am - Set 29, 2015

Poi un’altra domanda, ho notato che ogni elenco di risultati arriva max a 10 prodotti, nonostante io abbia impostato page a 3? Perchè? Sai per caso da dove si imposta il numero di risultati?

    Fabio IegriPubblicato il11:12 am - Set 29, 2015

    Giacomo non ho ben capito.
    Le API Amazon restituiscono al massimo 100 risultati divisi in 10 pagine. Puoi quindi avere 10 risultati per pagina per un massimo di 10 pagine.
    Qualora non ti avessi risposto, potresti spiegarti meglio?

    Grazie
    Fabio

DONATOPubblicato il4:51 pm - Mag 14, 2016

mOLTO INTERESSANTE e molto ben scritto.
Supponiamo però di voler fare il contrario, cioè invece di leggere da amazon voglio scriverci, quindi pubblicare i miei articoli prendendoli da un mio database e farne l’upload automatico ogni ora senza dover entrare sul pannello di amazon e fare ogni volta l’upload manualmente. quale strada si deve seguire? mi sarebbe molto utile saperlo.

    FabioPubblicato il1:42 pm - Mag 24, 2016

    Salve Donato.
    Purtroppo non le so dare una risposta. E’ una cosa che non ho mai affrontato. Provo a cercare e nel caso riuscissi a trovare qualche informazione le faccio sapere.

    Grazie e saluti
    F.

ChristianPubblicato il8:08 pm - Giu 2, 2016

nOn riesco in alcun modo a far funzionare gli script, potresti spiegarmi passo passo, come generare le api ?

ChristianPubblicato il8:27 pm - Giu 2, 2016

Sono riuscito a generare le api, mi sono assicurato di aver incluso la libreia ma in alcun modo mi dà risultati, come mai non mi funziona ?°

SilvioPubblicato il4:43 pm - Set 8, 2016

Ciao Fabio, sono riuscito a far funzionare tutto e ho inserito il codice php per generare dinamicamente i link ad amazon. a questo punto mi e’ venuto un dubbio, quando googlebot analizzera’ le mie pagine (circa 40000 prodotti) verranno inviate centinaia di richieste ad amazon che immagino non la prendera’ molto bene e in ogni caso si rallenterebbe troppo il processo di scansione dello spider. D’altra parte non e’ consigliabile non far generare a googlebot la parte di pagina relativa ai prodotti amazon in quanto potrei incappare in una penalizzazione per cloaking. cosa mi consigli di fare?
Grazie, silvio

    FabioPubblicato il4:58 pm - Set 8, 2016

    Ciao Silvio. Quello che posso consigliarti è:
    – Generare tue pagine originali (formattate da te con tuo codice originale) che vai a riempire con i dati presi da Amazon (titolo, immagine, descrizione …).
    – Se ppuoi creati un tuo sistema di rating dei prodotti e un sistema di commenti
    – Metti tutti rel=nofollow negli href che vanno verso Amazon.
    Se le pagine sono le tue, se quello che contengono viene visto in modo identico sia dal crawler che dal cliente (occhio a non mostrare una cosa al cliente e una a Google) e se non fai strani redirect prima di mandare il visitatore verso Amazon, non vedo rischi di cloacking.
    Per quanto riguarda il rischio di banning verso Amazon, mi sembra che le api di Amazon supportino fino a 10 chiamate al secondo (però controlla, le cose potrebbero essere cambiate). Difficilmente i bot chiedono più di una pagina al secondo.

    Spero di esserti stato d’aiuto
    Ciao
    Fabio

SilvioPubblicato il9:33 am - Set 9, 2016

Grazie Fabio,
il sito è già ben posizionato e non mi preoccupano i contenuti, quelli già ci sono, di Amazon prenderei solamente la foto, il nome del prodotto, il prezzo e ovviamente il link, assolutamente nofollow come mi ricordi anche tu.
La tua risposta sul numero di chiamate già mi tranquillizza, ma più che il ban di Amazon (di cui posso fare a meno come ho fatto finora), mi preoccuperebbe quello di google.
Comunque farò una prova!

    FabioPubblicato il9:37 am - Set 9, 2016

    Una cosa che puoi fare è salvarti le immagini in locale e servirle direttamente tramite il tuo hosting.
    Potresti mettere un campo del database (es. img_status = 0 di default) e cambiargli di stato la prima volta che ti salvi le immagini. In questo modo, le volte successive non devi ricrearla e puoi servirla direttamente.

    In bocca al lupo

Lascia una risposta