From 25605a6fd38891ab112383e789757613ea0f99a6 Mon Sep 17 00:00:00 2001 From: TheMediaGrid Date: Fri, 7 Dec 2018 12:23:20 +0300 Subject: [PATCH 1/3] Add TheMediaGrid server adapter --- adapters/grid/grid.go | 80 ++++++++++++++++++ adapters/grid/grid_test.go | 11 +++ .../gridtest/exemplary/simple-banner.json | 83 +++++++++++++++++++ .../grid/gridtest/params/race/banner.json | 1 + .../gridtest/supplemental/bad_response.json | 58 +++++++++++++ .../gridtest/supplemental/status_204.json | 56 +++++++++++++ .../gridtest/supplemental/status_400.json | 58 +++++++++++++ .../gridtest/supplemental/status_418.json | 58 +++++++++++++ adapters/grid/usersync.go | 17 ++++ adapters/grid/usersync_test.go | 23 +++++ config/config.go | 2 + exchange/adapter_map.go | 2 + openrtb_ext/bidders.go | 2 + static/bidder-info/grid.yaml | 6 ++ static/bidder-params/grid.json | 8 ++ usersync/usersyncers/syncer.go | 2 + usersync/usersyncers/syncer_test.go | 1 + 17 files changed, 468 insertions(+) create mode 100644 adapters/grid/grid.go create mode 100644 adapters/grid/grid_test.go create mode 100644 adapters/grid/gridtest/exemplary/simple-banner.json create mode 100644 adapters/grid/gridtest/params/race/banner.json create mode 100644 adapters/grid/gridtest/supplemental/bad_response.json create mode 100644 adapters/grid/gridtest/supplemental/status_204.json create mode 100644 adapters/grid/gridtest/supplemental/status_400.json create mode 100644 adapters/grid/gridtest/supplemental/status_418.json create mode 100644 adapters/grid/usersync.go create mode 100644 adapters/grid/usersync_test.go create mode 100644 static/bidder-info/grid.yaml create mode 100644 static/bidder-params/grid.json diff --git a/adapters/grid/grid.go b/adapters/grid/grid.go new file mode 100644 index 00000000000..c454d71c10c --- /dev/null +++ b/adapters/grid/grid.go @@ -0,0 +1,80 @@ +package grid + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/mxmCherry/openrtb" + "github.com/prebid/prebid-server/adapters" + "github.com/prebid/prebid-server/errortypes" +) + +type GridAdapter struct { + endpoint string +} + +// MakeRequests makes the HTTP requests which should be made to fetch bids. +func (a *GridAdapter) MakeRequests(request *openrtb.BidRequest) ([]*adapters.RequestData, []error) { + var errors = make([]error, 0) + + reqJSON, err := json.Marshal(request) + if err != nil { + errors = append(errors, err) + return nil, errors + } + + headers := http.Header{} + headers.Add("Content-Type", "application/json;charset=utf-8") + + return []*adapters.RequestData{{ + Method: "POST", + Uri: a.endpoint, + Body: reqJSON, + Headers: headers, + }}, errors +} + +// MakeBids unpacks the server's response into Bids. +func (a *GridAdapter) MakeBids(internalRequest *openrtb.BidRequest, externalRequest *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) { + if response.StatusCode == http.StatusNoContent { + return nil, nil + } + + if response.StatusCode == http.StatusBadRequest { + return nil, []error{&errortypes.BadInput{ + Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode), + }} + } + + if response.StatusCode != http.StatusOK { + return nil, []error{&errortypes.BadServerResponse{ + Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode), + }} + } + + var bidResp openrtb.BidResponse + if err := json.Unmarshal(response.Body, &bidResp); err != nil { + return nil, []error{err} + } + + bidResponse := adapters.NewBidderResponseWithBidsCapacity(1) + + for _, sb := range bidResp.SeatBid { + for i := range sb.Bid { + bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{ + Bid: &sb.Bid[i], + BidType: "banner", + }) + } + } + return bidResponse, nil + +} + +// NewGridBidder configure bidder endpoint +func NewGridBidder(endpoint string) *GridAdapter { + return &GridAdapter{ + endpoint: endpoint, + } +} diff --git a/adapters/grid/grid_test.go b/adapters/grid/grid_test.go new file mode 100644 index 00000000000..316ed4fd95e --- /dev/null +++ b/adapters/grid/grid_test.go @@ -0,0 +1,11 @@ +package grid + +import ( + "testing" + + "github.com/prebid/prebid-server/adapters/adapterstest" +) + +func TestJsonSamples(t *testing.T) { + adapterstest.RunJSONBidderTest(t, "gridtest", NewGridBidder("http://localhost/prebid")) +} diff --git a/adapters/grid/gridtest/exemplary/simple-banner.json b/adapters/grid/gridtest/exemplary/simple-banner.json new file mode 100644 index 00000000000..b098a94f9ba --- /dev/null +++ b/adapters/grid/gridtest/exemplary/simple-banner.json @@ -0,0 +1,83 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "site": { + "page": "https://good.site/url" + }, + "imp": [{ + "id": "test-imp-id", + "banner": { + "format": [{ + "w": 300, + "h": 250 + }] + }, + "ext": { + "bidder": {} + } + }] + }, + + "httpCalls": [{ + "expectedRequest": { + "uri": "http://localhost/prebid", + "body": { + "id": "test-request-id", + "site": { + "page": "https://good.site/url" + }, + "imp": [{ + "id": "test-imp-id", + "banner": { + "format": [{ + "w": 300, + "h": 250 + }] + }, + "ext": { + "bidder": {} + } + }] + } + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "seatbid": [{ + "seat": "grid", + "bid": [{ + "id": "randomid", + "impid": "test-imp-id", + "price": 0.500000, + "adid": "12345678", + "adm": "some-test-ad", + "cid": "987", + "crid": "12345678", + "h": 250, + "w": 300 + }] + }], + "cur": "USD" + } + } + }], + + "expectedBidResponses": [{ + "currency": "USD", + "bids": [{ + "bid": { + "id": "randomid", + "impid": "test-imp-id", + "price": 0.5, + "adm": "some-test-ad", + "adid": "12345678", + "cid": "987", + "crid": "12345678", + "w": 300, + "h": 250 + }, + "type": "banner" + }] + }] +} diff --git a/adapters/grid/gridtest/params/race/banner.json b/adapters/grid/gridtest/params/race/banner.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/adapters/grid/gridtest/params/race/banner.json @@ -0,0 +1 @@ +{} diff --git a/adapters/grid/gridtest/supplemental/bad_response.json b/adapters/grid/gridtest/supplemental/bad_response.json new file mode 100644 index 00000000000..1cce1a94cca --- /dev/null +++ b/adapters/grid/gridtest/supplemental/bad_response.json @@ -0,0 +1,58 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + } + } + } + ] + }, + + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://localhost/prebid", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + } + } + } + ] + } + }, + "mockResponse": { + "status": 200, + "body": "{\"id\"data.lost" + } + } + ], + + "expectedMakeBidsErrors": [ + "json: cannot unmarshal string into Go value of type openrtb.BidResponse" + ] +} diff --git a/adapters/grid/gridtest/supplemental/status_204.json b/adapters/grid/gridtest/supplemental/status_204.json new file mode 100644 index 00000000000..906d8553bc6 --- /dev/null +++ b/adapters/grid/gridtest/supplemental/status_204.json @@ -0,0 +1,56 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + } + } + } + ] + }, + + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://localhost/prebid", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + } + } + } + ] + } + }, + "mockResponse": { + "status": 204, + "body": {} + } + } + ], + + "expectedBidResponses": [] +} diff --git a/adapters/grid/gridtest/supplemental/status_400.json b/adapters/grid/gridtest/supplemental/status_400.json new file mode 100644 index 00000000000..c82b0dd3273 --- /dev/null +++ b/adapters/grid/gridtest/supplemental/status_400.json @@ -0,0 +1,58 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + } + } + } + ] + }, + + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://localhost/prebid", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + } + } + } + ] + } + }, + "mockResponse": { + "status": 400, + "body": {} + } + } + ], + + "expectedMakeBidsErrors": [ + "Unexpected status code: 400. Run with request.debug = 1 for more info" + ] +} diff --git a/adapters/grid/gridtest/supplemental/status_418.json b/adapters/grid/gridtest/supplemental/status_418.json new file mode 100644 index 00000000000..dc5087cfcb9 --- /dev/null +++ b/adapters/grid/gridtest/supplemental/status_418.json @@ -0,0 +1,58 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + } + } + } + ] + }, + + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://localhost/prebid", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + } + ] + }, + "ext": { + "bidder": { + } + } + } + ] + } + }, + "mockResponse": { + "status": 418, + "body": {} + } + } + ], + + "expectedMakeBidsErrors": [ + "Unexpected status code: 418. Run with request.debug = 1 for more info" + ] +} diff --git a/adapters/grid/usersync.go b/adapters/grid/usersync.go new file mode 100644 index 00000000000..a76bf01ff30 --- /dev/null +++ b/adapters/grid/usersync.go @@ -0,0 +1,17 @@ +package grid + +import ( + "net/url" + + "github.com/prebid/prebid-server/adapters" + "github.com/prebid/prebid-server/config" + "github.com/prebid/prebid-server/openrtb_ext" + "github.com/prebid/prebid-server/usersync" +) + +func NewGridSyncer(cfg *config.Configuration) usersync.Usersyncer { + usersyncURL := cfg.Adapters[string(openrtb_ext.BidderGrid)].UserSyncURL + redirectURI := url.QueryEscape(cfg.ExternalURL) + "%2Fsetuid%3Fbidder%3Dgrid%26gdpr%3D{{gdpr}}%26gdpr_consent%3D{{gdpr_consent}}%26uid%3D%24UID" + + return adapters.NewSyncer("grid", 0, adapters.ResolveMacros(usersyncURL+redirectURI), adapters.SyncTypeRedirect) +} diff --git a/adapters/grid/usersync_test.go b/adapters/grid/usersync_test.go new file mode 100644 index 00000000000..93c15fb27c6 --- /dev/null +++ b/adapters/grid/usersync_test.go @@ -0,0 +1,23 @@ +package grid + +import ( + "testing" + + "github.com/prebid/prebid-server/config" + "github.com/prebid/prebid-server/openrtb_ext" + + "github.com/stretchr/testify/assert" +) + +func TestGridSyncer(t *testing.T) { + syncer := NewGridSyncer(&config.Configuration{ExternalURL: "localhost", Adapters: map[string]config.Adapter{ + string(openrtb_ext.BidderGrid): { + UserSyncURL: "//not_localhost/sync", + }, + }}) + u := syncer.GetUsersyncInfo("0", "") + assert.Equal(t, "//not_localhost/synclocalhost%2Fsetuid%3Fbidder%3Dgrid%26gdpr%3D0%26gdpr_consent%3D%26uid%3D%24UID", u.URL) + assert.Equal(t, "redirect", u.Type) + assert.Equal(t, uint16(0), syncer.GDPRVendorID()) + assert.Equal(t, false, u.SupportCORS) +} diff --git a/config/config.go b/config/config.go index 2a9602a8642..e6d97a662ae 100644 --- a/config/config.go +++ b/config/config.go @@ -384,6 +384,8 @@ func SetupViper(v *viper.Viper, filename string) { v.SetDefault("adapters.rhythmone.usersync_url", "//sync.1rx.io/usersync2/rmphb?gdpr={{gdpr}}&gdpr_consent={{gdpr_consent}}&redir=") v.SetDefault("adapters.gumgum.endpoint", "https://g2.gumgum.com/providers/prbds2s/bid") v.SetDefault("adapters.gumgum.usersync_url", "https://rtb.gumgum.com/usync/prbds2s?gdpr={{gdpr}}&gdpr_consent={{gdpr_consent}}&r=") + v.SetDefault("adapters.grid.endpoint", "http://grid.bidswitch.net/sp_bid?sp=prebid") + v.SetDefault("adapters.grid.usersync_url", "http://grid.bidswitch.net/sp_sync?sp_id=prebid&redir=") v.SetDefault("max_request_size", 1024*256) v.SetDefault("analytics.file.filename", "") diff --git a/exchange/adapter_map.go b/exchange/adapter_map.go index d7ee526c321..20aaf0b8f20 100644 --- a/exchange/adapter_map.go +++ b/exchange/adapter_map.go @@ -15,6 +15,7 @@ import ( "github.com/prebid/prebid-server/adapters/brightroll" "github.com/prebid/prebid-server/adapters/conversant" "github.com/prebid/prebid-server/adapters/eplanning" + "github.com/prebid/prebid-server/adapters/grid" "github.com/prebid/prebid-server/adapters/gumgum" "github.com/prebid/prebid-server/adapters/ix" "github.com/prebid/prebid-server/adapters/lifestreet" @@ -55,6 +56,7 @@ func newAdapterMap(client *http.Client, cfg *config.Configuration, infos adapter openrtb_ext.BidderSomoaudience: somoaudience.NewSomoaudienceBidder(cfg.Adapters[string(openrtb_ext.BidderSomoaudience)].Endpoint), openrtb_ext.BidderSovrn: sovrn.NewSovrnBidder(client, cfg.Adapters[string(openrtb_ext.BidderSovrn)].Endpoint), openrtb_ext.Bidder33Across: ttx.New33AcrossBidder(cfg.Adapters[string(openrtb_ext.Bidder33Across)].Endpoint), + openrtb_ext.BidderGrid: grid.NewGridBidder(cfg.Adapters[string(openrtb_ext.BidderGrid)].Endpoint), } legacyBidders := map[openrtb_ext.BidderName]adapters.Adapter{ diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go index 7b42d7be586..2931ad14666 100644 --- a/openrtb_ext/bidders.go +++ b/openrtb_ext/bidders.go @@ -40,6 +40,7 @@ const ( BidderSomoaudience BidderName = "somoaudience" BidderSovrn BidderName = "sovrn" Bidder33Across BidderName = "33across" + BidderGrid BidderName = "grid" ) // BidderMap stores all the valid OpenRTB 2.x Bidders in the project. This map *must not* be mutated. @@ -64,6 +65,7 @@ var BidderMap = map[string]BidderName{ "somoaudience": BidderSomoaudience, "sovrn": BidderSovrn, "33across": Bidder33Across, + "grid": BidderGrid, } // BidderList returns the values of the BidderMap diff --git a/static/bidder-info/grid.yaml b/static/bidder-info/grid.yaml new file mode 100644 index 00000000000..ff457ae69c2 --- /dev/null +++ b/static/bidder-info/grid.yaml @@ -0,0 +1,6 @@ +maintainer: + email: "grid-tech@themediagrid.com" +capabilities: + site: + mediaTypes: + - banner diff --git a/static/bidder-params/grid.json b/static/bidder-params/grid.json new file mode 100644 index 00000000000..7a0cf3da8c5 --- /dev/null +++ b/static/bidder-params/grid.json @@ -0,0 +1,8 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "TheMediaGrid Adapter Params", + "description": "A schema which validates params accepted by TheMediaGrid adapter", + "type": "object", + "properties": {}, + "required": [] +} diff --git a/usersync/usersyncers/syncer.go b/usersync/usersyncers/syncer.go index 52c92d9e38d..0d9f290ad2c 100644 --- a/usersync/usersyncers/syncer.go +++ b/usersync/usersyncers/syncer.go @@ -11,6 +11,7 @@ import ( "github.com/prebid/prebid-server/adapters/brightroll" "github.com/prebid/prebid-server/adapters/conversant" "github.com/prebid/prebid-server/adapters/eplanning" + "github.com/prebid/prebid-server/adapters/grid" "github.com/prebid/prebid-server/adapters/gumgum" "github.com/prebid/prebid-server/adapters/ix" "github.com/prebid/prebid-server/adapters/lifestreet" @@ -51,5 +52,6 @@ func NewSyncerMap(cfg *config.Configuration) map[openrtb_ext.BidderName]usersync openrtb_ext.BidderSomoaudience: somoaudience.NewSomoaudienceSyncer(cfg), openrtb_ext.BidderSovrn: sovrn.NewSovrnSyncer(cfg), openrtb_ext.Bidder33Across: ttx.New33AcrossSyncer(cfg), + openrtb_ext.BidderGrid: grid.NewGridSyncer(cfg), } } diff --git a/usersync/usersyncers/syncer_test.go b/usersync/usersyncers/syncer_test.go index fd1387c584a..4564ce048c4 100644 --- a/usersync/usersyncers/syncer_test.go +++ b/usersync/usersyncers/syncer_test.go @@ -30,6 +30,7 @@ func TestNewSyncerMap(t *testing.T) { string(openrtb_ext.BidderSomoaudience): {}, string(openrtb_ext.BidderSovrn): {}, string(openrtb_ext.Bidder33Across): {}, + string(openrtb_ext.BidderGrid): {}, }, } m := NewSyncerMap(cfg) From 5242e4e6ecab7ad77737c21ad325d0df9f9efda1 Mon Sep 17 00:00:00 2001 From: TheMediaGrid Date: Fri, 16 Aug 2019 18:42:06 +0300 Subject: [PATCH 2/3] Add video support in TheMediaGrid s2s adapter --- adapters/grid/grid.go | 31 ++++++- .../grid/gridtest/exemplary/simple-video.json | 83 +++++++++++++++++++ static/bidder-info/grid.yaml | 1 + 3 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 adapters/grid/gridtest/exemplary/simple-video.json diff --git a/adapters/grid/grid.go b/adapters/grid/grid.go index c454d71c10c..70d59108451 100644 --- a/adapters/grid/grid.go +++ b/adapters/grid/grid.go @@ -8,6 +8,7 @@ import ( "github.com/mxmCherry/openrtb" "github.com/prebid/prebid-server/adapters" "github.com/prebid/prebid-server/errortypes" + "github.com/prebid/prebid-server/openrtb_ext" ) type GridAdapter struct { @@ -62,9 +63,14 @@ func (a *GridAdapter) MakeBids(internalRequest *openrtb.BidRequest, externalRequ for _, sb := range bidResp.SeatBid { for i := range sb.Bid { + bidType, err := getMediaTypeForImp(sb.Bid[i].ImpID, internalRequest.Imp) + if err != nil { + return nil, []error{err} + } + bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{ Bid: &sb.Bid[i], - BidType: "banner", + BidType: bidType, }) } } @@ -78,3 +84,26 @@ func NewGridBidder(endpoint string) *GridAdapter { endpoint: endpoint, } } + +func getMediaTypeForImp(impID string, imps []openrtb.Imp) (openrtb_ext.BidType, error) { + for _, imp := range imps { + if imp.ID == impID { + if imp.Banner != nil { + return openrtb_ext.BidTypeBanner, nil + } + + if imp.Video != nil { + return openrtb_ext.BidTypeVideo, nil + } + + return "", &errortypes.BadServerResponse{ + Message: fmt.Sprintf("Unknown impression type for ID: \"%s\"", impID), + } + } + } + + // This shouldnt happen. Lets handle it just incase by returning an error. + return "", &errortypes.BadServerResponse{ + Message: fmt.Sprintf("Failed to find impression for ID: \"%s\"", impID), + } +} diff --git a/adapters/grid/gridtest/exemplary/simple-video.json b/adapters/grid/gridtest/exemplary/simple-video.json new file mode 100644 index 00000000000..fcf783da2a4 --- /dev/null +++ b/adapters/grid/gridtest/exemplary/simple-video.json @@ -0,0 +1,83 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "site": { + "page": "https://good.site/url" + }, + "imp": [{ + "id": "test-imp-id", + "video": { + "mimes": ["video/mp4"], + "protocols": [2, 5], + "w": 300, + "h": 250 + }, + "ext": { + "bidder": {} + } + }] + }, + + "httpCalls": [{ + "expectedRequest": { + "uri": "http://localhost/prebid", + "body": { + "id": "test-request-id", + "site": { + "page": "https://good.site/url" + }, + "imp": [{ + "id": "test-imp-id", + "video": { + "mimes": ["video/mp4"], + "protocols": [2, 5], + "w": 300, + "h": 250 + }, + "ext": { + "bidder": {} + } + }] + } + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "seatbid": [{ + "seat": "grid", + "bid": [{ + "id": "randomid", + "impid": "test-imp-id", + "price": 0.500000, + "adid": "12345678", + "adm": "some-test-ad-vast", + "cid": "987", + "crid": "12345678", + "h": 250, + "w": 300 + }] + }], + "cur": "USD" + } + } + }], + + "expectedBidResponses": [{ + "currency": "USD", + "bids": [{ + "bid": { + "id": "randomid", + "impid": "test-imp-id", + "price": 0.5, + "adm": "some-test-ad-vast", + "adid": "12345678", + "cid": "987", + "crid": "12345678", + "w": 300, + "h": 250 + }, + "type": "video" + }] + }] +} diff --git a/static/bidder-info/grid.yaml b/static/bidder-info/grid.yaml index ff457ae69c2..9594830c0d0 100644 --- a/static/bidder-info/grid.yaml +++ b/static/bidder-info/grid.yaml @@ -4,3 +4,4 @@ capabilities: site: mediaTypes: - banner + - video From 92451f4efde57f41d02f95acb14001bdbfaefaf2 Mon Sep 17 00:00:00 2001 From: TheMediaGrid Date: Fri, 22 Nov 2019 17:59:15 +0300 Subject: [PATCH 3/3] Update sync url for TheMediaGrid s2s adapter --- config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 65290f0b301..d70eb1578db 100644 --- a/config/config.go +++ b/config/config.go @@ -490,7 +490,7 @@ func (cfg *Configuration) setDerivedDefaults() { setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderEPlanning, "https://ads.us.e-planning.net/uspd/1/?du=https%3A%2F%2Fads.us.e-planning.net%2Fgetuid%2F1%2F5a1ad71d2d53a0f5%3F"+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Deplanning%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID") // openrtb_ext.BidderFacebook doesn't have a good default. // openrtb_ext.BidderGamma doesn't have a good default. - setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderGrid, "https://grid.bidswitch.net/sp_sync?sp_id=prebid&redir="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dgrid%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID") + setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderGrid, "https://x.bidswitch.net/check_uuid/"+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dgrid%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24%7BBSW_UUID%7D?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderGumGum, "https://rtb.gumgum.com/usync/prbds2s?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&r="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dgumgum%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderImprovedigital, "https://ad.360yield.com/server_match?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&r="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dimprovedigital%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%7BPUB_USER_ID%7D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderIx, "https://ssum.casalemedia.com/usermatchredir?s=184932&cb="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dix%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D")