You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.6 KiB
95 lines
2.6 KiB
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 |
|
}
|
|
|