diff --git a/adapters/adgeneration/adgeneration.go b/adapters/adgeneration/adgeneration.go new file mode 100644 index 00000000000..3d56013b308 --- /dev/null +++ b/adapters/adgeneration/adgeneration.go @@ -0,0 +1,65 @@ +package adgeneration + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/mxmCherry/openrtb" + "github.com/prebid/prebid-server/adapters" + "github.com/prebid/prebid-server/errortypes" +) + +type AdGenerationAdapter struct { + endpoint string +} + +func (adg *AdGenerationAdapter) MakeRequests(request *openrtb.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) { + numRequests := len(request.Imp) + var errs []error + + reqs := make([]*adapters.RequestData, 0, numRequests) + for index := 0; index < numRequests; index++ { + headers := http.Header{} + headers.Add("Content-Type", "application/json;charset=utf-8") + headers.Add("Accept", "application/json") + + reqJSON, err := json.Marshal(request) + if err != nil { + errs = append(errs, err) + return nil, errs + } + + req := &adapters.RequestData{ + Method: "POST", + Uri: adg.endpoint, + Body: reqJSON, + Headers: headers, + } + reqs = append(reqs, req) + } + + return reqs, errs +} +func (adg *AdGenerationAdapter) MakeBids(internalRequest *openrtb.BidRequest, externalRequest *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) { + var errs []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{fmt.Errorf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode)} + } + return nil, errs +} + +func NewAdGenerationAdapter(endpoint string) *AdGenerationAdapter { + return &AdGenerationAdapter{ + endpoint, + } +} diff --git a/adapters/adgeneration/adgeneration_test.go b/adapters/adgeneration/adgeneration_test.go new file mode 100644 index 00000000000..27f8716ffc6 --- /dev/null +++ b/adapters/adgeneration/adgeneration_test.go @@ -0,0 +1 @@ +package adgeneration \ No newline at end of file diff --git a/adapters/adgeneration/params_test.go b/adapters/adgeneration/params_test.go new file mode 100644 index 00000000000..27f8716ffc6 --- /dev/null +++ b/adapters/adgeneration/params_test.go @@ -0,0 +1 @@ +package adgeneration \ No newline at end of file diff --git a/adapters/adgeneration/usersync.go b/adapters/adgeneration/usersync.go new file mode 100644 index 00000000000..3db8b5fe18e --- /dev/null +++ b/adapters/adgeneration/usersync.go @@ -0,0 +1,13 @@ +package adgeneration + +import ( + "text/template" + + "github.com/prebid/prebid-server/adapters" + "github.com/prebid/prebid-server/usersync" +) + +func NewAdGenerationSyncer(temp *template.Template) usersync.Usersyncer { + // TOOD: GDPR VenderID の存在について調べる + return adapters.NewSyncer("adgeneration", 0, temp, adapters.SyncTypeRedirect) +} diff --git a/adapters/adgeneration/usersync_test.go b/adapters/adgeneration/usersync_test.go new file mode 100644 index 00000000000..27f8716ffc6 --- /dev/null +++ b/adapters/adgeneration/usersync_test.go @@ -0,0 +1 @@ +package adgeneration \ No newline at end of file diff --git a/exchange/adapter_map.go b/exchange/adapter_map.go index 95f5b7f5882..567bdef9ac4 100644 --- a/exchange/adapter_map.go +++ b/exchange/adapter_map.go @@ -10,6 +10,7 @@ import ( "github.com/prebid/prebid-server/adapters" ttx "github.com/prebid/prebid-server/adapters/33across" "github.com/prebid/prebid-server/adapters/adform" + "github.com/prebid/prebid-server/adapters/adgeneration" "github.com/prebid/prebid-server/adapters/adkernel" "github.com/prebid/prebid-server/adapters/adkernelAdn" "github.com/prebid/prebid-server/adapters/adpone" @@ -69,6 +70,7 @@ func newAdapterMap(client *http.Client, cfg *config.Configuration, infos adapter ortbBidders := map[openrtb_ext.BidderName]adapters.Bidder{ openrtb_ext.Bidder33Across: ttx.New33AcrossBidder(cfg.Adapters[string(openrtb_ext.Bidder33Across)].Endpoint), openrtb_ext.BidderAdform: adform.NewAdformBidder(client, cfg.Adapters[string(openrtb_ext.BidderAdform)].Endpoint), + openrtb_ext.BidderAdgeneration: adgeneration.NewAdGenerationAdapter(cfg.Adapters[string(openrtb_ext.BidderAdgeneration)].Endpoint), openrtb_ext.BidderAdkernel: adkernel.NewAdkernelAdapter(cfg.Adapters[strings.ToLower(string(openrtb_ext.BidderAdkernel))].Endpoint), openrtb_ext.BidderAdkernelAdn: adkernelAdn.NewAdkernelAdnAdapter(cfg.Adapters[strings.ToLower(string(openrtb_ext.BidderAdkernelAdn))].Endpoint), openrtb_ext.BidderAdpone: adpone.NewAdponeBidder(cfg.Adapters[string(openrtb_ext.BidderAdpone)].Endpoint), diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go index 7a3f24eb07f..e08a00ed2bc 100644 --- a/openrtb_ext/bidders.go +++ b/openrtb_ext/bidders.go @@ -22,6 +22,7 @@ type BidderName string const ( Bidder33Across BidderName = "33across" BidderAdform BidderName = "adform" + BidderAdgeneration BidderName = "adgeneration" BidderAdkernel BidderName = "adkernel" BidderAdkernelAdn BidderName = "adkernelAdn" BidderAdpone BidderName = "adpone" @@ -77,6 +78,7 @@ const ( var BidderMap = map[string]BidderName{ "33across": Bidder33Across, "adform": BidderAdform, + "adgeneration": BidderAdgeneration, "adkernel": BidderAdkernel, "adkernelAdn": BidderAdkernelAdn, "adpone": BidderAdpone, diff --git a/static/bidder-params/adgeneration.json b/static/bidder-params/adgeneration.json new file mode 100644 index 00000000000..2f2c5899fac --- /dev/null +++ b/static/bidder-params/adgeneration.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "AdGeneration Adapter Params", + "description": "A schema which validates params accepted by the AdGeneration adapter", + + "type": "object", + "properties": { + "id": { + "type": "integer", + "minimum": 1, + "description": "Ad ID registered by AdGeneration." + } + }, + "required": ["id"] + } + \ No newline at end of file diff --git a/usersync/usersyncers/syncer.go b/usersync/usersyncers/syncer.go index 5447cd28800..e094f4ac258 100644 --- a/usersync/usersyncers/syncer.go +++ b/usersync/usersyncers/syncer.go @@ -9,6 +9,7 @@ import ( "github.com/golang/glog" ttx "github.com/prebid/prebid-server/adapters/33across" "github.com/prebid/prebid-server/adapters/adform" + "github.com/prebid/prebid-server/adapters/adgeneration" "github.com/prebid/prebid-server/adapters/adkernel" "github.com/prebid/prebid-server/adapters/adkernelAdn" "github.com/prebid/prebid-server/adapters/adtelligent" @@ -66,6 +67,7 @@ func NewSyncerMap(cfg *config.Configuration) map[openrtb_ext.BidderName]usersync insertIntoMap(cfg, syncers, openrtb_ext.Bidder33Across, ttx.New33AcrossSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderAdform, adform.NewAdformSyncer) + insertIntoMap(cfg, syncers, openrtb_ext.BidderAdgeneration, adgeneration.NewAdGenerationSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderAdkernel, adkernel.NewAdkernelSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderAdkernelAdn, adkernelAdn.NewAdkernelAdnSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderAdpone, adpone.NewadponeSyncer) diff --git a/usersync/usersyncers/syncer_test.go b/usersync/usersyncers/syncer_test.go index ded8fd2bd78..1cbe2d64137 100644 --- a/usersync/usersyncers/syncer_test.go +++ b/usersync/usersyncers/syncer_test.go @@ -16,6 +16,7 @@ func TestNewSyncerMap(t *testing.T) { Adapters: map[string]config.Adapter{ string(openrtb_ext.Bidder33Across): syncConfig, string(openrtb_ext.BidderAdform): syncConfig, + string(openrtb_ext.BidderAdgeneration): syncConfig, string(openrtb_ext.BidderAdkernel): syncConfig, string(openrtb_ext.BidderAdkernelAdn): syncConfig, string(openrtb_ext.BidderAdpone): syncConfig,