From f968c1b98e77961fd62dc1d8b90ac4a7a5019364 Mon Sep 17 00:00:00 2001 From: daru Date: Fri, 1 Jul 2022 18:20:17 +0200 Subject: [PATCH] NextNextSeason --- huso.go | 1 - knecht.go | 58 +++++++++++++++++---------------------------------- ober.go | 22 +++++++++++++++++-- praktikant.go | 36 +++++++++++++++++--------------- schaffer.go | 19 ++++++++++------- 5 files changed, 69 insertions(+), 67 deletions(-) diff --git a/huso.go b/huso.go index a664151..8b003a5 100644 --- a/huso.go +++ b/huso.go @@ -21,7 +21,6 @@ import ( const ( husoVersion = "1.3" registerSecret = "綾波レイ" - seasonApiJikan = "seasons/now" seasonStrJikan = "seasons/" userApiJikan = "users/" userApiMal = "users/" diff --git a/knecht.go b/knecht.go index c4bae8f..47c38ac 100644 --- a/knecht.go +++ b/knecht.go @@ -135,45 +135,9 @@ func GetUserData(username string) (*User, []byte, error) { return &user, data, err } -func GetSeasonDataAll() ([]Anime, []byte, error) { - seasonStr := GetCurrentSeasonString() - color.Infoln("Aktuelle Season (" + seasonStr + ") abfragen...") - logOut.WriteLine("📺 Aktuelle Season (" + seasonStr + ") abfragen...") - data, _, err := GetSeasonData(seasonApiJikan, 1) - if err != nil { - return nil, nil, err - } - color.Infof("%d Anime auf %d Seiten\n", data.Pagination.Items.Total, data.Pagination.LastVisiblePage) - logOut.WriteLine(fmt.Sprintf("📺 %d Anime auf %d Seiten", data.Pagination.Items.Total, data.Pagination.LastVisiblePage)) - animes := make([]Anime, 0) - // convert to anime - for _, a := range data.Data { - animes = append(animes, JikanConvert(&a)) - } - for i := 2; data.Pagination.HasNextPage; i++ { - color.Infof("Seite %d abfragen...\n", i) - logOut.WriteLine(fmt.Sprintf("📺 Seite %d abfragen...", i)) - newData, _, err := GetSeasonData(seasonApiJikan, i) - if err != nil { - return nil, nil, err - } - data.Pagination.CurrentPage = newData.Pagination.CurrentPage - data.Pagination.HasNextPage = newData.Pagination.HasNextPage - data.Pagination.Items.Count += newData.Pagination.Items.Count - // convert to anime - for _, a := range newData.Data { - animes = append(animes, JikanConvert(&a)) - } - } - color.Infof("%d Anime bekommen\n", len(animes)) - logOut.WriteLine(fmt.Sprintf("📺 %d Anime bekommen", len(animes))) - bytes, err := json.Marshal(animes) - return animes, bytes, err -} - -func GetNextSeasonDataAll(season string) ([]Anime, []byte, error) { - color.Infoln("Nächste Season (" + season + ") abfragen...") - logOut.WriteLine("📺 Nächste Season (" + season + ") abfragen...") +func GetSeasonDataAll(season string) ([]Anime, []byte, error) { + color.Infoln("Season (" + season + ") abfragen...") + logOut.WriteLine("📺 Season (" + season + ") abfragen...") data, _, err := GetSeasonData(seasonStrJikan+season, 1) if err != nil { return nil, nil, err @@ -294,3 +258,19 @@ func GetNextSeasonString() string { return fmt.Sprintf("%04d", now.Year()) } } + +func GetNextNextSeasonString() string { + var now = time.Now() + switch now.Month() { + case time.January, time.February, time.March: + return fmt.Sprintf("%04d/summer", now.Year()) + case time.April, time.May, time.June: + return fmt.Sprintf("%04d/fall", now.Year()) + case time.July, time.August, time.September: + return fmt.Sprintf("%04d/winter", now.Year()+1) + case time.October, time.November, time.December: + return fmt.Sprintf("%04d/spring", now.Year()+1) + default: + return fmt.Sprintf("%04d", now.Year()) + } +} diff --git a/ober.go b/ober.go index 15d3720..a182b48 100644 --- a/ober.go +++ b/ober.go @@ -19,6 +19,7 @@ func RunWebserv() { r.GET("/", Headers(Start)) r.GET("/api/season", Headers(Season)) r.GET("/api/nextseason", Headers(SeasonNext)) + r.GET("/api/nextnextseason", Headers(SeasonNextNext)) r.GET("/api/auth/{user}", Headers(AuthTest)) r.GET("/api/anime/{id}", Headers(AnimeGet)) r.GET("/api/animesearch", Headers(AnimeSearchGet)) @@ -39,7 +40,7 @@ func RunWebserv() { } func Start(ctx *fasthttp.RequestCtx) { - season, err := GetSeasonCache(seasonApiJikan) + season, err := GetSeasonCache(GetCurrentSeasonString()) if err != nil { addErrorToCtx(ctx, err) return @@ -77,7 +78,7 @@ func AuthTest(ctx *fasthttp.RequestCtx) { } func Season(ctx *fasthttp.RequestCtx) { - data, err := seasoncache.Get(seasonApiJikan) + data, err := seasoncache.Get(GetCurrentSeasonString()) if err != nil { addErrorToCtx(ctx, err) return @@ -110,6 +111,23 @@ func SeasonNext(ctx *fasthttp.RequestCtx) { ctx.SetStatusCode(fasthttp.StatusOK) } +func SeasonNextNext(ctx *fasthttp.RequestCtx) { + data, err := seasoncache.Get(GetNextNextSeasonString()) + if err != nil { + addErrorToCtx(ctx, err) + return + } + + err = writeResponseBody(ctx, data) + if err != nil { + addErrorToCtx(ctx, err) + return + } + + ctx.SetContentType("application/json; charset=utf-8") + ctx.SetStatusCode(fasthttp.StatusOK) +} + func AnimeGet(ctx *fasthttp.RequestCtx) { idVal := ctx.UserValue("id") if idVal == nil { diff --git a/praktikant.go b/praktikant.go index 0586e6b..775adaf 100644 --- a/praktikant.go +++ b/praktikant.go @@ -151,30 +151,24 @@ func LangeArbeiten() { func LangeArbeit() { // season data - _, bytes, err := GetSeasonDataAll() + err := refreshSeason(GetCurrentSeasonString()) if err != nil { color.Errorln(err.Error()) logOut.WriteError(err) - } else { - err = seasoncache.Set(seasonApiJikan, bytes) - if err != nil { - color.Errorln(err.Error()) - logOut.WriteError(err) - } } // next season data - nextSeason := GetNextSeasonString() - _, bytes, err = GetNextSeasonDataAll(nextSeason) + err = refreshSeason(GetNextSeasonString()) + if err != nil { + color.Errorln(err.Error()) + logOut.WriteError(err) + } + + // next next season data + err = refreshSeason(GetNextNextSeasonString()) if err != nil { color.Errorln(err.Error()) logOut.WriteError(err) - } else { - err = seasoncache.Set(nextSeason, bytes) - if err != nil { - color.Errorln(err.Error()) - logOut.WriteError(err) - } } // refresh anime cache with watched @@ -187,8 +181,8 @@ func LangeArbeit() { } } else { for _, a := range animesUsers { - // search season first - _, err = SearchSeason(a.Anime) + // search seasons first + _, err = SearchSeasons(a.Anime) if err == nil { continue } @@ -236,3 +230,11 @@ func refreshAnime(animeId int64) error { animeCache.Set(key, data) return nil } + +func refreshSeason(season string) error { + _, bytes, err := GetSeasonDataAll(season) + if err == nil { + err = seasoncache.Set(season, bytes) + } + return err +} diff --git a/schaffer.go b/schaffer.go index 8b79191..1444d67 100644 --- a/schaffer.go +++ b/schaffer.go @@ -123,14 +123,11 @@ func GetSeasonCache(key string) ([]Anime, error) { return seasonData, err } -func SearchSeason(animeId int64) (*Anime, error) { - season, err := GetSeasonCache(seasonApiJikan) +func SearchSeasons(animeId int64) (*Anime, error) { + season, err := GetSeasonCache(GetCurrentSeasonString()) if err != nil { return nil, err } - if len(season) == 0 { - return nil, errors.New("no seasonal anime") - } for _, a := range season { if a.Anime == animeId { return &a, err @@ -140,8 +137,14 @@ func SearchSeason(animeId int64) (*Anime, error) { if err != nil { return nil, err } - if len(season) == 0 { - return nil, errors.New("no seasonal anime") + for _, a := range season { + if a.Anime == animeId { + return &a, err + } + } + season, err = GetSeasonCache(GetNextNextSeasonString()) + if err != nil { + return nil, err } for _, a := range season { if a.Anime == animeId { @@ -153,7 +156,7 @@ func SearchSeason(animeId int64) (*Anime, error) { func SearchAnime(animeId int64) (*Anime, error) { // search season first - anime, err := SearchSeason(animeId) + anime, err := SearchSeasons(animeId) if err != nil { // get from MAL anime, _, err = GetAnimeDetailData(animeId)