Skip to content

Commit

Permalink
add between adapter (prebid#2722)
Browse files Browse the repository at this point in the history
* add between adapter

* add md dexcription about between adapter
  • Loading branch information
Shimogatsu authored and AdSpacesDevelopers committed Jan 30, 2019
1 parent 17338b7 commit 7b516b3
Show file tree
Hide file tree
Showing 3 changed files with 246 additions and 0 deletions.
167 changes: 167 additions & 0 deletions modules/betweenBidAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
import {registerBidder} from 'src/adapters/bidderFactory';

const BIDDER_CODE = 'between';

export const spec = {
code: BIDDER_CODE,
aliases: ['btw'],
supportedMediaTypes: ['banner'],
/**
* Determines whether or not the given bid request is valid.
*
* @param {BidRequest} bid The bid params to validate.
* @return boolean True if this is a valid bid, and false otherwise.
*/
isBidRequestValid: function(bid) {
return !!(bid.params.w && bid.params.h && bid.params.s);
},
/**
* Make a server request from the list of BidRequests.
*
* @param {validBidRequests[]} - an array of bids
* @return ServerRequest Info describing the request to the server.
*/
buildRequests: function(validBidRequests) {
let requests = [];
validBidRequests.forEach(i => {
let params = {
jst: 'hb',
ord: Math.random() * 10000000000000000,
tz: get_tz(),
fl: get_fl(),
rr: get_rr(),
w: i.params.w,
h: i.params.h,
s: i.params.s,
bidid: i.bidId,
transactionid: i.transactionId,
auctionid: i.auctionId
};
if (i.params.itu !== undefined) {
params.itu = i.params.itu;
}
if (i.params.cur !== undefined) {
params.cur = i.params.cur;
}
if (i.params.subid !== undefined) {
params.subid = i.params.subid;
}
if (i.params.click3rd !== undefined) {
params.click3rd = i.params.click3rd;
}
if (i.params.pubdata !== undefined) {
for (let key in i.params.pubdata) {
params['pubside_macro[' + key + ']'] = encodeURIComponent(i.params.pubdata[key]);
}
}
requests.push({method: 'GET', url: 'https://ads.betweendigital.com/adjson', data: params})
})
return requests;
},
/**
* Unpack the response from the server into a list of bids.
*
* @param {ServerResponse} serverResponse A successful response from the server.
* @return {Bid[]} An array of bids which were nested inside the server.
*/
interpretResponse: function(serverResponse, bidRequest) {
const bidResponses = [];
for (var i = 0; i < serverResponse.body.length; i++) {
let bidResponse = {
requestId: serverResponse.body[i].bidid,
cpm: serverResponse.body[i].cpm || 123,
width: serverResponse.body[i].w || 200,
height: serverResponse.body[i].h || 400,
ttl: serverResponse.body[i].ttl || 120,
creativeId: serverResponse.body[i].creativeid || 123,
currency: serverResponse.body[i].currency || 'RUB',
netRevenue: serverResponse.body[i].netRevenue || false,
ad: serverResponse.body[i].ad
};
bidResponses.push(bidResponse);
}
return bidResponses;
},

/**
* Register the user sync pixels which should be dropped after the auction.
*
* @param {SyncOptions} syncOptions Which user syncs are allowed?
* @param {ServerResponse[]} serverResponses List of server's responses.
* @return {UserSync[]} The user syncs which should be dropped.
*/
getUserSyncs: function(syncOptions, serverResponses) {
let syncs = []
/* console.log(syncOptions,serverResponses)
if (syncOptions.iframeEnabled) {
syncs.push({
type: 'iframe',
url: '//acdn.adnxs.com/ib/static/usersync/v3/async_usersync.html'
});
}
if (syncOptions.pixelEnabled && serverResponses.length > 0) {
syncs.push({
type: 'image',
url: serverResponses[0].body.userSync.url
});
} */

syncs.push({
type: 'iframe',
url: '//acdn.adnxs.com/ib/static/usersync/v3/async_usersync.html'
})
return syncs;
}
}

function get_rr() {
try {
var td = top.document;
var rr = td.referrer;
} catch (err) { return false }

if (typeof rr != 'undefined' && rr.length > 0) {
return encodeURIComponent(rr);
} else if (typeof rr != 'undefined' && rr == '') {
return 'direct';
}
}

function get_fl() {
if (navigator.plugins !== undefined && navigator.plugins !== null) {
if (navigator.plugins['Shockwave Flash'] !== undefined && navigator.plugins['Shockwave Flash'] !== null && typeof navigator.plugins['Shockwave Flash'] === 'object') {
var description = navigator.plugins['Shockwave Flash'].description;
if (description && !(navigator.mimeTypes !== undefined && navigator.mimeTypes['application/x-shockwave-flash'] && !navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin)) {
description = description.replace(/^.*\s+(\S+\s+\S+$)/, '$1').replace(/^(.*)\..*$/, '$1');

return parseInt(description, 10);
}
}
}

return 0;
}

function get_tz() {
return new Date().getTimezoneOffset();
}

/*
function get_pubdata(adds) {
if (adds !== undefined && adds.pubdata !== undefined) {
let index = 0;
let url = '';
for(var key in adds.pubdata) {
if (index == 0) {
url = url + encodeURIComponent('pubside_macro[' + key + ']') + '=' + encodeURIComponent(adds.pubdata[key]);
index++;
} else {
url = url + '&' + encodeURIComponent('pubside_macro[' + key + ']') + '=' + encodeURIComponent(adds.pubdata[key]);
}
}
return url;
}
}
*/

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

Module Name: Between Bidder Adapter
Module Type: Bidder Adapter
Maintainer: info@betweendigital.com

# Description

You can use this adapter to get a bid from betweendigital.

About us : http://betweendigital.com


# Test Parameters
```
var adUnits = [
{
code: 'test-div',
bids: [
{
bidder: "between",
params: {
w: 200,
h: 400,
s: 111
}
}
]
}
];
```
48 changes: 48 additions & 0 deletions test/spec/modules/betweenBidAdapter_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { expect } from 'chai';
import { spec } from 'modules/betweenBidAdapter';

describe('betweenBidAdapterTests', () => {
it('validate_pub_params', () => {
expect(spec.isBidRequestValid({
bidder: 'between',
params: {
placementId: 'example',
w: 240,
h: 400,
s: 1112
}
})).to.equal(true);
});
it('validate_generated_params', () => {
let bidRequestData = [{
bidId: 'bid1234',
bidder: 'between',
params: {w: 240, h: 400, s: 1112, placementId: 'example'},
sizes: [[240, 400]]
}]
let request = spec.buildRequests(bidRequestData);
let req_data = request[0].data;
expect(req_data.bidid).to.equal('bid1234');
});
it('validate_response_params', () => {
let serverResponse = {
body: [{
bidid: 'bid1234',
cpm: 1.12,
w: 240,
h: 400,
currency: 'USD',
ad: 'Ad html'
}]
};
let bids = spec.interpretResponse(serverResponse);
expect(bids).to.have.lengthOf(1);
let bid = bids[0];
expect(bid.cpm).to.equal(1.12);
expect(bid.currency).to.equal('USD');
expect(bid.width).to.equal(240);
expect(bid.height).to.equal(400);
expect(bid.requestId).to.equal('bid1234');
expect(bid.ad).to.equal('Ad html');
});
});

0 comments on commit 7b516b3

Please sign in to comment.