Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,7 @@
<!--ENTRYINSERT-->

## 1.0.0
* Initial Version of Product Advertising API 5.0 NodeJS SDK
* Initial Version of Product Advertising API 5.0 NodeJS SDK

## 1.2.2
* OffersV2 launched (with documentation)
161 changes: 0 additions & 161 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,161 +0,0 @@
# Product Advertising API 5.0 SDK for NodeJS (v1)

[![NPM](https://nodei.co/npm/paapi5-nodejs-sdk.svg?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/paapi5-nodejs-sdk/)

[![Version](https://badge.fury.io/js/paapi5-nodejs-sdk.svg)](http://badge.fury.io/js/paapi5-nodejs-sdk) [![npm](https://img.shields.io/npm/dt/paapi5-nodejs-sdk.svg)](https://www.npmjs.com/package/paapi5-nodejs-sdk)

This repository contains the official Product Advertising API 5.0 NodeJS SDK called **paapi5-nodejs-sdk** that allows you to access the [Product Advertising API](https://webservices.amazon.com/paapi5/documentation/index.html) from your NodeJS app.

## Installation

### For [Node.js](https://nodejs.org/)

The Product Advertising API NodeJS SDK can be installed via [npm](https://www.npmjs.com/package/paapi5-nodejs-sdk):

```shell
npm install paapi5-nodejs-sdk --save
```

You should now be able to `require('paapi5-nodejs-sdk')` in javascript files.

### For browser

The library also works in the browser environment via npm and [browserify](http://browserify.org/). After following
the above steps with Node.js and installing browserify with `npm install -g browserify`,
perform the following (assuming *main.js* is your entry file, that's to say your javascript file where you actually
use this library):

```shell
browserify main.js > bundle.js
```

Then include *bundle.js* in the HTML pages.

### Webpack Configuration

Using Webpack you may encounter the following error: "Module not found: Error:
Cannot resolve module", most certainly you should disable AMD loader. Add/merge
the following section to your webpack config:

```javascript
module: {
rules: [
{
parser: {
amd: false
}
}
]
}
```
## Getting Started

Please follow the [installation](#installation) instruction and execute the following JS code:

Simple example for [SearchItems](https://webservices.amazon.com/paapi5/documentation/search-items.html) to discover Amazon products with the keyword 'Harry Potter' in All categories:

```javascript
var ProductAdvertisingAPIv1 = require('paapi5-nodejs-sdk');

var defaultClient = ProductAdvertisingAPIv1.ApiClient.instance;

// Specify your credentials here. These are used to create and sign the request.
defaultClient.accessKey = '<YOUR ACCESS KEY>';
defaultClient.secretKey = '<YOUR SECRET KEY>';

/**
* Specify Host and Region to which you want to send the request to.
* For more details refer:
* https://webservices.amazon.com/paapi5/documentation/common-request-parameters.html#host-and-region
*/
defaultClient.host = 'webservices.amazon.com';
defaultClient.region = 'us-east-1';

var api = new ProductAdvertisingAPIv1.DefaultApi();

/**
* The following is a sample request for SearchItems operation.
* For more information on Product Advertising API 5.0 Operations,
* refer: https://webservices.amazon.com/paapi5/documentation/operations.html
*/
var searchItemsRequest = new ProductAdvertisingAPIv1.SearchItemsRequest();

/** Enter your partner tag (store/tracking id) and partner type */
searchItemsRequest['PartnerTag'] = '<YOUR PARTNER TAG>';
searchItemsRequest['PartnerType'] = 'Associates';

// Specify search keywords
searchItemsRequest['Keywords'] = 'Harry Potter';

/**
* Specify the category in which search request is to be made.
* For more details, refer:
* https://webservices.amazon.com/paapi5/documentation/use-cases/organization-of-items-on-amazon/search-index.html
*/
searchItemsRequest['SearchIndex'] = 'All';

// Specify the number of items to be returned in search result
searchItemsRequest['ItemCount'] = 1;

/**
* Choose resources you want from SearchItemsResource enum
* For more details, refer: https://webservices.amazon.com/paapi5/documentation/search-items.html#resources-parameter
*/
searchItemsRequest['Resources'] = ['Images.Primary.Medium', 'ItemInfo.Title', 'Offers.Listings.Price'];


var callback = function (error, data, response) {
if (error) {
console.log('Error calling PA-API 5.0!');
console.log('Printing Full Error Object:\n' + JSON.stringify(error, null, 1));
console.log('Status Code: ' + error['status']);
if (error['response'] !== undefined && error['response']['text'] !== undefined) {
console.log('Error Object: ' + JSON.stringify(error['response']['text'], null, 1));
}
} else {
console.log('API called successfully.');
var searchItemsResponse = ProductAdvertisingAPIv1.SearchItemsResponse.constructFromObject(data);
console.log('Complete Response: \n' + JSON.stringify(searchItemsResponse, null, 1));
if (searchItemsResponse['SearchResult'] !== undefined) {
console.log('Printing First Item Information in SearchResult:');
var item_0 = searchItemsResponse['SearchResult']['Items'][0];
if (item_0 !== undefined) {
if (item_0['ASIN'] !== undefined) {
console.log('ASIN: ' + item_0['ASIN']);
}
if (item_0['DetailPageURL'] !== undefined) {
console.log('DetailPageURL: ' + item_0['DetailPageURL']);
}
if (item_0['ItemInfo'] !== undefined && item_0['ItemInfo']['Title'] !== undefined && item_0['ItemInfo']['Title']['DisplayValue'] !== undefined) {
console.log('Title: ' + item_0['ItemInfo']['Title']['DisplayValue']);
}
if (item_0['Offers'] !== undefined && item_0['Offers']['Listings'] !== undefined && item_0['Offers']['Listings'][0]['Price'] !== undefined && item_0['Offers']['Listings'][0]['Price']['DisplayAmount'] !== undefined) {
console.log('Buying Price: ' + item_0['Offers']['Listings'][0]['Price']['DisplayAmount']);
}
}
}
if (searchItemsResponse['Errors'] !== undefined) {
console.log('Errors:');
console.log('Complete Error Response: ' + JSON.stringify(searchItemsResponse['Errors'], null, 1));
console.log('Printing 1st Error:');
var error_0 = searchItemsResponse['Errors'][0];
console.log('Error Code: ' + error_0['Code']);
console.log('Error Message: ' + error_0['Message']);
}
}
};

try {
api.searchItems(searchItemsRequest, callback);
} catch (ex) {
console.log('Exception: ' + ex);
}
```

Complete documentation, installation instructions, and examples are available [here](https://webservices.amazon.com/paapi5/documentation/index.html).

## License

This SDK is distributed under the
[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0),
see LICENSE.txt and NOTICE.txt for more information.
37 changes: 23 additions & 14 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,38 +1,47 @@
{
"name": "paapi5-nodejs-sdk",
"version": "1.1.0",
"version": "1.2.2",
"description": "ProductAdvertisingAPI 5.0 NodeJS SDK",
"license": "Apache-2.0",
"main": "src/index.js",
"scripts": {
"test": "./node_modules/mocha/bin/mocha --recursive",
"lint": "eslint sampleGetBrowseNodesApi.js sampleGetItemsApi.js sampleSearchItemsApi.js sampleGetVariationsApi.js src/auth/*.js"
},
"author": {
"name": "Product Advertising API",
"email": "",
"email": "inquire.silvestro@gmail.com",
"url": "https://webservices.amazon.com/paapi5/documentation/index.html"
},
"homepage": "https://github.com/wusoma/paapi5-nodejs-sdk",
"license": "Apache-2.0",
"homepage": "https://github.com/silvestrodecaro/paapi5-nodejs-sdk",
"repository": {
"type": "git",
"url": "https://github.com/wusoma/paapi5-nodejs-sdk"
"url": "https://github.com/silvestrodecaro/paapi5-nodejs-sdk"
},
"browser": {
"fs": false
},
"dependencies": {
"superagent": "^3.8.3",
"crypto-js": "^3.1.9-1"
"superagent": "10.2.0",
"crypto-js": "^4.2.0"
},
"devDependencies": {
"mocha": "~2.3.4",
"sinon": "1.17.3",
"expect.js": "~0.3.1"
"eslint": "^9.0.0",
"expect.js": "~0.3.1",
"mocha": "^11.1.0",
"sinon": "20.0.0"
},
"keywords": [
"amazon",
"pa-api",
"paapi",
"paapi5.0",
"paapi5",
"paapi5-nodejs-sdk",
"getitems",
"searchitems",
"getvariations",
"getbrowsenodes",
"ProductAdvertisingAPI"
],
"_resolved": "https://registry.npmjs.org/paapi5-nodejs-sdk/-/paapi5-nodejs-sdk-1.0.1.tgz",
"_integrity": "sha512-mUAkbJBUTorNCxLRDzzsEL1HO9+Oh5sEArmndex81JXIzlMQLbmPjCKw6rbWXYSUJCswRKBPHf3ZqnSfZOJACg==",
"_from": "paapi5-nodejs-sdk@1.0.1"
]
}
67 changes: 37 additions & 30 deletions sampleGetBrowseNodesApi.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,27 +68,22 @@ getBrowseNodesRequest['Resources'] = ['BrowseNodes.Ancestor', 'BrowseNodes.Child
function parseResponse(browseNodesResponseList) {
var mappedResponse = {};
for (var i in browseNodesResponseList) {
mappedResponse[browseNodesResponseList[i]['Id']] = browseNodesResponseList[i];
if (browseNodesResponseList.hasOwnProperty(i)) {
mappedResponse[browseNodesResponseList[i]['Id']] = browseNodesResponseList[i];
}
}
return mappedResponse;
}

var callback = function (error, data, response) {
if (error) {
console.log('Error calling PA-API 5.0!');
console.log('Printing Full Error Object:\n' + JSON.stringify(error, null, 1));
console.log('Status Code: ' + error['status']);
if (error['response'] !== undefined && error['response']['text'] !== undefined) {
console.log('Error Object: ' + JSON.stringify(error['response']['text'], null, 1));
}
} else {
console.log('API called successfully.');
var getBrowseNodesResponse = ProductAdvertisingAPIv1.GetBrowseNodesResponse.constructFromObject(data);
console.log('Complete Response: \n' + JSON.stringify(getBrowseNodesResponse, null, 1));
if (getBrowseNodesResponse['BrowseNodesResult'] !== undefined) {
console.log('Printing all browse node information in BrowseNodesResult:');
var response_list = parseResponse(getBrowseNodesResponse['BrowseNodesResult']['BrowseNodes']);
for (var i in getBrowseNodesRequest['BrowseNodeIds']) {
function onSuccess(data) {
console.log('API called successfully.');
var getBrowseNodesResponse = ProductAdvertisingAPIv1.GetBrowseNodesResponse.constructFromObject(data);
console.log('Complete Response: \n' + JSON.stringify(getBrowseNodesResponse, null, 1));
if (getBrowseNodesResponse['BrowseNodesResult'] !== undefined) {
console.log('Printing all browse node information in BrowseNodesResult:');
var response_list = parseResponse(getBrowseNodesResponse['BrowseNodesResult']['BrowseNodes']);
for (var i in getBrowseNodesRequest['BrowseNodeIds']) {
if (getBrowseNodesRequest['BrowseNodeIds'].hasOwnProperty(i)) {
var browseNodeId = getBrowseNodesRequest['BrowseNodeIds'][i];
console.log('\nPrinting information about the browse node with Id: ' + browseNodeId);
if (browseNodeId in response_list) {
Expand All @@ -109,19 +104,31 @@ var callback = function (error, data, response) {
}
}
}
if (getBrowseNodesResponse['Errors'] !== undefined) {
console.log('\nErrors:');
console.log('Complete Error Response: ' + JSON.stringify(getBrowseNodesResponse['Errors'], null, 1));
console.log('Printing 1st Error:');
var error_0 = getBrowseNodesResponse['Errors'][0];
console.log('Error Code: ' + error_0['Code']);
console.log('Error Message: ' + error_0['Message']);
}
}
};
if (getBrowseNodesResponse['Errors'] !== undefined) {
console.log('\nErrors:');
console.log('Complete Error Response: ' + JSON.stringify(getBrowseNodesResponse['Errors'], null, 1));
console.log('Printing 1st Error:');
var error_0 = getBrowseNodesResponse['Errors'][0];
console.log('Error Code: ' + error_0['Code']);
console.log('Error Message: ' + error_0['Message']);
}
}

try {
api.getBrowseNodes(getBrowseNodesRequest, callback);
} catch (ex) {
console.log("Exception: " + ex);
function onError(error) {
console.log('Error calling PA-API 5.0!');
console.log('Printing Full Error Object:\n' + JSON.stringify(error, null, 1));
console.log('Status Code: ' + error['status']);
if (error['response'] !== undefined && error['response']['text'] !== undefined) {
console.log('Error Object: ' + JSON.stringify(error['response']['text'], null, 1));
}
}

api.getBrowseNodes(getBrowseNodesRequest).then(
function(data) {
onSuccess(data);
},
function(error) {
onError(error);
}
);
Loading