package market import ( "github.com/go-resty/resty/v2" "github.com/rs/zerolog/log" "me.thuanle/bbot/internal/utils/convertx" ) // Structs to parse the JSON response type MarginInterestResponse struct { Code string `json:"code"` Message string `json:"message"` Data []Asset `json:"data"` } type Asset struct { AssetName string `json:"assetName"` Specs []Spec `json:"specs"` } type Spec struct { VipLevel string `json:"vipLevel"` DailyInterestRate string `json:"dailyInterestRate"` } func (ms *MarketData) GetMarginInterestRates() map[string]float64 { data := fetchMarginInterestRate() // Map to store the interest rates for the requested tokens rates := make(map[string]float64) // Iterate over the fetched data and match tokens with VIP Level 0 interest rates for _, asset := range data { for _, spec := range asset.Specs { if spec.VipLevel == "0" { rateDaily := convertx.String2Float64(spec.DailyInterestRate, 0) rates[asset.AssetName] = rateDaily } } } return rates } func fetchMarginInterestRate() []Asset { url := "https://www.binance.com/bapi/margin/v1/friendly/margin/vip/spec/list-all" // Create a new Resty client client := resty.New() // Send the GET request to the API var response MarginInterestResponse resp, err := client.R(). SetResult(&response). Get(url) if err != nil { log.Err(err). Str("status", resp.Status()). Msg("Failed to fetch margin interest rates") return nil } return response.Data }