amazon-associate
Version:
amazon-associate is a simple interface to amazon associate reports for nodejs
70 lines (58 loc) • 2.34 kB
text/coffeescript
_ = require 'underscore'
moment = require 'moment'
Client = require './client'
ItemParser = require './item-parser'
ReportParser = require './report-parser'
parseResponse = (res, parser, cb) ->
parser.on 'error', (err) -> cb err
parser.on 'end', (result) -> cb null, result
res.on 'error', (err) -> cb err
res.on 'data', (data) -> parser.write data
res.on 'end', -> parser.close()
module.exports = class
debug: (args...) -> console.error 'amazon-associate:', args... if .debug
constructor: () ->
throw new Error 'missing associateId option' if not .associateId?
throw new Error 'missing password option' if not .password?
_.defaults ,
host: 'assoc-datafeeds-eu.amazon.com'
reportPath: '/datafeed/listReports'
username: .associateId
debug: false
clientOptions =
debug: .debug
credentials: {}
clientOptions.credentials[.host] =
type: 'digest'
username: .username
password: .password
= new Client clientOptions
getReportUrl: (date, type) ->
datestring = moment(date).format 'YYYYMMDD'
filename = "#{@options.associateId}-#{type}-report-#{datestring}.xml.gz"
"/datafeed/getReport?filename=#{filename}"
_getItems: (date, type, cb) ->
.request {
https: true
host: .host
path: date, type
unzip: true
}, (err, res) ->
return cb err if err?
datestring = moment(date).format 'YYYY-MM-DD'
if res.headers['content-length'] is '0'
return cb new Error "no #{type} for date #{datestring}"
parser = new ItemParser
parseResponse res, parser, cb
getOrders: (date, cb) -> date, 'orders', cb
getEarnings: (date, cb) -> date, 'earnings', cb
getReports: (cb) ->
.request {
https: true
host: .host
path: .reportPath
unzip: false
}, (err, res) ->
return cb err if err?
parser = new ReportParser
parseResponse res, parser, cb