diff options
| author | Bobby <[email protected]> | 2026-01-16 11:37:09 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-01-16 11:37:09 +0530 |
| commit | 472c5b429c0fe5f3e38a295d94f9f794d8e23672 (patch) | |
| tree | 4a7d77cd6062ca72056d33f477c3be04b0786ac8 /utils/api | |
| parent | 63964cefa05c7acc551af29d957a5fb04f9bfa64 (diff) | |
| download | metachan-472c5b429c0fe5f3e38a295d94f9f794d8e23672.tar.xz metachan-472c5b429c0fe5f3e38a295d94f9f794d8e23672.zip | |
Add curl fallback for HTTP requests in JikanClient
Diffstat (limited to 'utils/api')
| -rw-r--r-- | utils/api/jikan/jikan.go | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/utils/api/jikan/jikan.go b/utils/api/jikan/jikan.go index 9dcf00a..3a7e796 100644 --- a/utils/api/jikan/jikan.go +++ b/utils/api/jikan/jikan.go @@ -8,6 +8,7 @@ import ( "math" "metachan/utils/ratelimit" "net/http" + "os/exec" "strconv" "time" ) @@ -152,7 +153,12 @@ func (c *JikanClient) GetFullAnime(malID int) (*JikanAnimeResponse, error) { bodyBytes, err := c.makeRequest(ctx, apiURL) if err != nil { - return nil, fmt.Errorf("failed to get anime full data: %w", err) + // Fallback to curl if HTTP client fails + var curlErr error + bodyBytes, curlErr = c.makeRequestWithCurl(apiURL) + if curlErr != nil { + return nil, fmt.Errorf("failed to get anime full data via HTTP (%w) and curl (%v)", err, curlErr) + } } var animeResponse JikanAnimeResponse @@ -167,6 +173,19 @@ func (c *JikanClient) GetFullAnime(malID int) (*JikanAnimeResponse, error) { return &animeResponse, nil } +// makeRequestWithCurl uses curl as a fallback when Go HTTP client fails +func (c *JikanClient) makeRequestWithCurl(url string) ([]byte, error) { + c.WaitForRateLimit() + + cmd := exec.Command("curl", "-s", "-H", "Accept: application/json", url) + output, err := cmd.Output() + if err != nil { + return nil, fmt.Errorf("curl command failed: %w", err) + } + + return output, nil +} + // GetAnimeEpisodes fetches all episodes for an anime by MAL ID func (c *JikanClient) GetAnimeEpisodes(malID int) (*JikanAnimeEpisodeResponse, error) { result := JikanAnimeEpisodeResponse{ |
