initial commit

This commit is contained in:
Steve Dudenhoeffer 2024-11-13 22:08:24 -05:00
commit fc8bedd474
3 changed files with 109 additions and 0 deletions

44
cmd/main.go Normal file
View File

@ -0,0 +1,44 @@
package main
import (
"aislegopher"
"fmt"
"os"
"strconv"
)
func main() {
// usage: aisegopher <product_id>
if len(os.Args) != 2 {
fmt.Println("usage: aisegopher <product_id>")
os.Exit(1)
}
productId, err := strconv.Atoi(os.Args[1])
if err != nil {
fmt.Println("Invalid product ID: ", os.Args[1], " error:", err)
os.Exit(1)
}
priceHistory, err := aislegopher.GetPriceHistory(productId)
if err != nil {
fmt.Println("Error getting price history: ", err)
os.Exit(1)
}
fmt.Println("Regular Prices:")
for _, dp := range priceHistory.RegularPrices {
fmt.Println(dp.Date, dp.Price)
}
if len(priceHistory.ThirdPartyPrices) > 0 {
fmt.Println("Third Party Prices:")
for _, dp := range priceHistory.ThirdPartyPrices {
fmt.Println(dp.Date, dp.Price)
}
}
}

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module aislegopher
go 1.23.2

62
pricehistory.go Normal file
View File

@ -0,0 +1,62 @@
package aislegopher
import (
"encoding/json"
"net/http"
"strconv"
)
type DatePrice struct {
Date string
Price float64
}
type PriceHistory struct {
RegularPrices []DatePrice `json:"regularPrices,omitempty"`
ThirdPartyPrices []DatePrice `json:"3rdPartyPrices,omitempty"`
}
type Config struct {
Client *http.Client
}
var DefaultConfig = Config{
Client: http.DefaultClient,
}
func GetPriceHistory(productId int) (PriceHistory, error) {
return DefaultConfig.GetPriceHistory(productId)
}
func (c Config) GetPriceHistory(productId int) (PriceHistory, error) {
cl := c.Client
if cl == nil {
cl = http.DefaultClient
}
req, err := http.NewRequest("GET", "https://aislegopher.com/Home/GetPriceHistoryData?productId="+strconv.Itoa(productId), nil)
if err != nil {
return PriceHistory{}, err
}
req.Header.Set("Accept", "application/json")
res, err := cl.Do(req)
if err != nil {
return PriceHistory{}, err
}
defer res.Body.Close()
var priceHistory PriceHistory
err = json.NewDecoder(res.Body).Decode(&priceHistory)
if err != nil {
return PriceHistory{}, err
}
return priceHistory, nil
}