bestchoice
v0.0.5
Published
Self Learning Weighted Multivariate Testing Module
Downloads
3
Maintainers
Readme
bestchoice.js
Self Learning Weighted Multivariate Testing Module
How to use
Type in terminal to install
npm install bestchoice
In your index.js and add
var bc = require('bestchoice');
Campaign Managment Example Code
Adding a new campaign
bc.addCampaign('t00000001',
'http://www.test1.com/register',
['http://www.test1.com/register/a',
'http://www.test1.com/register/b',
'http://www.test1.com/register/c',
'http://www.test1.com/register/d'],
0.1,
1);
Removing a campaign
bc.removeCampaign('t00000001');
Getting all availible campaigns Returns all running campaigns as Objects
bc.getCampaigns();
Saving all availible campaigns as JSON Returns all running campaigns
var data = bc.getCampaigns();
Loading previously computed campaigns as a current stack
bc.loadCampaign(data);
Campaign Managment Example Code
First visit. Supply with campaign ID and path name. Returns page variant to use and unique ID to use as a Cookie.
bc.getPage('t00000001', 'http://www.test1.com/register');
Conversion trigger. Supply with campaign ID, path name, cookie and the amount of reward between 0 and 1.
bc.getPage('t00000001', 'http://www.test2.com/register', 'unique cookie');
Express Example
'use strict';
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
var bc = require('bestchoice');
app.use(cookieParser());
bc.dictionary = {
'http://www.test1.com/register': 't00000001',
'http://localhost:3000/register': 't00000001'
};
bc.addCampaign('t00000001',
'http://localhost:3000/register',
['http://localhost:3000/register/a',
'http://localhost:3000/register/b',
'http://localhost:3000/register/c'
],
0.1,
30); // expire every 30 minutes
setInterval(function() {
bc.updateExpiredVisits("t00000001");
}, 30000); // update every 30 minutes
app.get('/', function(req, res) {
res.send('Locked and Loaded');
});
app.get('/register', function(req, res) {
var cookie = req.cookies.bc;
var url = req.protocol + '://' + req.get('host') + req.originalUrl;
var campaign = bc.dictionary[url];
var get = bc.getPage(bc.dictionary[url], url, cookie);
if (cookie === undefined) {
res.cookie('bc', get, {
maxAge: 3600 * 1000,
httpOnly: true
});
}
res.redirect(get.pageVariant);
});
app.get('/register/:variant', function(req, res) {
var campaign = req.cookies.bc.campaignID;
var variant = req.cookies.bc.pageVariant;
res.send('Variant Page');
});
app.get('/convert', function(req, res) {
var params = req.cookies.bc;
var cookie = params.cookie;
var campaign = req.cookies.bc.campaignID;
var variant = req.cookies.bc.pageVariant;
bc.registerConversion(campaign, variant, req.cookies.bc.cookie, 1);
res.send('Converted');
});
app.get('/results', function(req, res) {
res.send(JSON.stringify(bc.getCampaigns()));
});
app.listen(3000, function() {
console.log('Example app listening on port 3000!');
});