Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PubMatic adapter: adding support for IAB bcat parameter #3702

Merged
merged 54 commits into from
Apr 5, 2019
Merged
Show file tree
Hide file tree
Changes from 53 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
7a10d02
Merge pull request #1 from prebid/master
pm-manasi-moghe Dec 19, 2018
8082b2e
Merge pull request #2 from prebid/master
pm-manasi-moghe Dec 26, 2018
6e856c0
Merge pull request #3 from prebid/master
pm-manasi-moghe Jan 9, 2019
881c7db
Merge pull request #4 from prebid/master
pm-manasi-moghe Jan 16, 2019
5dc2d30
Merge pull request #6 from prebid/master
pm-manasi-moghe Jan 18, 2019
e3c151a
Merge pull request #8 from prebid/master
pm-manasi-moghe Jan 22, 2019
1b7c856
changes for multiformat support
pm-manasi-moghe Jan 22, 2019
84c6e64
Merge pull request #9 from prebid/master
pm-manasi-moghe Feb 27, 2019
feaf0fa
Merge pull request #10 from pm-manasi-moghe/master
pm-manasi-moghe Feb 27, 2019
7cb5041
Merge pull request #11 from prebid/master
pm-manasi-moghe Mar 6, 2019
7867370
Merge pull request #12 from pm-manasi-moghe/master
pm-manasi-moghe Mar 6, 2019
f8c50ec
added new constant NATIVE_ASSETS in PubMatic adapter
pm-harshad-mane Mar 14, 2019
7f4cf0e
removed NATIVE_ASSET_KEY reference in PubMatic adapter
pm-harshad-mane Mar 14, 2019
c6aba1a
removed reference of const NATIVE_ASSET_ID from PubMatic adapter
pm-harshad-mane Mar 14, 2019
13550ea
removed reference of const NATIVE_ASSET_DATA_TYPE in PubMatic adapter
pm-harshad-mane Mar 14, 2019
bcea4d6
using _commonNativeRequestObject in PubMatic adapter to avoid repeati…
pm-harshad-mane Mar 14, 2019
7404ddf
removed new-lines in const declaration
pm-harshad-mane Mar 14, 2019
1695fb9
generating NATIVE_ASSET_REVERSE_ID from NATIVE_ASSETS
pm-harshad-mane Mar 14, 2019
d22d730
renamed NATIVE_ASSET_REVERSE_ID to NATIVE_ASSET_ID_TO_KEY_MAP
pm-harshad-mane Mar 14, 2019
54580cc
little modification in _checkParamDataType in PubMatic adapter
pm-harshad-mane Mar 14, 2019
c408166
a minor improvement
pm-harshad-mane Mar 14, 2019
09fb481
using let instead of var
pm-harshad-mane Mar 14, 2019
688e8ff
added NATIVE_ASSET_KEY_TO_ASSET_MAP and combining switch cases
pm-harshad-mane Mar 14, 2019
cad5bed
lint update
pm-harshad-mane Mar 14, 2019
9b79c2e
removed some stale comments
pm-harshad-mane Mar 15, 2019
07ea62e
Merge remote-tracking branch 'upstream/master' into native_refactor
pm-harshad-mane Mar 18, 2019
72cbae6
Merge branch 'UOE4057_multiformat' of https://github.com/pm-manasi-mo…
pm-harshad-mane Mar 19, 2019
53e1f35
Merge branch 'pm-manasi-moghe-UOE4057_multiformat' into native_refactor
pm-harshad-mane Mar 19, 2019
2269e39
using LOG_WARN_PREFIX
pm-harshad-mane Mar 19, 2019
83f3cb8
using const UNDEFINED
pm-harshad-mane Mar 19, 2019
b482471
added a logWarn in catch
pm-harshad-mane Mar 19, 2019
ddf4c66
using arrow functions
pm-harshad-mane Mar 19, 2019
6c50bd3
Merge pull request #13 from prebid/master
pm-manasi-moghe Mar 20, 2019
c5ab18d
Merge pull request #14 from pm-harshad-mane/native_refactor
pm-manasi-moghe Mar 20, 2019
9ee6927
code review changes
pm-manasi-moghe Mar 20, 2019
af5a57b
supporting bcat parameter
pm-harshad-mane Mar 22, 2019
a53a4d0
added details of bcat param for PubMatic adapter
pm-harshad-mane Mar 22, 2019
2b87629
changing log statement on selecting bcat
pm-harshad-mane Mar 22, 2019
990d3b0
updated logs
pm-harshad-mane Mar 22, 2019
043fda9
fixed some typos
pm-harshad-mane Mar 22, 2019
7da2a32
changes to checkMediaType function
pm-manasi-moghe Mar 25, 2019
9b75199
Merge remote-tracking branch 'upstream/master' into native_refactor
pm-harshad-mane Mar 26, 2019
ec67b85
Merge pull request #15 from pm-harshad-mane/native_refactor
pm-manasi-moghe Mar 26, 2019
04ebe44
Merge pull request #16 from prebid/master
pm-manasi-moghe Mar 27, 2019
a583147
Merge pull request #17 from pm-manasi-moghe/master
pm-manasi-moghe Mar 27, 2019
5d83608
suppress warning of missing mediaTypes.banner for native and video im…
pm-manasi-moghe Mar 27, 2019
67d3a7c
ignore fluid size, if present, in banner impression
pm-manasi-moghe Mar 27, 2019
e985be4
fix for ignoring fluid size in banner impression
pm-manasi-moghe Mar 27, 2019
b2b9e2d
added relevant comments and test cases for fluid case in banner request
pm-manasi-moghe Mar 28, 2019
c715ef0
added sample config for multiformat adunit
pm-manasi-moghe Mar 28, 2019
ef70966
Merge pull request #2 from pm-manasi-moghe/multiformat_refactor_changes
pm-harshad-mane Mar 28, 2019
50639db
Merge branch 'native_refactor' into iab_cat
pm-harshad-mane Apr 1, 2019
9f048af
Merge remote-tracking branch 'upstream/master' into iab_cat
pm-harshad-mane Apr 1, 2019
5ed4bea
array length should be > 0
pm-harshad-mane Apr 2, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions modules/pubmaticBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -707,6 +707,30 @@ function _parseNativeResponse(bid, newBid) {
}
}

function _blockedIabCategoriesValidation(payload, blockedIabCategories) {
blockedIabCategories = blockedIabCategories
.filter(function(category) {
if (typeof category === 'string') { // only strings
return true;
} else {
utils.logWarn(LOG_WARN_PREFIX + 'bcat: Each category should be a string, ignoring category: ' + category);
return false;
}
})
.map(category => category.trim()) // trim all
.filter(function(category, index, arr) { // minimum 3 charaters length
if (category.length > 3) {
return arr.indexOf(category) === index; // unique value only
} else {
utils.logWarn(LOG_WARN_PREFIX + 'bcat: Each category should have a value of a length of more than 3 characters, ignoring category: ' + category)
}
});
if (blockedIabCategories.length > 1) {
pm-harshad-mane marked this conversation as resolved.
Show resolved Hide resolved
utils.logWarn(LOG_WARN_PREFIX + 'bcat: Selected: ', blockedIabCategories);
payload.bcat = blockedIabCategories;
}
}

export const spec = {
code: BIDDER_CODE,
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
Expand Down Expand Up @@ -756,6 +780,7 @@ export const spec = {
var dctrLen;
var dctrArr = [];
var bid;
var blockedIabCategories = [];
validBidRequests.forEach(originalBid => {
bid = utils.deepClone(originalBid);
_parseAdSlot(bid);
Expand Down Expand Up @@ -789,6 +814,9 @@ export const spec = {
if (bid.params.hasOwnProperty('dctr') && utils.isStr(bid.params.dctr)) {
dctrArr.push(bid.params.dctr);
}
if (bid.params.hasOwnProperty('bcat') && utils.isArray(bid.params.bcat)) {
blockedIabCategories = blockedIabCategories.concat(bid.params.bcat);
}
var impObj = _createImpressionObject(bid, conf);
if (impObj) {
payload.imp.push(impObj);
Expand Down Expand Up @@ -860,6 +888,7 @@ export const spec = {
}

_handleEids(payload);
_blockedIabCategoriesValidation(payload, blockedIabCategories);
return {
method: 'POST',
url: ENDPOINT,
Expand Down
3 changes: 2 additions & 1 deletion modules/pubmaticBidAdapter.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ var adUnits = [
gender: 'M', // optional
kadfloor: '0.50', // optional
currency: 'AUD' // optional (Value configured only in the 1st adunit will be passed on. < br/> Values if present in subsequent adunits, will be ignored.)
dctr: 'key1=123|key2=345' // optional (Value configured only in the 1st adunit will be passed on. < br/> Values if present in subsequent adunits, will be ignored.)
dctr: 'key1=123|key2=345', // optional (Value configured only in the 1st adunit will be passed on. < br/> Values if present in subsequent adunits, will be ignored.)
bcat: ['IAB1-5', 'IAB1-7'] // Optional: Blocked IAB Categories. (Values from all slots will be combined and only unique values will be passed. An array of strings only. Each category should be a string of a length of more than 3 characters.)
}
}]
}];
Expand Down
94 changes: 94 additions & 0 deletions test/spec/modules/pubmaticBidAdapter_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -1805,6 +1805,100 @@ describe('PubMatic adapter', function () {
expect(data.site.ext).to.not.exist;
});

describe('Request param bcat checking', function() {
let multipleBidRequests = [
{
bidder: 'pubmatic',
params: {
publisherId: '301',
adSlot: '/15671365/DMDemo@300x250:0',
kadfloor: '1.2',
pmzoneid: 'aabc, ddef',
kadpageurl: 'www.publisher.com',
yob: '1986',
gender: 'M',
lat: '12.3',
lon: '23.7',
wiid: '1234567890',
profId: '100',
verId: '200',
currency: 'AUD',
dctr: 'key1=val1|key2=val2,!val3'
},
placementCode: '/19968336/header-bid-tag-1',
sizes: [[300, 250], [300, 600]],
bidId: '23acc48ad47af5',
requestId: '0fb4905b-9456-4152-86be-c6f6d259ba99',
bidderRequestId: '1c56ad30b9b8ca8',
transactionId: '92489f71-1bf2-49a0-adf9-000cea934729'
},
{
bidder: 'pubmatic',
params: {
publisherId: '301',
adSlot: '/15671365/DMDemo@300x250:0',
kadfloor: '1.2',
pmzoneid: 'aabc, ddef',
kadpageurl: 'www.publisher.com',
yob: '1986',
gender: 'M',
lat: '12.3',
lon: '23.7',
wiid: '1234567890',
profId: '100',
verId: '200',
currency: 'GBP',
dctr: 'key1=val3|key2=val1,!val3|key3=val123'
},
placementCode: '/19968336/header-bid-tag-1',
sizes: [[300, 250], [300, 600]],
bidId: '23acc48ad47af5',
requestId: '0fb4905b-9456-4152-86be-c6f6d259ba99',
bidderRequestId: '1c56ad30b9b8ca8',
transactionId: '92489f71-1bf2-49a0-adf9-000cea934729'
}
];

it('bcat: pass only strings', function() {
multipleBidRequests[0].params.bcat = [1, 2, 3, 'IAB1', 'IAB2'];
let request = spec.buildRequests(multipleBidRequests);
let data = JSON.parse(request.data);
expect(data.bcat).to.exist.and.to.deep.equal(['IAB1', 'IAB2']);
});

it('bcat: pass strings with length greater than 3', function() {
multipleBidRequests[0].params.bcat = ['AB', 'CD', 'IAB1', 'IAB2'];
let request = spec.buildRequests(multipleBidRequests);
let data = JSON.parse(request.data);
expect(data.bcat).to.exist.and.to.deep.equal(['IAB1', 'IAB2']);
});

it('bcat: trim the strings', function() {
multipleBidRequests[0].params.bcat = [' IAB1 ', ' IAB2 '];
let request = spec.buildRequests(multipleBidRequests);
let data = JSON.parse(request.data);
expect(data.bcat).to.exist.and.to.deep.equal(['IAB1', 'IAB2']);
});

it('bcat: pass only unique strings', function() {
// multi slot
multipleBidRequests[0].params.bcat = ['IAB1', 'IAB2', 'IAB1', 'IAB2', 'IAB1', 'IAB2'];
multipleBidRequests[1].params.bcat = ['IAB1', 'IAB2', 'IAB1', 'IAB2', 'IAB1', 'IAB3'];
let request = spec.buildRequests(multipleBidRequests);
let data = JSON.parse(request.data);
expect(data.bcat).to.exist.and.to.deep.equal(['IAB1', 'IAB2', 'IAB3']);
});

it('bcat: do not pass bcat if all entries are invalid', function() {
// multi slot
multipleBidRequests[0].params.bcat = ['', 'IAB', 'IAB'];
multipleBidRequests[1].params.bcat = [' ', 22, 99999, 'IA'];
let request = spec.buildRequests(multipleBidRequests);
let data = JSON.parse(request.data);
expect(data.bcat).to.deep.equal(undefined);
});
});

describe('Response checking', function () {
it('should check for valid response values', function () {
let request = spec.buildRequests(bidRequests);
Expand Down