123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package data
- import (
- "context"
- "fmt"
- "net/url"
- "go-common/app/admin/main/videoup/conf"
- "go-common/library/log"
- bm "go-common/library/net/http/blademaster"
- "go-common/library/xstr"
- "gopkg.in/h2non/gock.v1"
- "strings"
- "strconv"
- )
- // data.bilibili.co/recsys/related?key=XXAVID
- const (
- _relatedURL = "/recsys/related"
- _moniOidsURL = "/x/internal/aegis/monitor/result/oids"
- )
- // Dao is search dao
- type Dao struct {
- c *bm.ClientConfig
- httpClient *bm.Client
- relatedURI string
- moniOidsURI string
- }
- var (
- d *Dao
- )
- // New new search dao
- func New(c *conf.Config) *Dao {
- return &Dao{
- c: c.HTTPClient.Read,
- httpClient: bm.NewClient(c.HTTPClient.Read),
- relatedURI: c.Host.Data + _relatedURL,
- moniOidsURI: c.Host.API + _moniOidsURL,
- }
- }
- // ArchiveRelated get related archive from ai
- func (d *Dao) ArchiveRelated(c context.Context, aidarr []int64) (aids string, err error) {
- params := url.Values{}
- params.Set("key", xstr.JoinInts(aidarr))
- res := new(struct {
- Code int `json:"code"`
- Data []struct {
- Key string `json:"key"`
- Value string `json:"value"`
- } `json:"data"`
- })
- if err = d.httpClient.Get(c, d.relatedURI, "", params, res); err != nil || res == nil {
- log.Error(" d.httpClient.Get error(%v)", err)
- return
- }
- log.Info("ArchiveRelated aids(%v) res(%+v)", aids, res)
- if res.Code != 0 {
- err = fmt.Errorf("data.bilibili.co错误(%d)", res.Code)
- log.Error(" d.httpClient.Get res(%+v)", res)
- return
- }
- if len(res.Data) > 0 {
- for _, item := range res.Data {
- if len(item.Value) > 0 {
- if len(aids) == 0 {
- aids = item.Value
- } else {
- aids += "," + item.Value
- }
- }
- }
- }
- return
- }
- // MonitorOids 获取监控的id
- func (d *Dao) MonitorOids(c context.Context, id int64) (oidMap map[int64]int, err error) {
- oidMap = make(map[int64]int)
- params := url.Values{}
- params.Set("id", strconv.Itoa(int(id)))
- res := new(struct {
- Code int `json:"code"`
- Data []struct {
- OID int64 `json:"oid"`
- Time int `json:"time"`
- } `json:"data"`
- })
- if err = d.httpClient.Get(c, d.moniOidsURI, "", params, res); err != nil || res == nil {
- log.Error("d.MonitorOids() d.httpClient.Get(%s,%v) error(%v)", d.moniOidsURI, params, err)
- return
- }
- if res.Code != 0 {
- err = fmt.Errorf("monitor return code(%d)", res.Code)
- log.Error("d.MonitorOids() d.httpClient.Get(%s,%v) res(%v)", d.moniOidsURI, params, res)
- return
- }
- for _, v := range res.Data {
- oidMap[v.OID] = v.Time
- }
- return
- }
- func httpMock(method, url string) *gock.Request {
- r := gock.New(url)
- r.Method = strings.ToUpper(method)
- d.httpClient.SetTransport(gock.DefaultTransport)
- return r
- }
|