DSINSIGHTS Telegram 302
Bid Adapter Prebid.js

Продолжаем развивать тему Header Bidding'а, сегодня у нас разбор структуры бид адаптеров на Prebid.js

Для чего нужен?
Бид адаптер представляет собой открытый код на JS, который запускается непосредственно в браузере пользователя. Как понятно из названия адаптер парсит запрос на ставку от паблишера, кастует его в формат совместимый с конкретной SSP (как правило в json), отправляет на нее HTTP запрос, принимает ответ с ценой ставки и передает ее в core Prebid.js для разрешения аукциона. Каждая SSP, интегрированная с пребидом имеет свою open-source реализацию адаптера.

Какие этапы работы адаптера?

▶️ isBidRequestValid
Проверяем корректность запроса паблишера: наличие placementId, и флаг над параметрами запроса != undefined.


isBidRequestValid: function (bid) {
if (typeof bid.params !== 'undefined' && parseInt(getValue(bid.params, 'placementId')) > 0) {
logInfo('Bidder adapter valid bid request');
return true;
} else {
logError('Bidder adapter requires placementId to be defined and a positive number');
return false;
}
}


▶️ buildRequests
Если запрос валиден, то обогащаем его. На странице может быть несколько слотов с разными placementId, поэтому через адаптер за раз проходит не один, а несколько validBidRequests.

Под каждый запрос мы извлекаем данные слота:

- Айдишники placementId, bidId, transactionId = ortb2imp.ext.td (если SSP поддерживает его), adUnitCode, gpid. К слову gpid - это глобальный id слота, появился из-за того, что некоторые паблишеры не особо запариваются над уникальностью названий слотов и могут обозвать все слоты на странице, к примеру homepage. Как их различать SSP? Для этого есть gpid. gpid - это склейка из adUnitCode, размера слота и рандомного токена, что помогает SSP различать слоты и избегать коллизий (пример: homepage#300x250#wje9w )

- Контекстные фичи: referrer, он же URL страницы, pageTitle, pageDescription, которые можно потом закодировать в эмбеддинги

- Фичи пользователя: ширина, высота экрана устройства, networkBandwidth пропускная способность интернета пользователя, ориентация экрана, user agent и все доступные first-party данные (browser, os etc.). Также опционально можно извлечь историю браузера win.top.history.length


buildRequests: function (validBidRequests, bidderRequest) {
const bids = validBidRequests.map(bids => {
const reqObj = {};
let placementId = getValue(bids.params, 'placementId');
const gpid = deepAccess(bids, 'ortb2Imp.ext.gpid');
reqObj.sizes = getSizes(bids);
reqObj.bidId = getBidIdParameter('bidId', bids);
reqObj.bidderRequestId = getBidIdParameter('bidderRequestId', bids);
reqObj.placementId = parseInt(placementId, 10);
reqObj.adUnitCode = getBidIdParameter('adUnitCode', bids);
reqObj.transactionId = bids.ortb2Imp?.ext?.tid || '';
if (gpid) { reqObj.gpid = gpid; }
});
const topWindow = window.top;

const payload = {
referrer: getReferrerInfo(bidderRequest),
pageTitle: getPageTitle().slice(0, 300),
pageDescription: getPageDescription().slice(0, 300),
networkBandwidth: getConnectionDownLink(window.navigator),
data: bids,
device: bidderRequest?.ortb2?.device || {},
deviceWidth: screen.width,
deviceHeight: screen.height,
screenOrientation: screen.orientation?.type,
historyLength: getHLen(),
prebid_version: '$prebid.version$',
};
}



tgoop.com/dsinsights/302
Create:
Last Update:

Bid Adapter Prebid.js

Продолжаем развивать тему Header Bidding'а, сегодня у нас разбор структуры бид адаптеров на Prebid.js

Для чего нужен?
Бид адаптер представляет собой открытый код на JS, который запускается непосредственно в браузере пользователя. Как понятно из названия адаптер парсит запрос на ставку от паблишера, кастует его в формат совместимый с конкретной SSP (как правило в json), отправляет на нее HTTP запрос, принимает ответ с ценой ставки и передает ее в core Prebid.js для разрешения аукциона. Каждая SSP, интегрированная с пребидом имеет свою open-source реализацию адаптера.

Какие этапы работы адаптера?

▶️ isBidRequestValid
Проверяем корректность запроса паблишера: наличие placementId, и флаг над параметрами запроса != undefined.


isBidRequestValid: function (bid) {
if (typeof bid.params !== 'undefined' && parseInt(getValue(bid.params, 'placementId')) > 0) {
logInfo('Bidder adapter valid bid request');
return true;
} else {
logError('Bidder adapter requires placementId to be defined and a positive number');
return false;
}
}


▶️ buildRequests
Если запрос валиден, то обогащаем его. На странице может быть несколько слотов с разными placementId, поэтому через адаптер за раз проходит не один, а несколько validBidRequests.

Под каждый запрос мы извлекаем данные слота:

- Айдишники placementId, bidId, transactionId = ortb2imp.ext.td (если SSP поддерживает его), adUnitCode, gpid. К слову gpid - это глобальный id слота, появился из-за того, что некоторые паблишеры не особо запариваются над уникальностью названий слотов и могут обозвать все слоты на странице, к примеру homepage. Как их различать SSP? Для этого есть gpid. gpid - это склейка из adUnitCode, размера слота и рандомного токена, что помогает SSP различать слоты и избегать коллизий (пример: homepage#300x250#wje9w )

- Контекстные фичи: referrer, он же URL страницы, pageTitle, pageDescription, которые можно потом закодировать в эмбеддинги

- Фичи пользователя: ширина, высота экрана устройства, networkBandwidth пропускная способность интернета пользователя, ориентация экрана, user agent и все доступные first-party данные (browser, os etc.). Также опционально можно извлечь историю браузера win.top.history.length


buildRequests: function (validBidRequests, bidderRequest) {
const bids = validBidRequests.map(bids => {
const reqObj = {};
let placementId = getValue(bids.params, 'placementId');
const gpid = deepAccess(bids, 'ortb2Imp.ext.gpid');
reqObj.sizes = getSizes(bids);
reqObj.bidId = getBidIdParameter('bidId', bids);
reqObj.bidderRequestId = getBidIdParameter('bidderRequestId', bids);
reqObj.placementId = parseInt(placementId, 10);
reqObj.adUnitCode = getBidIdParameter('adUnitCode', bids);
reqObj.transactionId = bids.ortb2Imp?.ext?.tid || '';
if (gpid) { reqObj.gpid = gpid; }
});
const topWindow = window.top;

const payload = {
referrer: getReferrerInfo(bidderRequest),
pageTitle: getPageTitle().slice(0, 300),
pageDescription: getPageDescription().slice(0, 300),
networkBandwidth: getConnectionDownLink(window.navigator),
data: bids,
device: bidderRequest?.ortb2?.device || {},
deviceWidth: screen.width,
deviceHeight: screen.height,
screenOrientation: screen.orientation?.type,
historyLength: getHLen(),
prebid_version: '$prebid.version$',
};
}

BY ML Advertising


Share with your friend now:
tgoop.com/dsinsights/302

View MORE
Open in Telegram


Telegram News

Date: |

A Hong Kong protester with a petrol bomb. File photo: Dylan Hollingsworth/HKFP. With the sharp downturn in the crypto market, yelling has become a coping mechanism for many crypto traders. This screaming therapy became popular after the surge of Goblintown Ethereum NFTs at the end of May or early June. Here, holders made incoherent groaning sounds in late-night Twitter spaces. They also role-played as urine-loving Goblin creatures. 1What is Telegram Channels? Administrators Each account can create up to 10 public channels
from us


Telegram ML Advertising
FROM American