Skip to content

Commit 1dc1cdb

Browse files
authored
nativo (#74)
1 parent 853913f commit 1dc1cdb

File tree

6 files changed

+139
-0
lines changed

6 files changed

+139
-0
lines changed

adapters/nativo/nativo.go

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package nativo
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"net/http"
7+
8+
"github.com/prebid/openrtb/v19/openrtb2"
9+
"github.com/prebid/prebid-server/adapters"
10+
"github.com/prebid/prebid-server/config"
11+
"github.com/prebid/prebid-server/openrtb_ext"
12+
)
13+
14+
type adapter struct {
15+
endpoint string
16+
}
17+
18+
// Builder builds a new instance of the Nativo adapter for the given bidder with the given config.
19+
func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
20+
bidder := &adapter{
21+
endpoint: config.Endpoint,
22+
}
23+
return bidder, nil
24+
}
25+
26+
func (a *adapter) MakeRequests(request *openrtb2.BidRequest, _ *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
27+
requestJSON, err := json.Marshal(request)
28+
if err != nil {
29+
return nil, []error{err}
30+
}
31+
32+
headers := http.Header{}
33+
headers.Add("Content-Type", "application/json;charset=utf-8")
34+
35+
requestData := &adapters.RequestData{
36+
Method: "POST",
37+
Uri: a.endpoint,
38+
Body: requestJSON,
39+
Headers: headers,
40+
}
41+
42+
return []*adapters.RequestData{requestData}, nil
43+
}
44+
45+
func (a *adapter) MakeBids(request *openrtb2.BidRequest, externalRequest *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) {
46+
if adapters.IsResponseStatusCodeNoContent(response) {
47+
return nil, nil
48+
}
49+
50+
if err := adapters.CheckResponseStatusCodeForErrors(response); err != nil {
51+
return nil, []error{err}
52+
}
53+
54+
var bidResp openrtb2.BidResponse
55+
56+
if err := json.Unmarshal(response.Body, &bidResp); err != nil {
57+
return nil, []error{err}
58+
}
59+
60+
bidResponse := adapters.NewBidderResponse()
61+
62+
var errs []error
63+
for _, seatBid := range bidResp.SeatBid {
64+
for i := range seatBid.Bid {
65+
bidType, err := getMediaTypeForImp(seatBid.Bid[i].ImpID, request.Imp)
66+
if err != nil {
67+
errs = append(errs, err)
68+
continue
69+
}
70+
71+
b := &adapters.TypedBid{
72+
Bid: &seatBid.Bid[i],
73+
BidType: bidType,
74+
}
75+
76+
bidResponse.Bids = append(bidResponse.Bids, b)
77+
}
78+
}
79+
return bidResponse, errs
80+
}
81+
82+
func getMediaTypeForImp(impID string, imps []openrtb2.Imp) (openrtb_ext.BidType, error) {
83+
for _, imp := range imps {
84+
if imp.ID == impID {
85+
if imp.Native != nil {
86+
return openrtb_ext.BidTypeNative, nil
87+
} else if imp.Video != nil {
88+
return openrtb_ext.BidTypeVideo, nil
89+
} else if imp.Banner != nil {
90+
return openrtb_ext.BidTypeBanner, nil
91+
}
92+
}
93+
}
94+
return "", fmt.Errorf("Unrecognized impression type in response from nativo: %s", impID)
95+
}

exchange/adapter_builders.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ import (
118118
"github.com/prebid/prebid-server/adapters/mobilefuse"
119119
"github.com/prebid/prebid-server/adapters/motorik"
120120
"github.com/prebid/prebid-server/adapters/nanointeractive"
121+
"github.com/prebid/prebid-server/adapters/nativo"
121122
"github.com/prebid/prebid-server/adapters/nextmillennium"
122123
"github.com/prebid/prebid-server/adapters/ninthdecimal"
123124
"github.com/prebid/prebid-server/adapters/nobid"
@@ -309,6 +310,7 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
309310
openrtb_ext.BidderMobfoxpb: mobfoxpb.Builder,
310311
openrtb_ext.BidderMobileFuse: mobilefuse.Builder,
311312
openrtb_ext.BidderMotorik: motorik.Builder,
313+
openrtb_ext.BidderNativo: nativo.Builder,
312314
openrtb_ext.BidderNanoInteractive: nanointeractive.Builder,
313315
openrtb_ext.BidderNextMillennium: nextmillennium.Builder,
314316
openrtb_ext.BidderNinthDecimal: ninthdecimal.Builder,

openrtb_ext/bidders.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ const (
210210
BidderMobfoxpb BidderName = "mobfoxpb"
211211
BidderMobileFuse BidderName = "mobilefuse"
212212
BidderMotorik BidderName = "motorik"
213+
BidderNativo BidderName = "nativo"
213214
BidderNanoInteractive BidderName = "nanointeractive"
214215
BidderNextMillennium BidderName = "nextmillennium"
215216
BidderNinthDecimal BidderName = "ninthdecimal"
@@ -418,6 +419,7 @@ func CoreBidderNames() []BidderName {
418419
BidderMobfoxpb,
419420
BidderMobileFuse,
420421
BidderMotorik,
422+
BidderNativo,
421423
BidderNanoInteractive,
422424
BidderNextMillennium,
423425
BidderNinthDecimal,

openrtb_ext/imp.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package openrtb_ext
22

33
import (
44
"encoding/json"
5+
6+
"github.com/prebid/openrtb/v19/openrtb2"
57
)
68

79
// AuctionEnvironmentType is a Google Privacy Sandbox flag indicating where the auction may take place
@@ -84,3 +86,12 @@ type ExtStoredBidResponse struct {
8486
type Options struct {
8587
EchoVideoAttrs bool `json:"echovideoattrs"`
8688
}
89+
90+
// GetImpIDs returns slice of all impression Ids from impList
91+
func GetImpIDs(imps []openrtb2.Imp) []string {
92+
impIDs := make([]string, len(imps))
93+
for i := range imps {
94+
impIDs[i] = imps[i].ID
95+
}
96+
return impIDs
97+
}

static/bidder-info/nativo.yaml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
endpoint: "https://exchange.postrelease.com/esi?ntv_epid=7"
2+
maintainer:
3+
email: "prebiddev@nativo.com"
4+
gvlVendorID: 263
5+
capabilities:
6+
app:
7+
mediaTypes:
8+
- banner
9+
- video
10+
- native
11+
site:
12+
mediaTypes:
13+
- banner
14+
- video
15+
- native
16+
userSync:
17+
redirect:
18+
url: https://jadserve.postrelease.com/suid/101787?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&ntv_gpp_consent={{.GPP}}&ntv_r={{.RedirectURL}}
19+
userMacro: NTV_USER_ID
20+
openrtb:
21+
version: 2.6
22+
gpp-supported: true

static/bidder-params/nativo.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"title": "Nativo Adapter Params",
4+
"description": "A schema which validates params accepted by the Nativo adapter",
5+
"type": "object",
6+
"properties": {}
7+
}

0 commit comments

Comments
 (0)