diff --git a/lib/index.js b/lib/index.js index 591b114..7deebba 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,4 +1,6 @@ -var https = require('https'), +var + _ = require('underscore'), + https = require('https'), http = require('http'), querystring = require('querystring'), xml2js = require('xml2js'), @@ -19,8 +21,9 @@ var Madmimi = module.exports = function (username, api_key, debug) { var self = this; - self.username = username, - self.api_key = api_key; + self.username = username; + self.api_key = api_key; + self.request = function(requestOptions, body, cb) { @@ -172,13 +175,88 @@ var Madmimi = module.exports = function (username, api_key, debug) { }; - self.addToList = function(email, listName, cb) { + self.getAllLists = function (cb) { + options = { + username: self.username, + api_key: self.api_key + }; + + optionsParameterized = querystring.stringify(options, "&", "="); + + var requestOptions = { + host: 'api.madmimi.com', + port: '443', + path: '/audience_lists/lists.xml' +'?' + optionsParameterized, + method: 'GET', + }; + + xml_parser_cb = function (data) { + logger("promotions_xml: " + data); + + var parser = new xml2js.Parser(); + + parser.addListener('end', function(result) { + logger("result_js:"); + logger(result); + var lists = result.lists.list; + + _.each(lists, function (value, key) { + lists[key] = value['$']; + }); + + cb(lists); + }); + + parser.parseString(data); + + }; + + self.request(requestOptions, optionsParameterized, xml_parser_cb); + } + + self.getListMembers = function (listName, cb) { + options = { + username: self.username, + api_key: self.api_key, + per_page: 100, + page: 1, + order: 'email' + }; + + optionsParameterized = querystring.stringify(options, "&", "="); + + var requestOptions = { + host: 'api.madmimi.com', + port: '443', + path: '/audience_lists/' + listName + '/members.json' + + '?' + optionsParameterized, + method: 'GET', + }; + + self.request(requestOptions, optionsParameterized, function (data) { + data = JSON.parse(data); + cb(data); + }); + } + + self.addToList = function(listName, opts_or_email, cb) { + cb = cb || function () {}; + listName = listName.replace('/', ''); + listName = listName.replace(' ', ' '); + var options = { - username : self.username, - api_key : self.api_key, - email : email, + username: self.username, + api_key: self.api_key }; + if (_.isString(opts_or_email)) { + options.email = opts_or_email; + } else if (_.isObject(opts_or_email)){ + options = _.extend(options, opts_or_email); + } else { + return logger('Invalid arguments. Use: addToList(opts, listName, cb)'); + } + optionsParameterized = querystring.stringify(options, "&", "="); @@ -189,7 +267,20 @@ var Madmimi = module.exports = function (username, api_key, debug) { method: 'POST', }; - self.request(requestOptions, optionsParameterized, cb); + self.request(requestOptions, optionsParameterized, function (res_string) { + if (res_string.indexOf('does not exist') !== -1) { + self.addNewList(listName, function () { + self.addToList(listName, opts_or_email, cb); + }); + return; + } else if (res_string.indexOf('could not be added') === -1) { + cb(null); + } else { + cb({ + error: {msg:res_string, email:options.email, list:listName} + }); + } + }); }; diff --git a/package.json b/package.json index 0b7248a..4395d14 100644 --- a/package.json +++ b/package.json @@ -3,19 +3,27 @@ "description": "A client for the mad mimi api", "version": "0.1.7", "homepage": "www.api.madmimi.com", - "repository": "git://github.com/garrensmith/Madmimi-node.git", - "author": "Garren Smith (www.garrensmith.com)", + "repository": "git://github.com/ksaitor/Madmimi-node.git", + "authors": [ + "Garren Smith (www.garrensmith.com)", + "Raman Shalupau (eventmetrics.co)" + ], "main": "lib/index.js", "directories": { "lib": "./lib" }, - "keywords": ["madmimi", "client", "api"], + "keywords": [ + "madmimi", + "client", + "api" + ], "scripts": { "test": "Jody" }, - "dependencies" : { - "xml2js":"*", - "jade": "*" + "dependencies": { + "jade": "*", + "underscore": "^1.6.0", + "xml2js": "*" }, "engines": { "node": ">=0.4.0"