Skip to content

Commit

Permalink
[feature] 随机接口增加tags
Browse files Browse the repository at this point in the history
  • Loading branch information
kyrie committed Jan 27, 2023
1 parent 2c6809f commit cab616d
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 17 deletions.
25 changes: 18 additions & 7 deletions internal/app/api/idl/bilibili_picture.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,22 +89,33 @@ type BilibiliPicturesRecommendResp struct {
}

type BilibiliPictureRandomResp struct {
BilibiliDynamicPicture
BilibiliRandomPicture
DynamicURL string `json:"dynamic_url"`
}
type BilibiliDynamicDTO struct {
DynamicID uint64 `json:"dynamic_id"`
Pictures BilibiliDynamicPictures `json:"pictures"`
SentAt uint64 `json:"sent_at"`
}

type BilibiliRandomPictures []BilibiliRandomPicture
type BilibiliRandomPicture struct {
Height float64 `json:"img_height"`
Size float64 `json:"img_size"`
Width float64 `json:"img_width"`
ImgSrc string `json:"img_src"`
DynamicID uint64 `json:"dynamic_id"`
Tags []BilibiliRandomPictureTag `json:"tags"`
}
type BilibiliRandomPictureTag struct {
TagID uint64 `json:"tag_id"`
TagName string `json:"tag_name"`
}
type BilibiliDynamicPictures []BilibiliDynamicPicture
type BilibiliDynamicPicture struct {
Height float64 `json:"img_height"`
Size float64 `json:"img_size"`
Width float64 `json:"img_width"`
ImgSrc string `json:"img_src"`
DynamicID uint64 `json:"dynamic_id"`
Height float64 `json:"img_height"`
Size float64 `json:"img_size"`
Width float64 `json:"img_width"`
ImgSrc string `json:"img_src"`
}

type BilibiliDynamicTopicDetails []BilibiliDynamicTopicDetail
Expand Down
45 changes: 36 additions & 9 deletions internal/app/api/service/bilbil_picture.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,26 @@ func (c *RandomPicsCache) flush() {
c.log.Error("randomPicsCache flush error ", zap.Error(err), zap.Time("time", now), zap.Int("list", len(list)))
return
}
pictures := make(idl.BilibiliDynamicPictures, 0)
pictures := make(idl.BilibiliRandomPictures, 0)
for i := range list {
tags := make([]idl.BilibiliRandomPictureTag, 0)
if list[i].TopicDetails != nil {
for _, v := range *list[i].TopicDetails {
tags = append(tags, idl.BilibiliRandomPictureTag{
TagID: v.TopicID,
TagName: v.TopicName,
})
}
}
for j := range list[i].Pictures {
pictures = append(pictures,
idl.BilibiliDynamicPicture{
idl.BilibiliRandomPicture{
Height: list[i].Pictures[j].Height,
Size: list[i].Pictures[j].Size,
Width: list[i].Pictures[j].Width,
ImgSrc: list[i].Pictures[j].ImgSrc,
DynamicID: list[i].DynamicID,
Tags: tags,
})
}
}
Expand Down Expand Up @@ -146,21 +156,21 @@ func (service *BilbilPicture) Recommend(ctx context.Context, req idl.BilibiliPic
}

func (service *BilbilPicture) Random(ctx context.Context) (*idl.BilibiliPictureRandomResp, error) {
now := time.Now()
rand.Seed(now.UnixNano())
if randomPicsCache.success {
value, ok := randomPicsCache.syncMap.Load(overall)
if ok {
pictures, ok := value.(idl.BilibiliDynamicPictures)
pictures, ok := value.(idl.BilibiliRandomPictures)
if ok && len(pictures) != 0 {
idx := rand.Intn(len(pictures))
resp := &idl.BilibiliPictureRandomResp{}
resp.BilibiliDynamicPicture = pictures[idx]
resp.BilibiliRandomPicture = pictures[idx]
resp.DynamicURL = fmt.Sprintf(DynamicURL, pictures[idx].DynamicID)
return resp, nil
}
}
}
now := time.Now()
rand.Seed(now.UnixNano())
tx := service.db.WithContext(ctx)
picRepository := repository.NewBilibiliPicture(tx)
list, err := picRepository.Random(rand.Float64())
Expand All @@ -170,15 +180,32 @@ func (service *BilbilPicture) Random(ctx context.Context) (*idl.BilibiliPictureR
if len(list) == 0 {
return nil, errRandomPictureNotFound
}
pictures := make(idl.BilibiliDynamicPictures, 0)
pictures := make(idl.BilibiliRandomPictures, 0)
for i := range list {
tags := make([]idl.BilibiliRandomPictureTag, 0)
if list[i].TopicDetails != nil {
for _, v := range *list[i].TopicDetails {
tags = append(tags, idl.BilibiliRandomPictureTag{
TagID: v.TopicID,
TagName: v.TopicName,
})
}
}
for j := range list[i].Pictures {
pictures = append(pictures, list[i].Pictures[j])
pictures = append(pictures,
idl.BilibiliRandomPicture{
Height: list[i].Pictures[j].Height,
Size: list[i].Pictures[j].Size,
Width: list[i].Pictures[j].Width,
ImgSrc: list[i].Pictures[j].ImgSrc,
DynamicID: list[i].DynamicID,
Tags: tags,
})
}
}
idx := rand.Intn(len(pictures))
resp := &idl.BilibiliPictureRandomResp{}
resp.BilibiliDynamicPicture = pictures[idx]
resp.BilibiliRandomPicture = pictures[idx]
resp.DynamicURL = fmt.Sprintf(DynamicURL, pictures[idx].DynamicID)
return resp, nil
}
2 changes: 1 addition & 1 deletion internal/repository/bilibili_picture.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ func (impl *BilibiliPictureMysqlImpl) Random(rand float64) (list []*idl.Bilibili
return nil, err
}
offset := math.Floor((pair.MaxId - pair.MinId) * rand)
err = conn.Where("id >= ?", uint64(pair.MinId+offset)).Select("dynamic_id,pictures").Limit(5).Find(&list).Error
err = conn.Where("id >= ?", uint64(pair.MinId+offset)).Select("dynamic_id,pictures,topic_details").Limit(5).Find(&list).Error
if err != nil {
return nil, err
}
Expand Down

0 comments on commit cab616d

Please sign in to comment.