Skip to content

Commit 5c86254

Browse files
authored
Supports item filter for other sites. (#128)
* v2.7.7 * 2.8.7 * added deprecation message and update readme * fix item filter for diff sites * revert commit * fix lint
1 parent dfe3735 commit 5c86254

File tree

5 files changed

+66
-8
lines changed

5 files changed

+66
-8
lines changed

demo/finding.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const { clientId } = require('./credentials/index');
55

66
let ebay = new Ebay({
77
clientID: clientId,
8+
countryCode: 'EBAY-US'
89
});
910

1011
ebay.findItemsByCategory({
@@ -81,7 +82,12 @@ ebay.getVersion().then((data) => {
8182

8283
// Find ebay stores here https://www.ebay.com/sns
8384
// https://developer.ebay.com/devzone/finding/callref/findItemsIneBayStores.html
84-
ebay.findItemsIneBayStores({storeName: 'Battery Gallery'}).then((data) => {
85+
ebay.findItemsIneBayStores({
86+
storeName: 'Battery Gallery',
87+
SoldItemsOnly: true,
88+
MinPrice: '5.00',
89+
MaxPrice: '800.00',
90+
}).then((data) => {
8591
console.log(data);
8692
}, (error) => {
8793
console.log(error);

src/common-utils/currency.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"EBAY-AU": "AUD",
3+
"EBAY-ENCA": "CAD",
4+
"EBAY-GB": "GBP",
5+
"EBAY-DE": "EUR",
6+
"EBAY-ES": "EUR",
7+
"EBAY-FR": "EUR",
8+
"EBAY-IT": "EUR",
9+
"EBAY-IN": "INR",
10+
"EBAY-HK": "HKD",
11+
"EBAY-SG": "SGD",
12+
"EBAY-US": "USD"
13+
}

src/common-utils/index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict';
22
const { makeRequest } = require('../request');
3+
const currency = require('./currency.json');
34

45
const base64Encode = encodeData => {
56
const buff = Buffer.from(encodeData);;
@@ -15,9 +16,11 @@ const isString = (value)=>{
1516
* output will be keywords=iphone&itemFilter(0).name=Condition&itemFilter(0).value=3000&itemFilter(1).name=FreeShippingOnly&itemFilter(1).value=true&itemFilter(2).name=SoldItemsOnly&itemFilter(2).value=true
1617
* @param {Object} options
1718
*/
18-
const constructAdditionalParams = (options) => {
19+
function constructAdditionalParams(options){
1920
let params = '';
2021
let count = 0;
22+
let currencyKey = this ? this.options.globalID : 'EBAY-US';
23+
2124
for (let key in options) {
2225
if (options.hasOwnProperty(key)) {
2326
if (key === 'entriesPerPage' || key === 'pageNumber') {
@@ -36,6 +39,11 @@ const constructAdditionalParams = (options) => {
3639
else {
3740
params = `${params}itemFilter(${count}).name=${key}&
3841
itemFilter(${count}).value=${options[key]}&`;
42+
if(key === "MinPrice" || key === "MaxPrice"){
43+
params = `${params}itemFilter(${count}).paramName=Currency&
44+
itemFilter(${count}).paramValue=${currency[currencyKey]}&`;
45+
}
46+
3947
count += 1;
4048
}
4149
}

src/finding.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const findItemsByKeywords = function (options) {
1414
this.options.operationName = FIND_ITEMS_BY_KEYWORD;
1515
// support only keyword string.
1616
if (!options.keywords) options = { keywords: options };
17-
this.options.additionalParam = utils.constructAdditionalParams(options);
17+
this.options.additionalParam = utils.constructAdditionalParams.bind(this)(options);
1818
const url = urlObject.buildSearchUrl(this.options);
1919
return getRequest(url).then((data) => {
2020
return JSON.parse(data).findItemsByKeywordsResponse;
@@ -30,7 +30,7 @@ const findItemsByCategory = function (options) {
3030
if (!options) throw new Error('INVALID_REQUEST_PARMS --> Category ID is null or invalid');
3131
if (!options.categoryId) options = { categoryId: options };
3232
this.options.operationName = FIND_ITEMS_BY_CATEGORY;
33-
this.options.additionalParam = utils.constructAdditionalParams(options);
33+
this.options.additionalParam = utils.constructAdditionalParams.bind(this)(options);
3434
const url = urlObject.buildSearchUrl(this.options);
3535
return getRequest(url).then((data) => {
3636
return JSON.parse(data).findItemsByCategoryResponse;
@@ -47,7 +47,7 @@ const findCompletedItems = function (options) {
4747
if (!options) throw new Error('INVALID_REQUEST_PARMS --> Keyword or category ID are required.');
4848
if (!options.keywords && !options.categoryId) throw new Error('Keyword or category ID are required.');
4949
this.options.operationName = FIND_COMPLETED_ITEMS;
50-
this.options.additionalParam = utils.constructAdditionalParams(options);
50+
this.options.additionalParam = utils.constructAdditionalParams.bind(this)(options);
5151
const url = urlObject.buildSearchUrl(this.options);
5252
return getRequest(url).then((data) => {
5353
return JSON.parse(data).findCompletedItemsResponse;
@@ -64,7 +64,7 @@ const findCompletedItems = function (options) {
6464
const findItemsAdvanced = function (options) {
6565
if (!options) throw new Error('INVALID_REQUEST_PARMS --> check here for input fields https://developer.ebay.com/DevZone/finding/CallRef/findItemsAdvanced.html#Input');
6666
this.options.operationName = FIND_ITEMS_ADV;
67-
this.options.additionalParam = utils.constructAdditionalParams(options);
67+
this.options.additionalParam = utils.constructAdditionalParams.bind(this)(options);
6868
const url = urlObject.buildSearchUrl(this.options);
6969
return getRequest(url).then((data) => {
7070
return JSON.parse(data).findItemsAdvancedResponse;
@@ -91,7 +91,7 @@ const findItemsByProduct = function (options) {
9191
if (!options.productId) throw new Error('INVALID_REQUEST_PARMS --> Product ID is required.');
9292
const type = options.type ? options.type : 'ReferenceID';
9393
this.options.operationName = 'findItemsByProduct';
94-
this.options.additionalParam = utils.constructAdditionalParams(options);
94+
this.options.additionalParam = utils.constructAdditionalParams.bind(this)(options);
9595
const url = `${urlObject.buildSearchUrl(this.options)}&productId.@type=${type}`;
9696
return getRequest(url).then((data) => {
9797
return JSON.parse(data).findItemsByProductResponse;
@@ -102,8 +102,9 @@ const findItemsByProduct = function (options) {
102102
const findItemsIneBayStores = function (options) {
103103
if (!options) throw new Error('INVALID_REQUEST_PARMS --> Please enter the Valid input.');
104104
if (!options.storeName) throw new Error('INVALID_REQUEST_PARMS --> Store name is required.');
105+
options.globalId = this.options.globalID;
105106
this.options.operationName = FIND_EBAY_STORES;
106-
this.options.additionalParam = utils.constructAdditionalParams(options);
107+
this.options.additionalParam = utils.constructAdditionalParams.bind(this)(options);
107108
return getRequest(urlObject.buildSearchUrl(this.options)).then((data) => {
108109
return JSON.parse(data).findItemsIneBayStoresResponse;
109110
}, console.error // eslint-disable-line no-console

test/common.test.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,5 +76,35 @@ describe('test common util methods', () => {
7676
expect(constructAdditionalParams(options)).to.be.equal(expectedParam);
7777
expect(constructAdditionalParams(optionsWithPagination)).to.be.equal(expectedPaginationParam);
7878
});
79+
80+
it('test constructAdditionalParams with Maxprice and Minprice params', () => {
81+
const expectedParam = 'keywords=iphone%206s&categoryId=111&sortOrder=PricePlusShippingLowest&itemFilter(0).name=Condition&itemFilter(0).value=3000&itemFilter(1).name=SoldItemsOnly&itemFilter(1).value=true&storeName=addidas%20store&itemFilter(2).name=MinPrice&itemFilter(2).value=100.00&itemFilter(2).paramName=Currency&itemFilter(2).paramValue=USD&itemFilter(3).name=MaxPrice&itemFilter(3).value=200.00&itemFilter(3).paramName=Currency&itemFilter(3).paramValue=USD';
82+
const options = {
83+
keywords: 'iphone 6s',
84+
categoryId: '111',
85+
sortOrder: 'PricePlusShippingLowest',
86+
Condition: 3000,
87+
SoldItemsOnly: true,
88+
storeName: 'addidas store',
89+
MinPrice: '100.00',
90+
MaxPrice: '200.00'
91+
};
92+
expect(constructAdditionalParams(options)).to.be.equal(expectedParam);
93+
});
94+
95+
it('test constructAdditionalParams with Maxprice and Minprice params with diff site', () => {
96+
const expectedParam = 'keywords=iphone%206s&categoryId=111&sortOrder=PricePlusShippingLowest&itemFilter(0).name=Condition&itemFilter(0).value=3000&itemFilter(1).name=SoldItemsOnly&itemFilter(1).value=true&storeName=addidas%20store&itemFilter(2).name=MinPrice&itemFilter(2).value=100.00&itemFilter(2).paramName=Currency&itemFilter(2).paramValue=GBP&itemFilter(3).name=MaxPrice&itemFilter(3).value=200.00&itemFilter(3).paramName=Currency&itemFilter(3).paramValue=GBP';
97+
const options = {
98+
keywords: 'iphone 6s',
99+
categoryId: '111',
100+
sortOrder: 'PricePlusShippingLowest',
101+
Condition: 3000,
102+
SoldItemsOnly: true,
103+
storeName: 'addidas store',
104+
MinPrice: '100.00',
105+
MaxPrice: '200.00'
106+
};
107+
expect(constructAdditionalParams.bind({options: {globalID: 'EBAY-GB'}})(options)).to.be.equal(expectedParam);
108+
});
79109
});
80110
});

0 commit comments

Comments
 (0)