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  }