Skip to content

Commit

Permalink
Add eplanningBidAdapter (#2003)
Browse files Browse the repository at this point in the history
* Add eplanningBidAdapter

* Add new parameter to request

* Fix sync URL parameter
  • Loading branch information
Nistenf authored and jaiminpanchal27 committed Jan 22, 2018
1 parent 1b20a1c commit c1d86ea
Show file tree
Hide file tree
Showing 3 changed files with 531 additions and 0 deletions.
156 changes: 156 additions & 0 deletions modules/eplanningBidAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
import * as utils from 'src/utils';
import { registerBidder } from 'src/adapters/bidderFactory';

const BIDDER_CODE = 'eplanning';
const rnd = Math.random();
const DEFAULT_SV = 'ads.us.e-planning.net';
const DEFAULT_ISV = 'i.e-planning.net';
const PARAMS = ['ci', 'sv', 't'];
const DOLLARS = 'USD';
const NET_REVENUE = true;
const TTL = 120;
const NULL_SIZE = '1x1';
const FILE = 'file';

export const spec = {
code: BIDDER_CODE,
isBidRequestValid: function(bid) {
return Boolean(bid.params.ci) || Boolean(bid.params.t);
},
buildRequests: function(bidRequests) {
const method = 'GET';
const dfpClientId = '1';
const sec = 'ROS';
let url;
let params;
const urlConfig = getUrlConfig(bidRequests);

if (urlConfig.t) {
url = urlConfig.isv + '/layers/t_pbjs_2.json';
params = {};
} else {
url = '//' + (urlConfig.sv || DEFAULT_SV) + '/hb/1/' + urlConfig.ci + '/' + dfpClientId + '/' + (utils.getTopWindowLocation().hostname || FILE) + '/' + sec;
const referrerUrl = utils.getTopWindowReferrer();
const spacesString = getSpacesString(bidRequests);
params = {
rnd: rnd,
e: spacesString,
ur: utils.getTopWindowUrl() || FILE,
r: 'pbjs',
pbv: '$prebid.version$',
ncb: '1'
};
if (referrerUrl) {
params.fr = referrerUrl;
}
}

return {
method: method,
url: url,
data: params,
adUnitToBidId: getBidIdMap(bidRequests),
};
},
interpretResponse: function(serverResponse, request) {
const response = serverResponse.body;
let bidResponses = [];

if (response && !utils.isEmpty(response.sp)) {
response.sp.forEach(space => {
if (!utils.isEmpty(space.a)) {
space.a.forEach(ad => {
const bidResponse = {
requestId: request.adUnitToBidId[space.k],
cpm: ad.pr,
width: ad.w,
height: ad.h,
ad: ad.adm,
ttl: TTL,
creativeId: ad.crid,
netRevenue: NET_REVENUE,
currency: DOLLARS,
};
bidResponses.push(bidResponse);
});
}
});
}

return bidResponses;
},
getUserSyncs: function(syncOptions, serverResponses) {
const syncs = [];
const response = !utils.isEmpty(serverResponses) && serverResponses[0].body;

if (response && !utils.isEmpty(response.cs)) {
const responseSyncs = response.cs;
responseSyncs.forEach(sync => {
if (typeof sync === 'string' && syncOptions.pixelEnabled) {
syncs.push({
type: 'image',
url: sync,
});
} else if (typeof sync === 'object' && sync.ifr && syncOptions.iframeEnabled) {
syncs.push({
type: 'iframe',
url: sync.u,
})
}
});
}

return syncs;
},
}

function cleanName(name) {
return name.replace(/_|\.|-|\//g, '').replace(/\)\(|\(|\)/g, '_').replace(/^_+|_+$/g, '');
}
function getUrlConfig(bidRequests) {
if (isTestRequest(bidRequests)) {
return getTestConfig(bidRequests.filter(br => br.params.t));
}

let config = {};
bidRequests.forEach(bid => {
PARAMS.forEach(param => {
if (bid.params[param] && !config[param]) {
config[param] = bid.params[param];
}
});
});

if (config.sv) {
config.sv = '//' + config.sv;
}

return config;
}
function isTestRequest(bidRequests) {
let isTest = false;
bidRequests.forEach(bid => isTest = bid.params.t);
return isTest;
}
function getTestConfig(bidRequests) {
let isv;
bidRequests.forEach(br => isv = isv || br.params.isv);
return {
t: true,
isv: '//' + (isv || DEFAULT_ISV)
};
}
function getSpacesString(bids) {
const spacesString = bids.map(bid =>
cleanName(bid.adUnitCode) + ':' + (bid.sizes && bid.sizes.length ? utils.parseSizesInput(bid.sizes).join(',') : NULL_SIZE)
).join('+');

return spacesString;
}
function getBidIdMap(bidRequests) {
let map = {};
bidRequests.forEach(bid => map[cleanName(bid.adUnitCode)] = bid.bidId);
return map;
}

registerBidder(spec);
25 changes: 25 additions & 0 deletions modules/eplanningBidAdapter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Overview

```
Module Name: E-Planning Bid Adapter
Module Type: Bidder Adapter
Maintainer: [email protected]
```

# Description

Connects to E-Planning exchange for bids.

# Test Parameters
```
var adUnits = [{
code: 'div-gpt-ad-1460505748561-0',
sizes: [[300, 250]],
bids: [{
bidder: 'eplanning',
params: {
t: 1
}
}]
}];
```
Loading

0 comments on commit c1d86ea

Please sign in to comment.