From 81ea656332b246762b494745b51c61c55f8dbfb1 Mon Sep 17 00:00:00 2001 From: Steve Dudenhoeffer Date: Tue, 21 Jan 2025 19:42:25 -0500 Subject: [PATCH] Add unit price and unit parsing for items This update enhances the `Item` structure to include `UnitPrice` and `Unit` fields. Additional logic is implemented to extract and parse unit pricing details from the HTML, improving data accuracy and granularity. --- sites/wegmans/wegmans.go | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/sites/wegmans/wegmans.go b/sites/wegmans/wegmans.go index 57ef620..e54b295 100644 --- a/sites/wegmans/wegmans.go +++ b/sites/wegmans/wegmans.go @@ -22,9 +22,11 @@ var ErrNilURL = errors.New("url is nil") var ErrInvalidURL = errors.New("invalid url") type Item struct { - ID int - Name string - Price float64 + ID int + Name string + Price float64 + UnitPrice float64 + Unit string } func deferClose(c io.Closer) { @@ -93,5 +95,23 @@ func (c Config) GetItemPrice(ctx context.Context, b extractor.Browser, u *url.UR res.Price = price } + unitPrices := doc.Select(`span[data-test="per-unit-price"]`) + + if len(unitPrices) != 0 { + unitPriceStr, _ := unitPrices[0].Text() + unitPriceStr = strings.TrimSpace(unitPriceStr) + unitPriceStr = strings.ReplaceAll(unitPriceStr, "(", "") + unitPriceStr = strings.ReplaceAll(unitPriceStr, ")", "") + unitPriceStr = strings.ReplaceAll(unitPriceStr, "$", "") + unitPriceStr = strings.ReplaceAll(unitPriceStr, ",", "") + + units := strings.Split(unitPriceStr, "/") + + if len(units) > 1 { + res.Unit = strings.TrimSpace(units[1]) + res.UnitPrice, _ = strconv.ParseFloat(units[0], 64) + } + } + return res, nil }