diff --git a/go.mod b/go.mod index 82f3b37..9b35713 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/valyala/fasthttp v1.36.0 github.com/valyala/quicktemplate v1.7.0 github.com/xujiajun/nutsdb v0.8.0 + golang.org/x/time v0.0.0-20220411224347-583f2d630306 ) require ( diff --git a/go.sum b/go.sum index c4d7b93..28f86ab 100644 --- a/go.sum +++ b/go.sum @@ -65,6 +65,8 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w= +golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= diff --git a/huso.go b/huso.go index e95bdb5..556a20c 100644 --- a/huso.go +++ b/huso.go @@ -12,6 +12,7 @@ import ( "github.com/allegro/bigcache/v3" "github.com/gookit/color" "github.com/xujiajun/nutsdb" + "golang.org/x/time/rate" ) const ( @@ -44,6 +45,7 @@ var ( searchCache *bigcache.BigCache animeListCache *bigcache.BigCache db *nutsdb.DB + jikanLimiter *rate.Limiter ) func main() { @@ -55,6 +57,8 @@ func main() { color.Notice.Printf("huso %s %s\n", husoVersion, runtime.Version()) + jikanLimiter = rate.NewLimiter(rate.Every(time.Second), 3) + // cache init var err error animeCache, err = bigcache.NewBigCache(bigcache.DefaultConfig(7 * time.Hour)) diff --git a/knecht.go b/knecht.go index ca99a57..c1f4189 100644 --- a/knecht.go +++ b/knecht.go @@ -2,6 +2,7 @@ package main import ( "bytes" + "context" "encoding/json" "fmt" "strconv" @@ -91,11 +92,7 @@ func GetUserData(username string) (*User, []byte, error) { err = nil dataJikan, err := GetDataJikan(userApiJikan + username) if err != nil { - // retry bcs Jikan big baka - dataJikan, err = GetDataJikan(userApiJikan + username) - if err != nil { - return nil, nil, err - } + return nil, nil, err } if strings.Contains(string(dataJikan), "BadResponseException") { return nil, nil, fmt.Errorf("user not found: %s", username) @@ -194,6 +191,8 @@ func GetDataMal(apiAddr string) ([]byte, error) { func GetDataJikan(apiAddr string) ([]byte, error) { var body []byte + ctx := context.Background() + jikanLimiter.Wait(ctx) statusCode, body, err := fasthttp.Get(body, *jikanApiBaseUri+apiAddr) if statusCode != fasthttp.StatusOK { return body, fmt.Errorf("unexpected response code: %s %d", *jikanApiBaseUri+apiAddr, statusCode)