diff options
| author | Bobby <[email protected]> | 2026-01-20 18:13:48 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-01-20 18:13:48 +0530 |
| commit | ed36e0308c7cd3a6197c899cb16bfe65cc5194b4 (patch) | |
| tree | 4c0edabf651fc9b28648760920982c938fdf3d19 /utils | |
| parent | df6cf3edcbb560e7615ad13d8daf4843507eb11e (diff) | |
| download | metachan-ed36e0308c7cd3a6197c899cb16bfe65cc5194b4.tar.xz metachan-ed36e0308c7cd3a6197c899cb16bfe65cc5194b4.zip | |
Implement genre synchronization from MAL via Jikan API and add genre retrieval endpoint
Diffstat (limited to 'utils')
| -rw-r--r-- | utils/api/jikan/jikan.go | 20 | ||||
| -rw-r--r-- | utils/api/jikan/types.go | 13 |
2 files changed, 33 insertions, 0 deletions
diff --git a/utils/api/jikan/jikan.go b/utils/api/jikan/jikan.go index 3a7e796..1e45c74 100644 --- a/utils/api/jikan/jikan.go +++ b/utils/api/jikan/jikan.go @@ -260,3 +260,23 @@ func (c *JikanClient) GetAnimeCharacters(malID int) (*JikanAnimeCharacterRespons return &characterResponse, nil } + +// GetAnimeGenres fetches all anime genres from MAL +func (c *JikanClient) GetAnimeGenres() (*JikanGenresResponse, error) { + apiURL := "https://api.jikan.moe/v4/genres/anime" + + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + bodyBytes, err := c.makeRequest(ctx, apiURL) + if err != nil { + return nil, fmt.Errorf("failed to get anime genres: %w", err) + } + + var genresResponse JikanGenresResponse + if err := json.Unmarshal(bodyBytes, &genresResponse); err != nil { + return nil, fmt.Errorf("failed to decode genres response: %w", err) + } + + return &genresResponse, nil +} diff --git a/utils/api/jikan/types.go b/utils/api/jikan/types.go index cbcb543..393be56 100644 --- a/utils/api/jikan/types.go +++ b/utils/api/jikan/types.go @@ -14,6 +14,19 @@ type JikanGenericMALStructure struct { Name string `json:"name"` } +// JikanGenre represents a genre from Jikan genres API +type JikanGenre struct { + MALID int `json:"mal_id"` + Name string `json:"name"` + URL string `json:"url"` + Count int `json:"count"` +} + +// JikanGenresResponse represents the genres response from Jikan API +type JikanGenresResponse struct { + Data []JikanGenre `json:"data"` +} + // JikanAnimeResponse represents the main anime response from Jikan API type JikanAnimeResponse struct { Data struct { |
