From 02752551dec484dd0e2b6f50158f516fd5d5c39d Mon Sep 17 00:00:00 2001 From: Vidhu Kant Sharma Date: Mon, 31 Jan 2022 00:06:46 +0530 Subject: Completed Get Anime Ranking API route --- anime/anime.go | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) (limited to 'anime/anime.go') diff --git a/anime/anime.go b/anime/anime.go index e9ef70f..c397d93 100644 --- a/anime/anime.go +++ b/anime/anime.go @@ -6,6 +6,7 @@ import ( "io/ioutil" "log" "net/http" + "errors" ) func requestHandler(token string, endpoint string) string { @@ -34,11 +35,12 @@ func requestHandler(token string, endpoint string) string { return string(body) } +// Each anime has its own ID on MAL func GetAnimeById(token string, animeId int) Anime { endpoint := fmt.Sprintf("https://api.myanimelist.net/v2/anime/%d?fields=id,title,main_picture,alternative_titles,start_date,end_date,synopsis,mean,rank,popularity,num_list_users,num_scoring_users,nsfw,created_at,updated_at,media_type,status,genres,my_list_status,num_episodes,start_season,broadcast,source,average_episode_duration,rating,pictures,background,related_anime,related_manga,recommendations,studios,statistics", animeId) - data := requestHandler(token, endpoint) var anime Anime + data := requestHandler(token, endpoint) json.Unmarshal([]byte(data), &anime) return anime @@ -62,8 +64,40 @@ func isValidRankingType(rankingType string) bool { return false } -func GetAnimeRanking(token string, rankingType string) { +// Ranking is a list of anime sorted by their rank +func GetAnimeRanking(token string, rankingType string) (AnimeRanking, error) { + var animeRanking AnimeRanking if !isValidRankingType(rankingType) { - log.Fatal(fmt.Sprintf("GetAnimeRanking: Invalid Ranking Type Given (\"%s\")", rankingType)) + return animeRanking, errors.New(fmt.Sprintf("GetAnimeRanking: Invalid Ranking Type Given (\"%s\")", rankingType)) + } + + endpoint := "https://api.myanimelist.net/v2/anime/ranking?ranking_type=all&limit=4" + + // gets data from API and stores it in a struct + var rankingData RawRanking + data := requestHandler(token, endpoint) + json.Unmarshal([]byte(data), &rankingData) + + // Adding all the animes in ranking list to a slice + var animeRankingTitles []AnimeRankingTitle + for _, element := range rankingData.Data { + animeRankingTitles = append( + animeRankingTitles, + AnimeRankingTitle { + Anime: element.Anime, + RankNum: element.Ranking.Rank, + }, + ) } + + // Finally, create the AnimeRanking object + animeRanking = AnimeRanking { + Titles: animeRankingTitles, + Paging: ListPaging { + NextPage: rankingData.Paging.NextPage, + PrevPage: rankingData.Paging.PrevPage, + }, + } + + return animeRanking, nil } -- cgit v1.2.3