ソースを参照

Markets widget rate limit fix

Svilen Markov 5 ヶ月 前
コミット
d4565acfe7
2 ファイル変更12 行追加1 行削除
  1. 1 0
      internal/glance/widget-markets.go
  2. 11 1
      internal/glance/widget-utils.go

+ 1 - 0
internal/glance/widget-markets.go

@@ -124,6 +124,7 @@ func fetchMarketsDataFromYahoo(marketRequests []marketRequest) (marketList, erro
 
 	for i := range marketRequests {
 		request, _ := http.NewRequest("GET", fmt.Sprintf("https://query1.finance.yahoo.com/v8/finance/chart/%s?range=1mo&interval=1d", marketRequests[i].Symbol), nil)
+		setBrowserUserAgentHeader(request)
 		requests = append(requests, request)
 	}
 

+ 11 - 1
internal/glance/widget-utils.go

@@ -8,8 +8,11 @@ import (
 	"errors"
 	"fmt"
 	"io"
+	"math/rand/v2"
 	"net/http"
+	"strconv"
 	"sync"
+	"sync/atomic"
 	"time"
 )
 
@@ -35,8 +38,15 @@ type requestDoer interface {
 	Do(*http.Request) (*http.Response, error)
 }
 
+var userAgentPersistentVersion atomic.Int32
+
 func setBrowserUserAgentHeader(request *http.Request) {
-	request.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0")
+	if rand.IntN(2000) == 0 {
+		userAgentPersistentVersion.Store(rand.Int32N(5))
+	}
+
+	version := strconv.Itoa(130 + int(userAgentPersistentVersion.Load()))
+	request.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:"+version+".0) Gecko/20100101 Firefox/"+version+".0")
 }
 
 func decodeJsonFromRequest[T any](client requestDoer, request *http.Request) (T, error) {