214 lines
7.1 KiB
Go
214 lines
7.1 KiB
Go
|
package search
|
|||
|
|
|||
|
import (
|
|||
|
"context"
|
|||
|
"go-common/library/sync/errgroup"
|
|||
|
"go-common/library/xstr"
|
|||
|
"net/http"
|
|||
|
"net/url"
|
|||
|
"strconv"
|
|||
|
|
|||
|
mdlSearch "go-common/app/interface/main/tv/model/search"
|
|||
|
"go-common/library/ecode"
|
|||
|
"go-common/library/log"
|
|||
|
"go-common/library/net/metadata"
|
|||
|
)
|
|||
|
|
|||
|
// UserSearch search user .
|
|||
|
func (d *Dao) UserSearch(ctx context.Context, arg *mdlSearch.UserSearch) (user []*mdlSearch.User, err error) {
|
|||
|
var (
|
|||
|
params = url.Values{}
|
|||
|
req *http.Request
|
|||
|
ip = metadata.String(ctx, metadata.RemoteIP)
|
|||
|
)
|
|||
|
params.Set("platform", arg.Platform)
|
|||
|
params.Set("mobi_app", arg.MobiAPP)
|
|||
|
params.Set("build", arg.Build)
|
|||
|
params.Set("keyword", arg.Keyword)
|
|||
|
params.Set("page", strconv.Itoa(arg.Page))
|
|||
|
params.Set("pagesize", strconv.Itoa(arg.Pagesize))
|
|||
|
params.Set("userid", strconv.FormatInt(arg.MID, 10))
|
|||
|
params.Set("order", arg.Order)
|
|||
|
params.Set("main_ver", "v3") // 支持赛事搜索
|
|||
|
params.Set("search_type", "bili_user")
|
|||
|
params.Set("user_type", strconv.Itoa(arg.UserType)) // 用户类型
|
|||
|
params.Set("highlight", strconv.Itoa(arg.Highlight))
|
|||
|
params.Set("order_sort", strconv.Itoa(arg.OrderSort))
|
|||
|
params.Set("from_source", arg.FromSource)
|
|||
|
params.Set("bili_user_vl", strconv.Itoa(d.cfgWild.BiliUserVl))
|
|||
|
// new request
|
|||
|
if req, err = d.client.NewRequest("GET", d.userSearch, ip, params); err != nil {
|
|||
|
log.Error("[wild.UserSearch] d.client.NewRequest url(%s) error(%v)", d.userSearch, err)
|
|||
|
return
|
|||
|
}
|
|||
|
req.Header.Set("Buvid", arg.Buvid)
|
|||
|
var res struct {
|
|||
|
Code int `json:"code"`
|
|||
|
SeID string `json:"seid"`
|
|||
|
Pages int `json:"numPages"`
|
|||
|
List []*mdlSearch.User `json:"result"`
|
|||
|
}
|
|||
|
if err = d.client.Do(ctx, req, &res); err != nil {
|
|||
|
log.Error("[wild.UserSearch] d.client.Do url(%s) error(%v)", d.userSearch, err)
|
|||
|
return
|
|||
|
}
|
|||
|
if res.Code != ecode.OK.Code() {
|
|||
|
err = ecode.Int(res.Code)
|
|||
|
log.Error("[wild.UserSearch] url(%s) error(%v)", d.userSearch, err)
|
|||
|
return
|
|||
|
}
|
|||
|
user = res.List
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// SearchAllWild wild search all .
|
|||
|
func (d *Dao) SearchAllWild(ctx context.Context, arg *mdlSearch.UserSearch) (user *mdlSearch.Search, err error) {
|
|||
|
var (
|
|||
|
req *http.Request
|
|||
|
ip = metadata.String(ctx, metadata.RemoteIP)
|
|||
|
)
|
|||
|
params := url.Values{}
|
|||
|
user = &mdlSearch.Search{}
|
|||
|
params.Set("build", arg.Build)
|
|||
|
params.Set("keyword", arg.Keyword)
|
|||
|
params.Set("main_ver", "v3")
|
|||
|
params.Set("mobi_app", arg.MobiAPP)
|
|||
|
params.Set("device", arg.Device)
|
|||
|
params.Set("userid", strconv.FormatInt(arg.MID, 10))
|
|||
|
params.Set("tids", strconv.Itoa(arg.RID))
|
|||
|
params.Set("highlight", strconv.Itoa(arg.Highlight))
|
|||
|
params.Set("page", strconv.Itoa(arg.Page))
|
|||
|
params.Set("pagesize", strconv.Itoa(arg.Pagesize))
|
|||
|
params.Set("bili_user_num", strconv.Itoa(d.cfgWild.BiliUserNum))
|
|||
|
params.Set("bili_user_vl", strconv.Itoa(d.cfgWild.BiliUserVl))
|
|||
|
params.Set("user_num", strconv.Itoa(d.cfgWild.UserNum))
|
|||
|
params.Set("user_video_limit", strconv.Itoa(d.cfgWild.UserVideoLimit))
|
|||
|
params.Set("platform", arg.Platform)
|
|||
|
// params.Set("duration", strconv.Itoa(arg.Duration)) // 视频时长筛选,默认是0
|
|||
|
params.Set("order", arg.Order)
|
|||
|
params.Set("search_type", "all")
|
|||
|
params.Set("from_source", arg.FromSource)
|
|||
|
params.Set("media_bangumi_num", strconv.Itoa(arg.SeasonNum))
|
|||
|
params.Set("movie_num", strconv.Itoa(arg.MovieNum))
|
|||
|
params.Set("is_new_pgc", "1") // 新番剧
|
|||
|
params.Set("media_ft_num", strconv.Itoa(arg.MovieNum))
|
|||
|
// params.Set("flow_need", "1") // 混排
|
|||
|
// params.Set("query_rec_need", "1") // 搜索结果推荐
|
|||
|
// new request
|
|||
|
if req, err = d.client.NewRequest("GET", d.userSearch, ip, params); err != nil {
|
|||
|
log.Error("d.client.NewRequest URI(%s) error(%v)", d.userSearch, err)
|
|||
|
return
|
|||
|
}
|
|||
|
req.Header.Set("Buvid", arg.Buvid)
|
|||
|
if err = d.client.Do(ctx, req, user); err != nil {
|
|||
|
log.Error("[wild.SearchAllWild] d.client.Do() url(%s) error(%v)", d.userSearch, err)
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// card bangumi card .
|
|||
|
func (d *Dao) cardInfo(c context.Context, mid int64, sids []int64) (s map[string]*mdlSearch.Card, err error) {
|
|||
|
ip := metadata.String(c, metadata.RemoteIP)
|
|||
|
params := url.Values{}
|
|||
|
params.Set("mid", strconv.FormatInt(mid, 10))
|
|||
|
params.Set("season_ids", xstr.JoinInts(sids))
|
|||
|
var res struct {
|
|||
|
Code int `json:"code"`
|
|||
|
Result map[string]*mdlSearch.Card `json:"result"`
|
|||
|
}
|
|||
|
if err = d.client.Get(c, d.card, ip, params, &res); err != nil {
|
|||
|
log.Error("d.client.NewRequest url(%s) error(%v)", d.resultURL, err)
|
|||
|
return
|
|||
|
}
|
|||
|
if res.Code != ecode.OK.Code() {
|
|||
|
err = ecode.Int(res.Code)
|
|||
|
log.Error("[wild] cardInfo error(%v)", err)
|
|||
|
return
|
|||
|
}
|
|||
|
s = res.Result
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// PgcSearch .
|
|||
|
func (d *Dao) PgcSearch(c context.Context, arg *mdlSearch.UserSearch) (st *mdlSearch.TypeSearch, err error) {
|
|||
|
var (
|
|||
|
req *http.Request
|
|||
|
ip = metadata.String(c, metadata.RemoteIP)
|
|||
|
seasonIDs []int64
|
|||
|
bangumis map[string]*mdlSearch.Card
|
|||
|
items1, items2 []*mdlSearch.Item
|
|||
|
)
|
|||
|
params := url.Values{}
|
|||
|
params.Set("build", arg.Build)
|
|||
|
params.Set("keyword", arg.Keyword)
|
|||
|
params.Set("main_ver", "v3")
|
|||
|
params.Set("mobi_app", arg.MobiAPP)
|
|||
|
params.Set("device", arg.Device)
|
|||
|
params.Set("userid", strconv.FormatInt(arg.MID, 10))
|
|||
|
params.Set("highlight", strconv.Itoa(arg.Highlight))
|
|||
|
params.Set("page", strconv.Itoa(arg.Page))
|
|||
|
params.Set("pagesize", strconv.Itoa(arg.Pagesize))
|
|||
|
params.Set("platform", arg.Platform)
|
|||
|
params.Set("order", arg.Order)
|
|||
|
params.Set("search_type", "all")
|
|||
|
params.Set("from_source", arg.FromSource)
|
|||
|
params.Set("media_bangumi_num", strconv.Itoa(arg.SeasonNum))
|
|||
|
params.Set("media_ft_num", strconv.Itoa(arg.MovieNum))
|
|||
|
params.Set("is_new_pgc", "1")
|
|||
|
if req, err = d.client.NewRequest("GET", d.userSearch, ip, params); err != nil {
|
|||
|
log.Error("d.client.NewRequest url(%s) error(%v)", d.userSearch, err)
|
|||
|
return
|
|||
|
}
|
|||
|
req.Header.Set("Buvid", arg.Buvid)
|
|||
|
res := &mdlSearch.Search{}
|
|||
|
if err = d.client.Do(c, req, res); err != nil {
|
|||
|
log.Error("[wild.PgcSearch] d.client.Do url(%s) error(%v)", d.userSearch, err)
|
|||
|
return
|
|||
|
}
|
|||
|
if res.Code != ecode.OK.Code() {
|
|||
|
err = ecode.Int(res.Code)
|
|||
|
log.Error("[wild.PgcSearch] code(%d) error(%v)", res.Code, err)
|
|||
|
return
|
|||
|
}
|
|||
|
for _, v := range res.Result.MediaBangumi {
|
|||
|
seasonIDs = append(seasonIDs, v.SeasonID)
|
|||
|
}
|
|||
|
for _, v := range res.Result.MediaFt {
|
|||
|
seasonIDs = append(seasonIDs, v.SeasonID)
|
|||
|
}
|
|||
|
if len(seasonIDs) > 0 {
|
|||
|
if bangumis, err = d.cardInfo(c, arg.MID, seasonIDs); err != nil {
|
|||
|
log.Error("[wild.PgcSearch] MovieByType2 %+v", err)
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
if len(bangumis) > 0 {
|
|||
|
group := new(errgroup.Group)
|
|||
|
group.Go(func() error {
|
|||
|
items1 = make([]*mdlSearch.Item, 0, len(res.Result.MediaBangumi))
|
|||
|
for _, v := range res.Result.MediaBangumi {
|
|||
|
si := &mdlSearch.Item{}
|
|||
|
si.FromMedia(v, "", mdlSearch.GotoMovie, bangumis)
|
|||
|
items1 = append(items1, si)
|
|||
|
}
|
|||
|
return nil
|
|||
|
})
|
|||
|
group.Go(func() error {
|
|||
|
items2 = make([]*mdlSearch.Item, 0, len(res.Result.MediaFt))
|
|||
|
for _, v := range res.Result.MediaFt {
|
|||
|
si := &mdlSearch.Item{}
|
|||
|
si.FromMedia(v, "", mdlSearch.GotoMovie, bangumis)
|
|||
|
items2 = append(items2, si)
|
|||
|
}
|
|||
|
return nil
|
|||
|
})
|
|||
|
if err = group.Wait(); err != nil {
|
|||
|
log.Error("[wild.PgcSearch] group.Wait() is error(%v)", err)
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
items1 = append(items1, items2...)
|
|||
|
st = &mdlSearch.TypeSearch{TrackID: res.Trackid, Pages: res.Page, Total: res.Total, Items: items1}
|
|||
|
return
|
|||
|
}
|