From 1910cb307935d83a71d73111249a1fc380f67428 Mon Sep 17 00:00:00 2001 From: daru Date: Sat, 16 Apr 2022 19:20:19 +0200 Subject: [PATCH] MalConvert --- knecht.go | 33 ++++++++++++++++++--------------- schaffer.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 15 deletions(-) diff --git a/knecht.go b/knecht.go index 26b98fa..6d200b2 100644 --- a/knecht.go +++ b/knecht.go @@ -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) { diff --git a/schaffer.go b/schaffer.go index 3032638..4e0b76c 100644 --- a/schaffer.go +++ b/schaffer.go @@ -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 {