amazon-product-api

Amazon Product Advertising API client

npm install amazon-product-api
4 downloads in the last day
9 downloads in the last week
35 downloads in the last month

Node.js client for the Amazon Product Advertising API NPM version Dependency Status Build Status

Node.js client for Amazon Product Advertising API

NPM

The major differences between this project and other implementations are:

  1. Item search can return an EcmaScript6 promise. (Check out a great article about ES6 promises)
  2. Item search is "yieldable". So it plays well with fantastic next-gen libs such as Koa and Co. See example

Installation

Install using npm:

npm install amazon-product-api

Usage

Require library

amazon = require('amazon-product-api');

Create client

var client = amazon.createClient({
    awsId: "aws ID",
    awsSecret: "aws Secret",
     awsTag: "aws Tag"
});

Now you can search for items on amazon:

using promises:

client.itemSearch({
    keywords: 'Pulp fiction',
    searchIndex: 'DVD',
    responseGroup: 'ItemAttributes,Offers,Images'
}).then(function(results){
    console.log(results);
}).catch(function(err){
    console.log(err);
});

using a callback:

client.itemSearch({
  keywords: 'Pulp fiction',
  searchIndex: 'DVD',
  responseGroup: 'ItemAttributes,Offers,Images'
}, function(err, results) {
  if (err) {
    console.log(err);
  } else {
    console.log(results);
  }
});

using ecmascript6 generators and co:

var co = require('co');

co(function *(){

  pulpFiction   = client.itemSearch({ keywords: 'Pulp fiction',   searchIndex: 'DVD'});
  killBill      = client.itemSearch({ keywords: 'Kill Bill',      searchIndex: 'DVD'});
  reservoirDogs = client.itemSearch({ keywords: 'Reservoir Dogs', searchIndex: 'DVD'});

  movies = yield [pulpFiction, killBill, reservoirDogs];
  console.log(movies);

})();

Search query options:

condition: availiable options - 'All', 'New', 'Used', 'Refurbished', 'Collectible'. Defaults to 'All'
keywords: Defaults to ''
responseGroup: You can use multiple values by separating them with comma (e.g responseGroup: 'ItemAttributes,Offers,Images'). Defaults to'ItemAttributes'
searchIndex: Defaults to 'All'.

Example

Setup your own server that doesn't require signatures and timestamp

var amazon = require('amazon-product-api'),
    koa = require('koa'),
    router = require('koa-router');

var app = koa();
app.use(router(app));


var client = amazon.createClient({
  awsTag: process.env.AWS_TAG,
  awsId: process.env.AWS_ID,
  awsSecret: process.env.AWS_SECRET
});


app.get('/amazon/:index', function* (){
  this.body = yield client.itemSearch({
    keywords: this.query.title,
    searchIndex: this.params.index,
    responseGroup: 'ItemAttributes,Offers,Images'
  });
});

app.listen(3000);

Working demo:
Search for Alien DVDs
Search for Streets of Rage videogame
Search for shoes

npm loves you