50 lines
993 B
Go
50 lines
993 B
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/rayaman/bdo-market/app/types"
|
|
)
|
|
|
|
var items []types.MarketItem
|
|
var lastUpdated time.Time = time.Now()
|
|
|
|
// GetMarketItems retrieves market items from the API and updates them if necessary.
|
|
//
|
|
// It returns a slice of MarketItem and an error.
|
|
func GetMarketItems() ([]types.MarketItem, error) {
|
|
// The api only updates every 30 minutes, so let's only update it every 30 minutes
|
|
if len(items) > 0 && time.Since(lastUpdated) < 30*time.Minute {
|
|
return items, nil
|
|
}
|
|
var marketdata []types.MarketItem
|
|
|
|
client := &http.Client{}
|
|
req, err := http.NewRequest("GET", "https://api.arsha.io/v2/na/market", nil)
|
|
|
|
if err != nil {
|
|
return marketdata, err
|
|
}
|
|
|
|
res, err := client.Do(req)
|
|
|
|
if err != nil {
|
|
return marketdata, err
|
|
}
|
|
|
|
defer res.Body.Close()
|
|
|
|
body, err := io.ReadAll(res.Body)
|
|
|
|
if err != nil {
|
|
return marketdata, err
|
|
}
|
|
|
|
json.Unmarshal(body, &marketdata)
|
|
items = marketdata
|
|
return marketdata, nil
|
|
}
|