aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-01-16 11:37:09 +0530
committerBobby <[email protected]>2026-01-16 11:37:09 +0530
commit472c5b429c0fe5f3e38a295d94f9f794d8e23672 (patch)
tree4a7d77cd6062ca72056d33f477c3be04b0786ac8 /utils
parent63964cefa05c7acc551af29d957a5fb04f9bfa64 (diff)
downloadmetachan-472c5b429c0fe5f3e38a295d94f9f794d8e23672.tar.xz
metachan-472c5b429c0fe5f3e38a295d94f9f794d8e23672.zip
Add curl fallback for HTTP requests in JikanClient
Diffstat (limited to 'utils')
-rw-r--r--utils/api/jikan/jikan.go21
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{