MalConvert

This commit is contained in:
daru
2022-04-16 19:20:19 +02:00
parent 95baa2f40c
commit 1910cb3079
2 changed files with 61 additions and 15 deletions

View File

@@ -12,28 +12,31 @@ import (
"github.com/valyala/fasthttp"
)
func GetAnimeDetailData(animeId int64) (*AnimeDetailMal, []byte, error) {
var anime AnimeDetailMal
body, err := GetAnimeDetailBytesCached(animeId)
if err != nil {
return nil, body, err
}
err = json.Unmarshal(body, &anime)
return &anime, body, err
}
func GetAnimeDetailBytesCached(animeId int64) ([]byte, error) {
func GetAnimeDetailData(animeId int64) (*Anime, []byte, error) {
var anime Anime
key := strconv.FormatInt(animeId, 10)
data, err := animeCache.Get(key)
if err != nil {
data, err = GetDataMal(animeApiMal + key + "?fields=id,title,main_picture,alternative_titles,start_date,end_date,synopsis,mean,rank,popularity,num_list_users,num_scoring_users,nsfw,media_type,status,genres,my_list_status,num_episodes,start_season,broadcast,source,average_episode_duration,rating,studios")
dataMal, err := GetDataMal(animeApiMal + key + "?fields=id,title,main_picture,alternative_titles,start_date,end_date,synopsis,mean,rank,popularity,num_list_users,num_scoring_users,nsfw,media_type,status,genres,my_list_status,num_episodes,start_season,broadcast,source,average_episode_duration,rating,studios")
if err != nil {
return data, err
return nil, nil, err
}
var animeMal AnimeDetailMal
err = json.Unmarshal(dataMal, &animeMal)
if err != nil {
return nil, nil, err
}
// convert to anime
anime = MalConvert(&animeMal)
data, err = json.Marshal(&anime)
if err != nil {
return &anime, data, err
}
animeCache.Set(key, data)
return data, err
} else {
err = json.Unmarshal(data, &anime)
}
return data, err
return &anime, data, err
}
func GetUserAnimeListData(username, status string) (*AnimeListMal, []byte, error) {

View File

@@ -3,6 +3,7 @@ package main
import (
"encoding/json"
"errors"
"time"
)
func JikanConvert(jik *SeasonAnimeJikan) Anime {
@@ -47,6 +48,48 @@ func JikanConvert(jik *SeasonAnimeJikan) Anime {
return res
}
func MalConvert(mal *AnimeDetailMal) Anime {
res := Anime{
Anime: mal.ID,
Title: mal.Title,
TitleEn: mal.AlternativeTitles.En,
TitleJp: mal.AlternativeTitles.Ja,
ImageMediumURL: mal.MainPicture.Medium,
ImageLargeURL: mal.MainPicture.Large,
ImageThumbURL: "",
Type: mal.MediaType,
Status: mal.Status,
Episodes: mal.NumEpisodes,
Synopsis: mal.Synopsis,
Year: mal.StartSeason.Year,
Season: mal.StartSeason.Season,
Score: mal.Mean,
ScoredBy: mal.NumScoringUsers,
Rank: mal.Rank,
Popularity: mal.Popularity,
Members: mal.NumListUsers,
Source: mal.Source,
DayOfTheWeek: mal.Broadcast.DayOfTheWeek,
StartTime: mal.Broadcast.StartTime,
TrailerURL: "",
}
for _, g := range mal.Genres {
res.Genres = append(res.Genres, AnimeGenre{
ID: g.ID,
Name: g.Name,
})
}
for _, s := range mal.Studios {
res.Studios = append(res.Studios, AnimeStudio{
ID: s.ID,
Name: s.Name,
})
}
res.StartDate, _ = time.Parse("2006-01-02", mal.StartDate)
res.EndDate, _ = time.Parse("2006-01-02", mal.EndDate)
return res
}
func GetSeasonCache() ([]Anime, error) {
data, err := cache.Get(seasonApiJikan)
if err != nil {