123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577 |
- package datadao
- import (
- "context"
- "fmt"
- "net/http"
- "net/url"
- "time"
- "go-common/app/interface/main/mcn/dao/cache"
- "go-common/app/interface/main/mcn/dao/global"
- "go-common/app/interface/main/mcn/model/datamodel"
- "go-common/app/interface/main/mcn/model/mcnmodel"
- "go-common/app/interface/main/mcn/tool/datacenter"
- tagmdl "go-common/app/interface/main/tag/api"
- "go-common/library/log"
- "go-common/library/sync/errgroup"
- )
- // const url for api
- const (
- APIMcnSummary = "http://berserker.bilibili.co/avenger/api/155/query" // 7 see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690
- APIIndexInc = "http://berserker.bilibili.co/avenger/api/156/query" // 3.1
- APIIndexSource = "http://berserker.bilibili.co/avenger/api/159/query" // 3.2
- APIPlaySource = "http://berserker.bilibili.co/avenger/api/161/query" // 3.3
- APIMcnFans = "http://berserker.bilibili.co/avenger/api/168/query" // 3.4
- APIMcnFansInc = "http://berserker.bilibili.co/avenger/api/171/query" // 3.5
- APIMcnFansDec = "http://berserker.bilibili.co/avenger/api/169/query" // 3.6
- APIMcnFansAttentionWay = "http://berserker.bilibili.co/avenger/api/170/query" // 3.7
- APIMcnFansSex = "http://berserker.bilibili.co/avenger/api/162/query" // 3.8
- APIMcnFansAge = "http://berserker.bilibili.co/avenger/api/163/query" // 3.8
- APIMcnFansPlayWay = "http://berserker.bilibili.co/avenger/api/164/query" // 3.8
- APIMcnFansArea = "http://berserker.bilibili.co/avenger/api/165/query" // 3.9
- APIMcnFansType = "http://berserker.bilibili.co/avenger/api/166/query" // 3.10
- APIMcnFansTag = "http://berserker.bilibili.co/avenger/api/167/query" // 3.11
- )
- func (d *Dao) callDataAPI(c context.Context, api string, query *datacenter.Query, res interface{}) (err error) {
- var response = &datacenter.Response{
- Result: res,
- }
- if query.Error() != nil {
- err = query.Error()
- log.Error("query error, err=%s", err)
- return
- }
- var params = url.Values{}
- params.Add("query", query.String())
- if err = d.Client.Get(c, api, params, response); err != nil {
- log.Error("fail to get response, err=%+v", err)
- return
- }
- if response.Code != http.StatusOK {
- err = fmt.Errorf("code:%d, msg:%s", response.Code, response.Msg)
- return
- }
- return
- }
- // GetMcnSummary 7
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-7.mcn获取概要数据
- func (d *Dao) GetMcnSummary(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetDataSummaryReply, err error) {
- res = new(mcnmodel.McnGetDataSummaryReply)
- var tmp []*datamodel.DmConMcnArchiveD
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- ).Limit(1, 0).Order("log_date desc")
- var api = APIMcnSummary
- if err = d.callDataAPI(c, api, q, &tmp); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- if len(tmp) > 0 {
- res.CopyFromDmConMcnArchiveD(tmp[0])
- }
- //log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, tmp[0])
- return
- }
- //GetMcnSummaryCache GetMcnSummary with cache
- func (d *Dao) GetMcnSummaryCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetDataSummaryReply, err error) {
- res = new(mcnmodel.McnGetDataSummaryReply)
- var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetDataSummaryReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
- return d.GetMcnSummary(c, signID, date)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetIndexInc 3.1
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.1.查询MCN增量趋势
- func (d *Dao) GetIndexInc(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetIndexIncReply, err error) {
- res = new(mcnmodel.McnGetIndexIncReply)
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
- ).Limit(30, 0).Order("log_date desc")
- var api = APIIndexInc
- if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- //log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, res.Result[0])
- return
- }
- //GetIndexIncCache GetIndexInc with cache
- func (d *Dao) GetIndexIncCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetIndexIncReply, err error) {
- res = new(mcnmodel.McnGetIndexIncReply)
- var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetIndexIncReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
- return d.GetIndexInc(c, signID, date, tp)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetIndexSource 3.2
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.2.查询MCN下播放稿件来源所在分区
- func (d *Dao) GetIndexSource(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetIndexSourceReply, err error) {
- res = new(mcnmodel.McnGetIndexSourceReply)
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionIn(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
- )
- var api = APIIndexSource
- if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- var tids []int64
- for _, v := range res.Result {
- tids = append(tids, v.TypeID)
- }
- tpNames := cache.GetTidNames(tids)
- for _, v := range res.Result {
- if tpName, ok := tpNames[v.TypeID]; ok {
- v.TypeName = tpName
- }
- }
- //log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, res.Result[0])
- return
- }
- //GetIndexSourceCache GetIndexSource with cache
- func (d *Dao) GetIndexSourceCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetIndexSourceReply, err error) {
- res = new(mcnmodel.McnGetIndexSourceReply)
- var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetIndexSourceReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
- return d.GetIndexSource(c, signID, date, tp)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetPlaySource 3.3
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.3.查询MCN播放设备占比
- func (d *Dao) GetPlaySource(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetPlaySourceReply, err error) {
- res = new(mcnmodel.McnGetPlaySourceReply)
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- ).Limit(1, 0).Order("log_date desc")
- var api = APIPlaySource
- var tmp []*mcnmodel.McnGetPlaySourceReply
- if err = d.callDataAPI(c, api, q, &tmp); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- if len(tmp) > 0 {
- res = tmp[0]
- }
- //log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, tmp)
- return
- }
- //GetPlaySourceCache GetPlaySource with cache
- func (d *Dao) GetPlaySourceCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetPlaySourceReply, err error) {
- res = new(mcnmodel.McnGetPlaySourceReply)
- var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetPlaySourceReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
- return d.GetPlaySource(c, signID, date)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetMcnFans 3.4
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.4.查询MCN粉丝数与活跃度
- func (d *Dao) GetMcnFans(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansReply, err error) {
- res = new(mcnmodel.McnGetMcnFansReply)
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- ).Limit(1, 0).Order("log_date desc")
- var tmp []*mcnmodel.McnGetMcnFansReply
- var api = APIMcnFans
- if err = d.callDataAPI(c, api, q, &tmp); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- if len(tmp) > 0 {
- res = tmp[0]
- }
- //log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, tmp[0])
- return
- }
- //GetMcnFansCache GetMcnFans with cache
- func (d *Dao) GetMcnFansCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansReply, err error) {
- res = new(mcnmodel.McnGetMcnFansReply)
- var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetMcnFansReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
- return d.GetMcnFans(c, signID, date)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetMcnFansInc 3.5
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.5.查询MCN粉丝按天增量
- func (d *Dao) GetMcnFansInc(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansIncReply, err error) {
- res = new(mcnmodel.McnGetMcnFansIncReply)
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- ).Limit(30, 0).Order("log_date desc")
- var api = APIMcnFansInc
- if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- //log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, res.Result[0])
- return
- }
- //GetMcnFansIncCache GetMcnFansInc with cache
- func (d *Dao) GetMcnFansIncCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansIncReply, err error) {
- res = new(mcnmodel.McnGetMcnFansIncReply)
- var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetMcnFansIncReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
- return d.GetMcnFansInc(c, signID, date)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetMcnFansDec 3.6
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.6.查询MCN粉丝取关数按天
- func (d *Dao) GetMcnFansDec(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansDecReply, err error) {
- res = new(mcnmodel.McnGetMcnFansDecReply)
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- ).Limit(30, 0).Order("log_date desc")
- var api = APIMcnFansDec
- if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- //log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, res.Result[0])
- return
- }
- //GetMcnFansDecCache GetMcnFansDec with cache
- func (d *Dao) GetMcnFansDecCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansDecReply, err error) {
- res = new(mcnmodel.McnGetMcnFansDecReply)
- var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetMcnFansDecReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
- return d.GetMcnFansDec(c, signID, date)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetMcnFansAttentionWay 3.7
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.7.查询MCN粉丝关注渠道
- func (d *Dao) GetMcnFansAttentionWay(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansAttentionWayReply, err error) {
- res = new(mcnmodel.McnGetMcnFansAttentionWayReply)
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- ).Limit(1, 0).Order("log_date desc")
- var tmp []*mcnmodel.McnGetMcnFansAttentionWayReply
- var api = APIMcnFansAttentionWay
- if err = d.callDataAPI(c, api, q, &tmp); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- if len(tmp) > 0 {
- res = tmp[0]
- }
- //log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, tmp[0])
- return
- }
- //GetMcnFansAttentionWayCache GetMcnFansAttentionWay with cache
- func (d *Dao) GetMcnFansAttentionWayCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansAttentionWayReply, err error) {
- res = new(mcnmodel.McnGetMcnFansAttentionWayReply)
- var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetMcnFansAttentionWayReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
- return d.GetMcnFansAttentionWay(c, signID, date)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetFansBaseFansAttr 3.8
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.8.查询MCN粉丝/游客基本属性分析(性别占比 观众年龄 观看途径)
- func (d *Dao) GetFansBaseFansAttr(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetBaseFansAttrReply, err error) {
- res = new(mcnmodel.McnGetBaseFansAttrReply)
- var group, _ = errgroup.WithContext(c)
- group.Go(func() (err error) {
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
- ).Limit(1, 0).Order("log_date desc")
- var api = APIMcnFansSex
- var tmp []*datamodel.DmConMcnFansSexW
- if err = d.callDataAPI(context.Background(), api, q, &tmp); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- if len(tmp) > 0 {
- res.FansSex = tmp[0]
- }
- //log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, tmp[0])
- return
- })
- group.Go(func() (err error) {
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
- ).Limit(1, 0).Order("log_date desc")
- var tmp []*datamodel.DmConMcnFansAgeW
- var api = APIMcnFansAge
- if err = d.callDataAPI(context.Background(), api, q, &tmp); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- if len(tmp) > 0 {
- res.FansAge = tmp[0]
- }
- //log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, tmp[0])
- return
- })
- group.Go(func() (err error) {
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
- ).Limit(1, 0).Order("log_date desc")
- var tmp []*datamodel.DmConMcnFansPlayWayW
- var api = APIMcnFansPlayWay
- if err = d.callDataAPI(context.Background(), api, q, &tmp); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- if len(tmp) > 0 {
- res.FansPlayWay = tmp[0]
- }
- //log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, tmp[0])
- return
- })
- err = group.Wait()
- if err != nil {
- log.Error("fail to get data, err=%v", err)
- return
- }
- return
- }
- //GetFansBaseFansAttrCache GetFansBaseFansAttr with cache
- func (d *Dao) GetFansBaseFansAttrCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetBaseFansAttrReply, err error) {
- res = new(mcnmodel.McnGetBaseFansAttrReply)
- var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetBaseFansAttrReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
- return d.GetFansBaseFansAttr(c, signID, date, tp)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetFansArea 3.9
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.9.查询MCN粉丝/游客地区分布分析
- func (d *Dao) GetFansArea(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansAreaReply, err error) {
- res = new(mcnmodel.McnGetFansAreaReply)
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionIn(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
- )
- var api = APIMcnFansArea
- if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- //log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, res.Result[0])
- return
- }
- //GetFansAreaCache GetFansArea with cache
- func (d *Dao) GetFansAreaCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansAreaReply, err error) {
- res = new(mcnmodel.McnGetFansAreaReply)
- var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetFansAreaReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
- return d.GetFansArea(c, signID, date, tp)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetFansType 3.10
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.10.查询MCN粉丝/游客内容倾向分析
- func (d *Dao) GetFansType(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansTypeReply, err error) {
- res = new(mcnmodel.McnGetFansTypeReply)
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionIn(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
- )
- var api = APIMcnFansType
- if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- var tids []int64
- for _, v := range res.Result {
- tids = append(tids, v.TypeID)
- }
- tpNames := cache.GetTidNames(tids)
- for _, v := range res.Result {
- if tpName, ok := tpNames[v.TypeID]; ok {
- v.TypeName = tpName
- }
- }
- //log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, res.Result[0])
- return
- }
- //GetFansTypeCache GetFansType with cache
- func (d *Dao) GetFansTypeCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansTypeReply, err error) {
- res = new(mcnmodel.McnGetFansTypeReply)
- var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetFansTypeReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
- return d.GetFansType(c, signID, date, tp)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
- // GetFansTag 3.11
- // see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.11.查询MCN粉丝/游客标签地图分析
- func (d *Dao) GetFansTag(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansTagReply, err error) {
- res = new(mcnmodel.McnGetFansTagReply)
- var q = &datacenter.Query{}
- q.Select("*").Where(
- datacenter.ConditionMapType{"log_date": datacenter.ConditionIn(date)},
- datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
- datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
- )
- var api = APIMcnFansTag
- if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
- log.Error("call data api fail, api=%s, err=%s", api, err)
- return
- }
- var tagIDs []int64
- for _, v := range res.Result {
- tagIDs = append(tagIDs, v.TagID)
- }
- var tagsReply *tagmdl.TagsReply
- if tagsReply, err = global.GetTagGRPC().Tags(c, &tagmdl.TagsReq{Tids: tagIDs}); err != nil {
- log.Error("tag(%+v) grpc client fail, err=%s", tagIDs, err)
- err = nil
- }
- for _, v := range res.Result {
- if tagsReply == nil {
- continue
- }
- if tag, ok := tagsReply.Tags[v.TagID]; ok {
- v.TagName = tag.Name
- }
- }
- //log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, res.Result[0])
- return
- }
- //GetFansTagCache GetFansTag with cache
- func (d *Dao) GetFansTagCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansTagReply, err error) {
- res = new(mcnmodel.McnGetFansTagReply)
- var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetFansTagReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
- return d.GetFansTag(c, signID, date, tp)
- })
- if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
- log.Error("cache get err, err=%v", err)
- return
- }
- return
- }
|