Get Anime cached

This commit is contained in:
daru
2022-04-15 21:54:51 +02:00
parent c59d1ba68b
commit 6ba9176ca7
4 changed files with 24 additions and 9 deletions

View File

@@ -37,6 +37,7 @@ var (
jikanApiBaseUri = flag.String("jikanApiBaseUri", "https://api.jikan.moe/v4/", "Jikan API base URL") jikanApiBaseUri = flag.String("jikanApiBaseUri", "https://api.jikan.moe/v4/", "Jikan API base URL")
malApiId = flag.String("malApiId", "cc17dcf40581b9dfc8a5a12dba458153", "MyAnimeList API Client ID") malApiId = flag.String("malApiId", "cc17dcf40581b9dfc8a5a12dba458153", "MyAnimeList API Client ID")
cache *bigcache.BigCache cache *bigcache.BigCache
animeCache *bigcache.BigCache
db *nutsdb.DB db *nutsdb.DB
) )
@@ -56,6 +57,11 @@ func main() {
log.Fatal(err) log.Fatal(err)
} }
defer cache.Close() defer cache.Close()
animeCache, err = bigcache.NewBigCache(bigcache.DefaultConfig(time.Hour))
if err != nil {
log.Fatal(err)
}
defer animeCache.Close()
nutsOpt := nutsdb.DefaultOptions nutsOpt := nutsdb.DefaultOptions
nutsOpt.Dir = "nuts" nutsOpt.Dir = "nuts"

View File

@@ -12,9 +12,9 @@ import (
"github.com/valyala/fasthttp" "github.com/valyala/fasthttp"
) )
func GetAnimeDetailData(malId int64) (*AnimeDetailMal, []byte, error) { func GetAnimeDetailData(animeId int64) (*AnimeDetailMal, []byte, error) {
var anime AnimeDetailMal var anime AnimeDetailMal
body, err := GetAnimeDetailBytes(malId) body, err := GetAnimeDetailBytesCached(animeId)
if err != nil { if err != nil {
return nil, body, err return nil, body, err
} }
@@ -22,8 +22,18 @@ func GetAnimeDetailData(malId int64) (*AnimeDetailMal, []byte, error) {
return &anime, body, err return &anime, body, err
} }
func GetAnimeDetailBytes(malId int64) ([]byte, error) { func GetAnimeDetailBytesCached(animeId int64) ([]byte, error) {
return GetDataMal(animeApiMal + strconv.FormatInt(malId, 10) + "?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") 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")
if err != nil {
return data, err
}
animeCache.Set(key, data)
return data, err
}
return data, err
} }
func GetUserAnimeListData(username, status string) (*AnimeListMal, []byte, error) { func GetUserAnimeListData(username, status string) (*AnimeListMal, []byte, error) {

View File

@@ -185,7 +185,7 @@ func WatchPost(ctx *fasthttp.RequestCtx) {
} }
// iterate sent animes // iterate sent animes
for _, anime := range animes { for i, anime := range animes {
// check if anime is in season // check if anime is in season
_, err = SearchSeason(anime.Anime) _, err = SearchSeason(anime.Anime)
if err == nil { if err == nil {
@@ -195,8 +195,7 @@ func WatchPost(ctx *fasthttp.RequestCtx) {
addErrorToCtx(ctx, err) addErrorToCtx(ctx, err)
return return
} }
anime.Users = animeData.Users animes[i].Users = animeData.Users
fmt.Printf("%+v\n", anime)
} }
// TODO // TODO

View File

@@ -15,7 +15,7 @@ func GetSeasonCache() (*SeasonJikan, error) {
return &seasonData, err return &seasonData, err
} }
func SearchSeason(malId int64) (*SeasonAnimeJikan, error) { func SearchSeason(animeId int64) (*SeasonAnimeJikan, error) {
season, err := GetSeasonCache() season, err := GetSeasonCache()
if err != nil { if err != nil {
return nil, err return nil, err
@@ -24,7 +24,7 @@ func SearchSeason(malId int64) (*SeasonAnimeJikan, error) {
return nil, errors.New("no seasonal anime") return nil, errors.New("no seasonal anime")
} }
for _, a := range season.Data { for _, a := range season.Data {
if a.MalID == malId { if a.MalID == animeId {
return &a, err return &a, err
} }
} }