@mediavine/recombee-api-client
Version:
Node.js client (SDK) for easy use of the Recombee recommendation API
113 lines (94 loc) • 3.44 kB
JavaScript
var recombee = require('./../index.js');
var rqs = recombee.requests;
var errs = recombee.errors;
var client = new recombee.ApiClient('client-test', 'jGGQ6ZKa8rQ1zTAyxTc0EMn55YPF7FJLUtaMLhbsGxmvwxgTwXYqmUk5xVZFw98L', {'region': 'eu-west'});
var _setEnvironmentData = (() => {
let requests = new rqs.Batch([
new rqs.AddItem('entity_id'),
new rqs.AddUser('entity_id'),
new rqs.AddSeries('entity_id'),
new rqs.AddGroup('entity_id'),
new rqs.InsertToGroup('entity_id', 'item', 'entity_id'),
new rqs.InsertToSeries('entity_id', 'item', 'entity_id', 1),
new rqs.AddItemProperty('int_property', 'int'),
new rqs.AddItemProperty('str_property', 'string'),
new rqs.SetItemValues('entity_id', {'int_property': 42, 'str_property': 'hello'}),
new rqs.AddUserProperty('int_property', 'int'),
new rqs.AddUserProperty('str_property', 'string'),
new rqs.SetUserValues('entity_id', {'int_property': 42, 'str_property': 'hello'})
]);
return client.send(requests);
});
var _delay = ((t, v) => {
return new Promise(function(resolve) {
setTimeout(resolve.bind(null, v), t)
})
});
var _checkDbErased = (() => {
return client.send(new rqs.ListItems())
.then((resp) => {
return _setEnvironmentData();
})
.catch((err) => {
if (err instanceof errs.ResponseError && err.statusCode === 422) {
// Wait until DB is erased
return _delay(2000).then(() => {
return _checkDbErased();
});
}
throw err;
})
});
var setEnvironment = (() => {
return client.send(new rqs.ResetDatabase())
.then((resp) => {
return _checkDbErased();
})
});
var setInteractions = (() => {
let requests = new rqs.Batch([
new rqs.AddUser('user'),
new rqs.AddItem('item'),
new rqs.AddDetailView('user', 'item', {'timestamp': 0}),
new rqs.AddPurchase('user', 'item', {'timestamp': 0}),
new rqs.AddRating('user', 'item', -1, {'timestamp': 0}),
new rqs.AddCartAddition('user', 'item', {'timestamp': 0}),
new rqs.AddBookmark('user', 'item', {'timestamp': 0}),
new rqs.SetViewPortion('user', 'item',1, {'timestamp': 0})
]);
return client.send(requests);
});
var setRecommEntities = (() => {
const NUM = 100
const PROBABILITY_PURCHASED = 0.1
let users = Array.apply(0, Array(NUM)).map(function (_, i) {
return `user-${i}`;
});
let items = Array.apply(0, Array(NUM)).map(function (_, i) {
return `item-${i}`;
});
let purchases = [];
users.forEach((user) => {
let p = items.filter(() => Math.random() < PROBABILITY_PURCHASED);
p.forEach((item) => {purchases.push(new rqs.AddPurchase(user, item))});
});
return client.send(new rqs.Batch(users.map((u) => {return new rqs.AddUser(u)})))
.then(() => {
return client.send(new rqs.Batch([
new rqs.AddItemProperty('answer', 'int'),
new rqs.AddItemProperty('id2', 'string'),
new rqs.AddItemProperty('empty', 'string')]));
})
.then(() => {
return client.send(new rqs.Batch(items.map((itemId) => {
return new rqs.SetItemValues(itemId, {'answer': 42, 'id2': itemId}, {'cascadeCreate': true})})));
})
.then(() => {
return client.send(new rqs.Batch(purchases));
});
});
exports.client = client;
exports.setEnvironment = setEnvironment;
exports.setInteractions = setInteractions;
exports.setRecommEntities = setRecommEntities;