github.com/prebid/prebid-server@v0.275.0/adapters/stroeerCore/stroeercore.go (about) 1 package stroeerCore 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 8 "github.com/prebid/openrtb/v19/openrtb2" 9 10 "github.com/prebid/prebid-server/adapters" 11 "github.com/prebid/prebid-server/config" 12 "github.com/prebid/prebid-server/errortypes" 13 "github.com/prebid/prebid-server/openrtb_ext" 14 ) 15 16 type adapter struct { 17 URL string `json:"url"` 18 Server config.Server 19 } 20 21 type response struct { 22 Bids []bidResponse `json:"bids"` 23 } 24 25 type bidResponse struct { 26 ID string `json:"id"` 27 BidID string `json:"bidId"` 28 CPM float64 `json:"cpm"` 29 Width int64 `json:"width"` 30 Height int64 `json:"height"` 31 Ad string `json:"ad"` 32 CrID string `json:"crid"` 33 } 34 35 func (a *adapter) MakeBids(bidRequest *openrtb2.BidRequest, requestData *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) { 36 if responseData.StatusCode != http.StatusOK { 37 return nil, []error{&errortypes.BadServerResponse{ 38 Message: fmt.Sprintf("Unexpected http status code: %d.", responseData.StatusCode), 39 }} 40 } 41 42 var errors []error 43 stroeerResponse := response{} 44 45 if err := json.Unmarshal(responseData.Body, &stroeerResponse); err != nil { 46 errors = append(errors, err) 47 return nil, errors 48 } 49 50 bidderResponse := adapters.NewBidderResponseWithBidsCapacity(len(stroeerResponse.Bids)) 51 bidderResponse.Currency = "EUR" 52 53 for _, bid := range stroeerResponse.Bids { 54 openRtbBid := openrtb2.Bid{ 55 ID: bid.ID, 56 ImpID: bid.BidID, 57 W: bid.Width, 58 H: bid.Height, 59 Price: bid.CPM, 60 AdM: bid.Ad, 61 CrID: bid.CrID, 62 } 63 64 bidderResponse.Bids = append(bidderResponse.Bids, &adapters.TypedBid{ 65 Bid: &openRtbBid, 66 BidType: openrtb_ext.BidTypeBanner, 67 }) 68 } 69 70 return bidderResponse, errors 71 } 72 73 func (a *adapter) MakeRequests(bidRequest *openrtb2.BidRequest, extraRequestInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) { 74 var errors []error 75 76 for idx := range bidRequest.Imp { 77 imp := &bidRequest.Imp[idx] 78 var bidderExt adapters.ExtImpBidder 79 if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil { 80 errors = append(errors, err) 81 continue 82 } 83 84 var stroeerExt openrtb_ext.ExtImpStroeerCore 85 if err := json.Unmarshal(bidderExt.Bidder, &stroeerExt); err != nil { 86 errors = append(errors, err) 87 continue 88 } 89 90 imp.TagID = stroeerExt.Sid 91 } 92 93 reqJSON, err := json.Marshal(bidRequest) 94 if err != nil { 95 errors = append(errors, err) 96 return nil, errors 97 } 98 99 headers := http.Header{} 100 headers.Add("Content-Type", "application/json;charset=utf-8") 101 headers.Add("Accept", "application/json") 102 103 return []*adapters.RequestData{{ 104 Method: "POST", 105 Uri: a.URL, 106 Body: reqJSON, 107 Headers: headers, 108 }}, errors 109 } 110 111 // Builder builds a new instance of the StroeerCore adapter for the given bidder with the given config. 112 func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) { 113 bidder := &adapter{ 114 URL: config.Endpoint, 115 } 116 return bidder, nil 117 }