mirror of
https://github.com/ultrasn0w/huso.git
synced 2025-12-13 13:59:53 +01:00
Respect rate limit of jikan
This commit is contained in:
1
go.mod
1
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 (
|
||||
|
||||
2
go.sum
2
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=
|
||||
|
||||
4
huso.go
4
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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user