116 lines
1.5 KiB
Go
116 lines
1.5 KiB
Go
package anilist
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/goccy/go-json"
|
|
"seanime/internal/util"
|
|
"strconv"
|
|
)
|
|
|
|
func FetchBaseAnimeMap(ids []int) (ret map[int]*BaseAnime, err error) {
|
|
|
|
query := fmt.Sprintf(CompoundBaseAnimeDocument, newCompoundQuery(ids))
|
|
|
|
requestBody, err := json.Marshal(map[string]interface{}{
|
|
"query": query,
|
|
"variables": nil,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
data, err := customQuery(requestBody, util.NewLogger())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var res map[string]*BaseAnime
|
|
|
|
dataB, err := json.Marshal(data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = json.Unmarshal(dataB, &res)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
ret = make(map[int]*BaseAnime)
|
|
for k, v := range res {
|
|
id, err := strconv.Atoi(k[1:])
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
ret[id] = v
|
|
}
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
func newCompoundQuery(ids []int) string {
|
|
var query string
|
|
for _, id := range ids {
|
|
query += fmt.Sprintf(`
|
|
t%d: Media(id: %d) {
|
|
...baseAnime
|
|
}
|
|
`, id, id)
|
|
}
|
|
return query
|
|
}
|
|
|
|
const CompoundBaseAnimeDocument = `query CompoundQueryTest {
|
|
%s
|
|
}
|
|
fragment baseAnime on Media {
|
|
id
|
|
idMal
|
|
siteUrl
|
|
status(version: 2)
|
|
season
|
|
type
|
|
format
|
|
bannerImage
|
|
episodes
|
|
synonyms
|
|
isAdult
|
|
countryOfOrigin
|
|
meanScore
|
|
description
|
|
genres
|
|
duration
|
|
trailer {
|
|
id
|
|
site
|
|
thumbnail
|
|
}
|
|
title {
|
|
userPreferred
|
|
romaji
|
|
english
|
|
native
|
|
}
|
|
coverImage {
|
|
extraLarge
|
|
large
|
|
medium
|
|
color
|
|
}
|
|
startDate {
|
|
year
|
|
month
|
|
day
|
|
}
|
|
endDate {
|
|
year
|
|
month
|
|
day
|
|
}
|
|
nextAiringEpisode {
|
|
airingAt
|
|
timeUntilAiring
|
|
episode
|
|
}
|
|
}`
|