Skip to content

Commit

Permalink
Merge pull request #309 from sonobi/master
Browse files Browse the repository at this point in the history
#309 Add Sonobi Adapter - closes #90
  • Loading branch information
Nathan Guisinger committed Apr 8, 2016
2 parents 90e54e1 + 5bcae1a commit 2c35420
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 0 deletions.
14 changes: 14 additions & 0 deletions integrationExamples/gpt/pbjs_example_gpt.html
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,20 @@
tagid: '123' // <String> tag Id
}
},
{
bidder: 'sonobi', // New format
params: {
dom_id: 'PER SLOT', // <String> dom Id
ad_unit:'PER SLOT' // <String> ad unit code
}
},
{
bidder: 'sonobi', // Old account format
params: {
dom_id: 'PER SLOT', // <String> dom Id
placement_id:'PER SLOT' // <String> placement Id
}
},
{
bidder: 'nginad',
params: {
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"pubmatic",
"pulsepoint",
"rubicon",
"sonobi",
"sovrn",
"springserve",
"triplelift",
Expand Down
76 changes: 76 additions & 0 deletions src/adapters/sonobi.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
var bidfactory = require('../bidfactory.js');
var bidmanager = require('../bidmanager.js');
var adloader = require('../adloader.js');
var utils = require('../utils');

var SonobiAdapter = function SonobiAdapter(){
var test = false; // tag tester = true || false
var cb_map = {};

function _phone_in(params){
var trinity = 'https://apex.go.sonobi.com/trinity.js?key_maker=';
var bids = params.bids || [];
adloader.loadScript(trinity + JSON.stringify(_keymaker(bids)) + '&cv=' + _operator(), null);
}

function _keymaker(bids){ // Make keys
var keyring = {};
utils._each(bids, function(o){
var sizes = [];
utils._each(o.sizes, function(size){
sizes.push(size.join('x'));
});
sizes = sizes.toString();
if (!!o.params.ad_unit && o.params.ad_unit.length > 0) {
// Cypher
keyring[o.params.ad_unit + '|' + o.params.dom_id] = sizes;
cb_map[o.params.ad_unit + '|' + o.params.dom_id] = o.placementCode;
} else if (!!o.params.placement_id && o.params.placement_id.length > 0) {
// Morpheus
keyring[o.params.dom_id] = o.params.placement_id + (test ? '-test' : '') + '|' + sizes;
cb_map[o.params.dom_id] = o.placementCode;
} else {
utils.logError('sonobi unable to bid: Improper parameters for ' + o.placementCode);
}
});
return keyring;
}

function _operator(){ // Uniqify callbacks
var uniq = "cb" + utils.getUniqueIdentifierStr();
window[uniq] = _trinity;
return uniq;
}

function _trinity(response){ // Callback
var slots = response.slots || {};
var sbi_dc = response.sbi_dc || '';
var bidObject = {};
for (var slot in slots) {
if (slots[slot].sbi_aid){
bidObject = bidfactory.createBid(1);
bidObject.bidderCode = 'sonobi';
bidObject.cpm = Number(slots[slot].sbi_mouse);
bidObject.ad = _get_creative(sbi_dc, slots[slot].sbi_aid);
bidObject.width = Number(slots[slot].sbi_size.split('x')[0]);
bidObject.height = Number(slots[slot].sbi_size.split('x')[1]);
bidmanager.addBidResponse(cb_map[slot], bidObject);
} else { // No aid? No ad.
bidObject = bidfactory.createBid(2);
bidObject.bidderCode = 'sonobi';
bidmanager.addBidResponse(cb_map[slot], bidObject);
}
}
}

function _get_creative(sbi_dc, sbi_aid){
var creative = '<scr' + 'ipt type="text/javascript"src="https://' + sbi_dc;
creative += 'apex.go.sonobi.com/sbi.js?as=dfps&aid=' + sbi_aid;
creative += '"></scr' + 'ipt>';
return creative;
}

return { callBids: _phone_in };
};

module.exports = SonobiAdapter;

0 comments on commit 2c35420

Please sign in to comment.