pixivfe/handler/top.go

96 lines
2.4 KiB
Go

package handler
import (
"fmt"
"pixivfe/models"
"github.com/goccy/go-json"
)
func (p *PixivClient) GetLandingPage(mode string) (models.LandingArtworks, error) {
var context models.LandingArtworks
URL := fmt.Sprintf(LandingPageURL, mode)
response, err := p.PixivRequest(URL)
if err != nil {
return context, err
}
type IDS struct {
Ids []any `json:"ids"`
}
var pages struct {
Pixivision []models.Pixivision `json:"pixivision"`
Follow []any `json:"follow"`
Commission []any `json:"completeRequestIds"`
Newest []any `json:"newPost"`
Recommended IDS `json:"recommend"`
EditorRecommended []any `json:"editorRecommend"`
UserRecommended []any `json:"recommendUser"`
RecommendedByTags []struct {
models.LandingRecommendByTags
Ids []any `json:"ids"`
} `json:"recommendByTag"`
}
var body struct {
Thumbnails json.RawMessage `json:"thumbnails"`
Page json.RawMessage `json:"page"`
}
var artworks struct {
Artworks []models.IllustShort `json:"illust"`
}
err = json.Unmarshal([]byte(response), &body)
if err != nil {
return context, err
}
err = json.Unmarshal([]byte(body.Thumbnails), &artworks)
if err != nil {
return context, err
}
err = json.Unmarshal([]byte(body.Page), &pages)
if err != nil {
return context, err
}
context.Pixivision = pages.Pixivision
// Keep track
count := len(pages.Commission)
context.Commissions = artworks.Artworks[:count]
context.Following = artworks.Artworks[count : count+len(pages.Follow)]
count += len(pages.Follow)
context.Recommended = artworks.Artworks[count : count+len(pages.Recommended.Ids)]
count += len(pages.Recommended.Ids)
context.Newest = artworks.Artworks[count : count+len(pages.Newest)]
count += len(pages.Newest)
// For rankings, we just take 100 anyway
context.Rankings = artworks.Artworks[count : count+100]
count += 100
// IDK what this is
count += len(pages.EditorRecommended)
context.Users = artworks.Artworks[count : count+len(pages.UserRecommended)*3]
count += len(pages.UserRecommended) * 3
for i := 0; i < len(pages.RecommendedByTags); i++ {
temp := pages.RecommendedByTags[i]
temp.Artworks = artworks.Artworks[count : count+min(len(temp.Ids), 18)]
context.RecommendByTags = append(context.RecommendByTags, temp.LandingRecommendByTags)
count += len(temp.Ids)
}
return context, nil
}