github.com/prebid/prebid-server@v0.275.0/adapters/zeta_global_ssp/zeta_global_ssp.go (about) 1 package zeta_global_ssp 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/errortypes" 12 "github.com/prebid/prebid-server/openrtb_ext" 13 ) 14 15 type adapter struct { 16 endpoint string 17 } 18 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, requestInfo *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 headers.Add("Accept", "application/json") 35 36 requestData := &adapters.RequestData{ 37 Method: "POST", 38 Uri: a.endpoint, 39 Body: requestJson, 40 Headers: headers, 41 } 42 43 return []*adapters.RequestData{requestData}, nil 44 } 45 46 func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) { 47 if adapters.IsResponseStatusCodeNoContent(responseData) { 48 return nil, nil 49 } 50 51 if err := adapters.CheckResponseStatusCodeForErrors(responseData); err != nil { 52 return nil, []error{err} 53 } 54 55 var response openrtb2.BidResponse 56 if err := json.Unmarshal(responseData.Body, &response); err != nil { 57 return nil, []error{err} 58 } 59 60 bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp)) 61 bidResponse.Currency = response.Cur 62 var errors []error 63 for _, seatBid := range response.SeatBid { 64 for i := range seatBid.Bid { 65 bidType, err := getMediaTypeForBid(seatBid.Bid[i]) 66 if err != nil { 67 errors = append(errors, err) 68 continue 69 } 70 b := &adapters.TypedBid{ 71 Bid: &seatBid.Bid[i], 72 BidType: bidType, 73 } 74 bidResponse.Bids = append(bidResponse.Bids, b) 75 } 76 } 77 return bidResponse, errors 78 } 79 80 func getMediaTypeForBid(bid openrtb2.Bid) (openrtb_ext.BidType, error) { 81 if bid.Ext != nil { 82 var bidExt openrtb_ext.ExtBid 83 err := json.Unmarshal(bid.Ext, &bidExt) 84 if err == nil && bidExt.Prebid != nil { 85 return openrtb_ext.ParseBidType(string(bidExt.Prebid.Type)) 86 } 87 } 88 89 return "", &errortypes.BadServerResponse{ 90 Message: fmt.Sprintf("Failed to parse impression \"%s\" mediatype", bid.ImpID), 91 } 92 }