Basic functions to work with data
This commit is contained in:
parent
b0e4215b17
commit
08361c3f93
15
.vscode/launch.json
vendored
Normal file
15
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Launch Package",
|
||||
"type": "go",
|
||||
"request": "launch",
|
||||
"mode": "auto",
|
||||
"program": "main.go"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1 +1,49 @@
|
||||
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
|
||||
}
|
||||
|
||||
27
app/data/data.go
Normal file
27
app/data/data.go
Normal file
@ -0,0 +1,27 @@
|
||||
package data
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/rayaman/bdo-market/app/types"
|
||||
)
|
||||
|
||||
// Filter filters the items using the provided filter function.
|
||||
//
|
||||
// Parameters:
|
||||
// - items []types.MarketItem
|
||||
// - filter func(types.MarketItem) bool
|
||||
// Return type: []types.MarketItem
|
||||
func Filter(items []types.MarketItem, filter func(types.MarketItem) bool) []types.MarketItem {
|
||||
var filteredItems []types.MarketItem
|
||||
for _, item := range items {
|
||||
if filter(item) {
|
||||
filteredItems = append(filteredItems, item)
|
||||
}
|
||||
}
|
||||
return filteredItems
|
||||
}
|
||||
|
||||
func SprintMarketItem(item types.MarketItem) string {
|
||||
return fmt.Sprintf("Name: %s\n Id: %d\n Current Stock: %d\n Total Trades: %d\n Base Price: %d\n Main Category: %d\n Sub Category: %d\n Market Category: %d", item.Name, item.Id, item.CurrentStock, item.TotalTrades, item.BasePrice, item.MainCategory, item.SubCategory, item.MarketCategory)
|
||||
}
|
||||
37
main.go
37
main.go
@ -1,33 +1,26 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"app/types"
|
||||
"fmt"
|
||||
"json"
|
||||
"net/http"
|
||||
|
||||
"github.com/rayaman/bdo-market/app/api"
|
||||
"github.com/rayaman/bdo-market/app/data"
|
||||
"github.com/rayaman/bdo-market/app/types"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
}
|
||||
|
||||
func GetMarketItems() []types.MarketItem {
|
||||
var marketdata []types.MarketItem
|
||||
url := "https://api.arsha.io/v2/na/market"
|
||||
|
||||
client := &http.Client{}
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
|
||||
marketdata, err := api.GetMarketItems()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
panic(err)
|
||||
}
|
||||
res, err := client.Do(req)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
fmt.Printf("Total length: %d\n", len(marketdata))
|
||||
|
||||
filtered_items := data.Filter(marketdata, func(item types.MarketItem) bool {
|
||||
return item.CurrentStock > 100000
|
||||
})
|
||||
|
||||
fmt.Printf("Filtered length: %d\n", len(filtered_items))
|
||||
for _, item := range filtered_items {
|
||||
fmt.Println(data.SprintMarketItem(item))
|
||||
}
|
||||
defer res.Body.Close()
|
||||
json.UnMarshal(res.Body, &marketdata)
|
||||
return marketdata
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user