-
Notifications
You must be signed in to change notification settings - Fork 0
/
package.json
40 lines (40 loc) · 8.35 KB
/
package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
"name": "custom-ebay-api",
"description": "eBay API Client",
"version": "0.1.1",
"homepage": "https://github.com/newleafdigital/nodejs-ebay-api",
"author": {
"name": "Ben Buckman",
"email": "ben@newleafdigital.com",
"url": "http://newleafdigital.com"
},
"repository": {
"type": "git",
"url": "git://github.com/newleafdigital/nodejs-ebay-api.git"
},
"main": "index.js",
"dependencies": {
"async": "~0.1.22",
"request": "~2.34.0",
"underscore": "~1.3.3",
"xml": "0.0.7",
"xml2js": "~0.1.14"
},
"devDependencies": {
"grunt": "^1.0.1"
},
"optionalDependencies": {},
"engines": {
"node": ">= 0.6"
},
"readme": "eBay API client for Node.js\r\n===============\r\n\r\n## Background\r\n\r\nThis was built to power the \"eBay Picks\" section of [AntiquesNearMe.com](http://antiquesnearme.com). It can currently query the FindingService, MerchandisingService, and Shopping API via JSON-GET requests, and the Trading API via XML-POST. Other services can be added as needed. (Pull requests welcome!)\r\n\r\n## To use\r\n\r\n`npm install ebay-api`\r\n\r\n`var ebay = require('ebay-api');`\r\n\r\n(See the examples)\r\n\r\n\r\n## A word on the eBay APIs\r\n\r\neBay has an enormous collection of APIs built over the years. Enter the labyrinth here: [http://developer.ebay.com](http://developer.ebay.com) or here: [https://www.x.com/developers/ebay/products](https://www.x.com/developers/ebay/products)\r\n\r\nSign up for an API key here: [https://publisher.ebaypartnernetwork.com/PublisherToolsAPI](https://publisher.ebaypartnernetwork.com/PublisherToolsAPI)\r\n(You'll need a key to run the examples.)\r\n\r\nMake sure to obey the eBay API [License](http://developer.ebay.com/join/licenses/individual/) and [Terms](https://www.x.com/developers/ebay/programs/affiliates/terms) when using this library.\r\n\r\n\r\n## Why use Node.js to do this?\r\n\r\nNode.js is great at running HTTP requests asynchronously. If each request takes 5 seconds to run and 5 seconds to parse, for example, dozens of requests can run in parallel and only take 10 seconds total, instead of 10 seconds for each. (This module uses [restler](https://github.com/danwrong/restler) for the HTTP handling and the [async](https://github.com/caolan/async) library for flow control.)\r\n\r\nNode.js speaks JSON natively, so the response data from the JSON APIs can be very easily parsed in code, or dumped into MongoDB.\r\n\r\nJavascript is a little insane and a lot of fun.\r\n\r\n\r\n## Methods\r\n\r\n### `ebayApiGetRequest(options, callback)`\r\n\r\nMake an individual request to a GET service.\r\n`options` must contain:\r\n\r\n- serviceName: e.g. 'FindingService'\r\n- opType: e.g. 'findItemsAdvanced'\r\n- appId: your eBay API application ID\r\n\r\nand can optionally contain:\r\n\r\n- params: (see examples and API documentation)\r\n- filters: (see examples and API documentation)\r\n- reqOptions: passed to the request, e.g. with custom headers\r\n- parser: function which takes the response data and extracts items (or other units depending on the query). Defaults to `parseItemsFromResponse`. To return the raw data, pass in a function like `function(data, callback) { callback(null, data); }`.\r\n- sandbox: true/false (default false = production). May need to add additional endpoint URLs to the code as needed.\r\n\r\n`callback` gets `(error, items)` or `(error, data)` depending on the parser.\r\n\r\n\r\n### `paginateGetRequest(options, callback)`\r\n\r\nMake a multi-page request to a GET service, running them in parallel and combining the results.\r\n\r\n`options` contains the same parameters as `ebayApiGetRequest`, plus:\r\n\r\n- pages: # of pages to query\r\n- perPage: items per page\r\n\r\n`parser` here needs to return an array, so the results can be concatenated and passed to `callback`.\r\n\r\nNote: Because the pages all run in parallel, they can cause spikes on CPU and network activity. In the future, I might switch this to using an [async](https://github.com/caolan/async) `queue` (instead of `forEach`) with a variable concurrency. (A `forEachSeries` can also be used, but negates the purpose of running the requests asynchronously.)\r\n\r\n`callback` gets `(error, items)`\r\n\r\n\r\n### `parseItemsFromResponse(data, callback)`\r\n\r\nDefault parser, takes the response from an API request and parses items or other units per request type.\r\nEach response type is a little different, so this needs to be built out further.\r\nIs used as the default `parser` option for `paginateGetRequest`.\r\n\r\n`callback` gets `(error, items)` where `items` are the items parsed from `data`.\r\n\r\n\r\n### `ebayApiPostXmlRequest(options, callback)`\r\n\r\nMake an individual request to a POST-XML service.\r\n`options` must contain:\r\n\r\n- serviceName: e.g. 'FindingService'\r\n- opType: e.g. 'findItemsAdvanced'\r\n\r\nand can optionally contain:\r\n\r\n- (for authentication)\r\n - devName\r\n - cert\r\n - appName\r\n\r\n- params (for the XML input)\r\n - (Note: for `GetCategories` and possibly other services, pass the auth token as `params.authToken`, not `RequesterCredentials.eBayAuthToken` as indicated in the API documentation.)\r\n - See `buildXmlInput()` for ways to structure this.\r\n\r\n- reqOptions: headers and other options to pass to the request\r\n - IMPT: Some parameters for these endpoints, such as _SITE-ID_ and _authToken_, should go into the headers, not into `params`. See the API documentation.\r\n- sandbox: true/false (default false = production). May need to add additional endpoint URLs to the code as needed.\r\n- rawXml: boolean. If `true`, passes the raw XML response back to callback. `false` means XML is converted to JSON (for consistency with other APIs). Default is `false`/JSON.\r\n\r\n`callback` gets `(error, data)`. (There is not currently a default parser for these endpoints.)\r\n\r\n\r\n## Helpers\r\n\r\n### `flatten(obj)`\r\n\r\nSimplifies the JSON format of the API responses:\r\n\r\n- Single-element arrays and objects are flatted to their key:value pair.\r\n- The structure of the format `{ @key:KEY, __value__:VALUE }` is flattened to its key:value pair.\r\n\r\nIts purpose is to make the data easier to handle in code, and to model/query in MongoDB.\r\n\r\nRuns synchronously, returns flattened object.\r\n\r\n\r\n### `ItemFilter(name, value, paramName, paramValue)`\r\n\r\nA class constructor to simplify creating filters. (See the examples)\r\n\r\n\r\n### `checkAffiliateUrl(url)`\r\n\r\nIf you want your affiliate codes included in returned items (see the examples for how to do that), use this to verify that the URLs are of the right format.\r\ne.g. `checkAffiliateUrl(item.viewItemURL)`\r\n\r\nReturns boolean.\r\n\r\n\r\n### `getLatestApiVersions(callback)`\r\n\r\nGet the version numbers of the APIs that make their version available.\r\n\r\n\r\n## Examples\r\n\r\nSee the /examples directory. There are two examples, one with a single-page `findItemsByKeywords` request, the other a paginated `findItemsAdvanced` request. It should be reasonably apparent from the examples how these functions are used.\r\nTo run the examples, you need to add your own app key (I don't want my keys to be disabled for abuse!) - you can get one [here](https://publisher.ebaypartnernetwork.com/PublisherToolsAPI).\r\n\r\n\r\n## Possible Roadmap\r\n\r\n1. Add more services and generally expand the functionality.\r\n2. Add more links related to relevant eBay documentation.\r\n3. Add a generic [Mongoose](http://mongoosejs.com) model. (Mine is currently too filled with custom business logic to be included.)\r\n4. Switch from `async.forEach` to `async.queue` for more fine-grained concurrency control.\r\n5. Suggestions...?\r\n\r\n\r\n## Credits\r\n\r\nCreated by Ben Buckman of [New Leaf Digital](http://newleafdigital.com), an independent dev/consulting shop specializing in Node.js, Drupal, mapping, system architecture, and general \"full stack\" development. Ben writes a [dev blog](http://benbuckman.net) about Node.js and many other subjects.\r\n\r\nBen's other hat is co-founder and CTO of [Antiques Near Me](http://antiquesnearme.com), and this library was created for use there.\r\n\r\nEnjoy!\r\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/newleafdigital/nodejs-ebay-api/issues"
},
"_id": "custom-ebay-api@0.1.1",
"scripts": {},
"_shasum": "e9f0ab50c2e24c6a753c02b40debcc81f8f68d75",
"_from": "custom_modules\\nodejs-ebay-api",
"_resolved": "file:custom_modules\\nodejs-ebay-api"
}