Files
go-common/app/interface/main/app-show/service/show/ad.go
2019-04-22 18:49:16 +08:00

96 lines
2.6 KiB
Go

package show
import (
"context"
"strconv"
"go-common/app/interface/main/app-show/model"
"go-common/app/interface/main/app-show/model/show"
locmdl "go-common/app/service/main/location/model"
"go-common/library/log"
)
// cpmRecommend
func (s *Service) cpmRecommend(c context.Context, mid int64, build int, buvid, resource, network, mobiApp, device, ipaddr string) (sis map[int]*show.Item) {
if _, ok := s.cpmRcmmndMid[mid]; !ok && (mid == 0 || int(mid)%100 >= s.cpmRcmmndNum) && !s.cpmRcmmndAll {
return
}
var (
info *locmdl.Info
country, province, city string
err error
)
if info, err = s.loc.Info(c, ipaddr); err != nil {
log.Warn("s.loc.Info(%v) error(%v)", ipaddr, err)
err = nil
}
if info != nil {
country = info.Country
province = info.Province
city = info.Province
}
adr, err := s.ad.ADRequest(c, mid, build, buvid, resource, ipaddr, country, province, city, network, mobiApp, device, s.adIsPost)
if err != nil {
log.Error("s.ad.ADRequest error(%v)", err)
return
}
sis = map[int]*show.Item{}
sAdis := adr.ADIndexs[resource]
if len(sAdis) == 0 {
log.Info("mobi_app:%v-build:%v-resource:%v-is_ad_loc:%v", mobiApp, build, resource, false)
return
}
var aids []int64
for sidStr, adi := range sAdis {
sid, _ := strconv.Atoi(sidStr)
var si = &show.Item{
IsAdLoc: true,
IsAd: adi.IsAd,
IsAdReplace: false,
CmMark: adi.CmMark,
Rank: adi.Index,
SrcId: sid,
RequestId: adr.RequestID,
ClientIp: ipaddr,
}
if adInfo := adi.Info; adInfo != nil {
aids = append(aids, adInfo.CreativeContent.VideoID)
// si
si.Goto = model.GotoAv
si.Param = strconv.FormatInt(adInfo.CreativeContent.VideoID, 10)
si.URI = model.FillURI(model.GotoAv, si.Param, nil)
si.Title = adInfo.CreativeContent.Title
si.Cover = model.CoverURL(adInfo.CreativeContent.ImageURL)
si.IsAdReplace = true
si.AdCb = adInfo.AdCb
si.CreativeId = adInfo.CreativeID
si.ShowUrl = adInfo.CreativeContent.ShowURL
si.ClickUrl = adInfo.CreativeContent.ClickURL
}
sis[si.Rank] = si
log.Info("mobi_app:%v-build:%v-resource:%v-is_ad_loc:%v", mobiApp, build, resource, true)
}
if len(aids) == 0 {
return
}
as, err := s.arc.ArchivesPB(c, aids)
if err != nil {
log.Error("s.arc.ArchivesPB(%v) error(%v)", aids, err)
return
}
for _, si := range sis {
aid, _ := strconv.ParseInt(si.Param, 10, 64)
if a, ok := as[aid]; ok && a != nil {
si.Play = int(a.Stat.View)
si.Danmaku = int(a.Stat.Danmaku)
if si.Title == "" {
si.Title = a.Title
}
if si.Cover == "" {
si.Cover = model.CoverURL(a.Pic)
}
}
}
return
}