Node.js client for Amazon Product Advertising API
The major differences between this project and other implementations are:
- Item search can return an EcmaScript6 promise. (Check out a great article about ES6 promises)
- Item search is "yieldable". So it plays well with fantastic next-gen libs such as Koa and Co. See example
Install using npm:
npm install amazon-product-api
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({
director: 'Quentin Tarantino',
actor: 'Samuel L. Jackson',
searchIndex: 'DVD',
audienceRating: 'R',
responseGroup: 'ItemAttributes,Offers,Images'
}).then(function(results){
console.log(results);
}).catch(function(err){
console.log(err);
});
using a callback:
client.itemSearch({
director: 'Quentin Tarantino',
actor: 'Samuel L. Jackson',
searchIndex: 'DVD',
audienceRating: 'R',
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);
})();
You can add any available params for the itemSearch method.
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'.
itemPage: Defaults to '1'.
sort: Valid values include 'salesrank','psrank','titlerank','-price','price'.
domain: Defaults to 'webservices.amazon.com'.
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
using promises:
client.itemLookup({
idType: 'UPC',
itemId: '884392579524'
}).then(function(results) {
console.log(JSON.stringify(results));
}).catch(function(err) {
console.log(err);
});
using a callback:
client.itemLookup({
idType: 'UPC',
itemId: '635753490879',
responseGroup: 'ItemAttributes,Offers,Images'
}, function(err, results) {
if (err) {
console.log(err);
} else {
console.log(results);
}
});
You can add any available params for the ItemLookup method.
condition: availiable options - 'All', 'New', 'Used', 'Refurbished', 'Collectible'. Defaults to 'All'
idType: Type of item identifier used to look up an item. Availiable options - 'ASIN', 'SKU', 'UPC', 'EAN', 'ISBN'. Defaults to 'ASIN'.
includeReviewsSummary: availiable options - 'True','False'. Defaults to 'True'.
itemId: One or more (up to ten) positive integers that uniquely identify an item.
responseGroup: You can use multiple values by separating them with comma (e.g responseGroup: 'ItemAttributes,Offers,Images'). Defaults to'ItemAttributes'
searchIndex: Defaults to 'All'.
truncateReviewsAt: Defaults to '1000'. To return complete reviews, specify '0'.
variationPage: Defaults to 'All'.
domain: Defaults to 'webservices.amazon.com'.
using promises:
client.browseNodeLookup({
browseNodeId: '549726',
responseGroup: 'NewReleases'
}).then(function(results) {
console.log(results);
}).catch(function(err) {
console.log(err);
});
using a callback:
client.itemLookup({
browseNodeId: '549726',
responseGroup: 'NewReleases'
}, function(err, results) {
if (err) {
console.log(err);
} else {
console.log(results);
}
});
You can add any available params for the BrowseNodeLookup method.
browseNodeId: A positive integer assigned by Amazon that uniquely identifies a product category.
responseGroup: You can use multiple values by separating them with comma (e.g responseGroup: 'MostGifted,NewReleases,MostWishedFor,TopSellers'). Defaults to 'BrowseNodeInfo'