aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVidhu Kant Sharma <vidhukant@protonmail.ch>2022-02-05 22:15:48 +0530
committerVidhu Kant Sharma <vidhukant@protonmail.ch>2022-02-05 22:15:48 +0530
commite550d3d71360c4da68c7f9e978ef45f05e68b216 (patch)
tree555b38f89250f0fa2f343966ff45a4a7089f1cfd
parentf3ec24145da97fa7e4a5687503a6f46d59ff8c2a (diff)
implemented function for get suggested anime endpoint
-rw-r--r--anime/anime.go58
-rw-r--r--anime/suggestedanime.structs.go31
2 files changed, 81 insertions, 8 deletions
diff --git a/anime/anime.go b/anime/anime.go
index 6c65138..3344016 100644
--- a/anime/anime.go
+++ b/anime/anime.go
@@ -20,7 +20,6 @@ import (
"encoding/json"
"errors"
"fmt"
- "log"
"strconv"
)
@@ -33,13 +32,13 @@ func SearchAnime(token, searchString string, limit, offset int, fields []string)
// error handling for limit and offset
limitsErr := limitsErrHandler(limit, offset)
if limitsErr != nil {
- log.Println(limitsErr)
+ return searchResults, limitsErr
}
// handle all the errors for the fields
fields, err := fieldsErrHandler(fields)
if err != nil {
- log.Println(err)
+ return searchResults, err
}
// generate endpoint url with custom params
@@ -77,7 +76,7 @@ func GetAnimeById(token string, animeId int, fields []string) (Anime, error) {
// handle all the errors for the fields
fields, err := fieldsErrHandler(fields)
if err != nil {
- log.Println(err)
+ return anime, err
}
endpoint, _ := urlGenerator(
@@ -103,13 +102,13 @@ func GetAnimeRanking(token string, rankingType string, limit, offset int, fields
// error handling for limit and offset
limitsErr := limitsErrHandler(limit, offset)
if limitsErr != nil {
- log.Println(limitsErr)
+ return animeRanking, limitsErr
}
// handle all the errors for the fields
fields, err := fieldsErrHandler(fields)
if err != nil {
- log.Println(err)
+ return animeRanking, err
}
// if ranking type is invalid
@@ -160,13 +159,13 @@ func GetSeasonalAnime(token, year, season, sort string, limit, offset int, field
// error handling for limit and offset
limitsErr := limitsErrHandler(limit, offset)
if limitsErr != nil {
- log.Println(limitsErr)
+ return seasonalAnime, limitsErr
}
// handle all the errors for the fields
fields, err := fieldsErrHandler(fields)
if err != nil {
- log.Println(err)
+ return seasonalAnime, err
}
// checks if valid season is specified
@@ -206,3 +205,46 @@ func GetSeasonalAnime(token, year, season, sort string, limit, offset int, field
return seasonalAnime, nil
}
+
+// get anime suggestions for the user
+func GetSuggestedAnime(token string, limit, offset int, fields []string) (SuggestedAnime, error){
+ var suggestedAnime SuggestedAnime
+
+ // error handling for limit and offset
+ limitsErr := limitsErrHandler(limit, offset)
+ if limitsErr != nil {
+ return suggestedAnime, limitsErr
+ }
+
+ // handle all the errors for the fields
+ fields, err := fieldsErrHandler(fields)
+ if err != nil {
+ return suggestedAnime, err
+ }
+
+ endpoint, _ := urlGenerator(
+ BASE_URL + "/suggestions",
+ []string{"limit", "offset", "fields"},
+ [][]string{{strconv.Itoa(limit)}, {strconv.Itoa(offset)}, fields},
+ true,
+ )
+
+ // gets data from API and stores it in a struct
+ var suggestedAnimeData SuggestedAnimeRaw
+ data := requestHandler(token, endpoint)
+ json.Unmarshal([]byte(data), &suggestedAnimeData)
+
+ // Adding all the animes to another list to get formatted results later
+ var animes []Anime
+ for _, element := range suggestedAnimeData.Data {
+ animes = append(animes, element.Anime)
+ }
+
+ // finally generate RecommendedAnime struct
+ suggestedAnime = SuggestedAnime {
+ Animes: animes,
+ Paging: suggestedAnimeData.Paging,
+ }
+
+ return suggestedAnime, nil
+}
diff --git a/anime/suggestedanime.structs.go b/anime/suggestedanime.structs.go
new file mode 100644
index 0000000..a7b3a60
--- /dev/null
+++ b/anime/suggestedanime.structs.go
@@ -0,0 +1,31 @@
+/* mal2go - MyAnimeList V2 API wrapper for Go
+ * Copyright (C) 2022 Vidhu Kant Sharma <vidhukant@protonmail.ch>
+
+ * 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 <https://www.gnu.org/licenses/>. */
+
+package anime
+
+// this is how the API returns data (looks horrible)
+type SuggestedAnimeRaw struct {
+ Data []struct {
+ Anime Anime `json:"node"`
+ } `json:"data"`
+ Paging ListPaging `json:"paging"`
+}
+
+// this is how mal2go returns data
+type SuggestedAnime struct {
+ Animes []Anime
+ Paging ListPaging
+}