github.com/prebid/prebid-server@v0.275.0/adapters/coinzilla/coinzilla.go (about) 1 package coinzilla 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/config" 10 "github.com/prebid/prebid-server/openrtb_ext" 11 12 "github.com/prebid/prebid-server/adapters" 13 "github.com/prebid/prebid-server/errortypes" 14 ) 15 16 func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) { 17 bidder := &adapter{ 18 endpoint: config.Endpoint, 19 } 20 return bidder, nil 21 } 22 23 type adapter struct { 24 endpoint string 25 } 26 27 func (adapter *adapter) MakeRequests(openRTBRequest *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) (requestsToBidder []*adapters.RequestData, errs []error) { 28 if len(openRTBRequest.Imp) == 0 { 29 return nil, []error{&errortypes.BadInput{ 30 Message: "No impression in the bid request", 31 }} 32 } 33 openRTBRequestJSON, err := json.Marshal(openRTBRequest) 34 if err != nil { 35 errs = append(errs, err) 36 return nil, errs 37 } 38 39 headers := http.Header{} 40 headers.Add("Content-Type", "application/json;charset=utf-8") 41 headers.Add("Accept", "application/json") 42 headers.Add("x-openrtb-version", "2.5") 43 44 requestToBidder := &adapters.RequestData{ 45 Method: "POST", 46 Uri: adapter.endpoint, 47 Body: openRTBRequestJSON, 48 Headers: headers, 49 } 50 requestsToBidder = append(requestsToBidder, requestToBidder) 51 52 return requestsToBidder, errs 53 } 54 55 func (adapter *adapter) MakeBids(openRTBRequest *openrtb2.BidRequest, requestToBidder *adapters.RequestData, bidderRawResponse *adapters.ResponseData) (bidderResponse *adapters.BidderResponse, errs []error) { 56 switch bidderRawResponse.StatusCode { 57 case http.StatusOK: 58 break 59 case http.StatusNoContent: 60 return nil, nil 61 default: 62 err := &errortypes.BadServerResponse{ 63 Message: fmt.Sprintf("Unexpected code: %d. Run with request.debug = 1", bidderRawResponse.StatusCode), 64 } 65 return nil, []error{err} 66 } 67 68 var openRTBBidderResponse openrtb2.BidResponse 69 if err := json.Unmarshal(bidderRawResponse.Body, &openRTBBidderResponse); err != nil { 70 return nil, []error{err} 71 } 72 73 bidsCapacity := len(openRTBBidderResponse.SeatBid[0].Bid) 74 bidderResponse = adapters.NewBidderResponseWithBidsCapacity(bidsCapacity) 75 bidderResponse.Currency = openRTBBidderResponse.Cur 76 var typedBid *adapters.TypedBid 77 for _, seatBid := range openRTBBidderResponse.SeatBid { 78 for i := range seatBid.Bid { 79 typedBid = &adapters.TypedBid{Bid: &seatBid.Bid[i], BidType: "banner"} 80 bidderResponse.Bids = append(bidderResponse.Bids, typedBid) 81 } 82 } 83 84 return bidderResponse, nil 85 }