github.com/prebid/prebid-server@v0.275.0/adapters/smaato/richmedia.go (about) 1 package smaato 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/prebid/prebid-server/errortypes" 7 "net/url" 8 "strings" 9 ) 10 11 type richMediaAd struct { 12 RichMedia richmedia `json:"richmedia"` 13 } 14 type mediadata struct { 15 Content string `json:"content"` 16 W int `json:"w"` 17 H int `json:"h"` 18 } 19 20 type richmedia struct { 21 MediaData mediadata `json:"mediadata"` 22 Impressiontrackers []string `json:"impressiontrackers"` 23 Clicktrackers []string `json:"clicktrackers"` 24 } 25 26 func extractAdmRichMedia(adMarkup string) (string, error) { 27 var richMediaAd richMediaAd 28 if err := json.Unmarshal([]byte(adMarkup), &richMediaAd); err != nil { 29 return "", &errortypes.BadServerResponse{ 30 Message: fmt.Sprintf("Invalid ad markup %s.", adMarkup), 31 } 32 } 33 34 var clickEvent strings.Builder 35 var impressionTracker strings.Builder 36 37 for _, clicktracker := range richMediaAd.RichMedia.Clicktrackers { 38 clickEvent.WriteString("fetch(decodeURIComponent('" + url.QueryEscape(clicktracker) + "'), " + 39 "{cache: 'no-cache'});") 40 } 41 for _, impression := range richMediaAd.RichMedia.Impressiontrackers { 42 impressionTracker.WriteString(fmt.Sprintf(`<img src="%s" alt="" width="0" height="0"/>`, impression)) 43 } 44 45 richmediaAdMarkup := fmt.Sprintf(`<div onclick="%s">%s%s</div>`, 46 &clickEvent, richMediaAd.RichMedia.MediaData.Content, &impressionTracker) 47 48 return richmediaAdMarkup, nil 49 }