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
|
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
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"app/types"
|
|
||||||
"fmt"
|
"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 main() {
|
||||||
|
marketdata, err := api.GetMarketItems()
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
panic(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
res, err := client.Do(req)
|
fmt.Printf("Total length: %d\n", len(marketdata))
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
filtered_items := data.Filter(marketdata, func(item types.MarketItem) bool {
|
||||||
return
|
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