From 4bd702d111c6e4d5455865a7e1fbe5de11899b15 Mon Sep 17 00:00:00 2001 From: Vidhu Kant Sharma Date: Tue, 8 Feb 2022 21:47:58 +0530 Subject: NOT WORKING: pushing current progress, adding support for different options with GetAnimeList --- anime/errhandlers.go | 21 +-------------------- anime/general.structs.go | 24 ++++++++++++++++++++++++ user/anime/animelist.go | 35 +++++++++++++++++++++++++++++++---- user/anime/animelist.structs.go | 29 +++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 24 deletions(-) create mode 100644 user/anime/animelist.structs.go diff --git a/anime/errhandlers.go b/anime/errhandlers.go index d7f70f9..3a60f7c 100644 --- a/anime/errhandlers.go +++ b/anime/errhandlers.go @@ -21,30 +21,11 @@ import ( "fmt" ) -/* NOTE: MAL still seems to send some fields - * even if they aren't requested. - * those include Title, Picture, Id, etc */ -// default fields to use when none are specified -var defaultFields []string = []string{ - "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", -} - // if fields aren't specified func fieldsErrHandler(fields []string) ([]string, error) { if cap(fields) == 0 { // uses all the default fields if none specified - return defaultFields, nil + return DefaultFields, nil } // checks if each given field is valid diff --git a/anime/general.structs.go b/anime/general.structs.go index c49b762..77bd22a 100644 --- a/anime/general.structs.go +++ b/anime/general.structs.go @@ -16,6 +16,25 @@ package anime +/* NOTE: MAL still seems to send some fields + * even if they aren't requested. + * those include Title, Picture, Id, etc */ +// default fields to use when none are specified +var DefaultFields []string = []string{ + "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", +} + // contains previous/next page for anime list type ListPaging struct { NextPage string `json:"next"` @@ -26,3 +45,8 @@ type Season struct { Year int `json:"year"` Name string `json:"season"` } + +type AnimeList struct { + Animes []Anime + Paging ListPaging +} diff --git a/user/anime/animelist.go b/user/anime/animelist.go index c48980d..b36b50d 100644 --- a/user/anime/animelist.go +++ b/user/anime/animelist.go @@ -17,16 +17,43 @@ package anime import ( - "fmt" + "encoding/json" + "fmt" + "github.com/MikunoNaka/mal2go/anime" ) const BASE_URL string = "https://api.myanimelist.net/v2" // Get authenticated user's anime list -func (c AnimeListClient) GetAnimeList() { - endpoint := BASE_URL + "/users/@me/animelist?fields=list_status&limit=4" +func (c AnimeListClient) GetAnimeList(user, status, sort string/*, limit, offset int*/) { + // get own list if user not specified + if user == "" { + user = "@me" + } + var userAnimeList anime.AnimeList + endpoint := BASE_URL + "/users/0ZeroTsu/animelist?fields=list_status&limit=4" + + // get data from API + var animeListData AnimeListRaw data := c.requestHandler(endpoint, "GET") - fmt.Println(data) + json.Unmarshal([]byte(data), &animeListData) + + // set MyListStatus for each element and add it to array + var animes []anime.Anime + for _, element := range animeListData.Data { + a := element.Anime + a.MyListStatus = element.ListStatus + + animes = append(animes, a) + } + + // finally create AnimeList + userAnimeList = anime.AnimeList { + Animes: animes, + Paging: animeListData.Paging, + } + + fmt.Println(userAnimeList) } diff --git a/user/anime/animelist.structs.go b/user/anime/animelist.structs.go new file mode 100644 index 0000000..d43b47b --- /dev/null +++ b/user/anime/animelist.structs.go @@ -0,0 +1,29 @@ +/* mal2go - MyAnimeList V2 API wrapper for Go + * Copyright (C) 2022 Vidhu Kant Sharma + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +package anime + +import ( + "github.com/MikunoNaka/mal2go/anime" +) + +type AnimeListRaw struct { + Data []struct { + Anime anime.Anime `json:"node"` + ListStatus anime.ListStatus `json:"list_status"` + } `json:"data"` + Paging anime.ListPaging `json:"paging"` +} -- cgit v1.2.3