From 14a89c34096d2ddb2a7750feda143207110e838b Mon Sep 17 00:00:00 2001 From: horus_arch Date: Wed, 7 Feb 2018 19:09:22 +0100 Subject: Adds sanitizer. --- crawler/convert_price.go | 103 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 crawler/convert_price.go (limited to 'crawler/convert_price.go') diff --git a/crawler/convert_price.go b/crawler/convert_price.go new file mode 100644 index 0000000..54386d6 --- /dev/null +++ b/crawler/convert_price.go @@ -0,0 +1,103 @@ +package main + +import ( + "errors" + "strconv" + "strings" +) + +func convert_price(price string) (int, error) { + if "" == price { + return 0, errors.New("Empty string") + } + + multiply_by_10 := false + multiply_by_100 := true + + price = strings.TrimSpace(price) + + price = strings.TrimPrefix(price, "€") + price = strings.TrimSpace(price) + + price = strings.TrimSuffix(price, "€") + price = strings.TrimSpace(price) + + price = strings.TrimSuffix(strings.ToLower(price), "eur") + price = strings.TrimSpace(price) + + price = strings.TrimSuffix(strings.ToLower(price), "euro") + price = strings.TrimSpace(price) + + if len(price) < 2 { + price = "0" + price + } else if len(price) < 3 { + price = "00" + price + } + + c := string(price[len(price)-2:]) + c = string(c[0:1]) + + /* + Extracts the second last char and checks if it's a "." or a ",". + */ + if "," == c { + if strings.Count(price, ",") > 1 { + return 0, errors.New("Invalid format") + } + + multiply_by_10 = true + multiply_by_100 = false + + } else if "." == c { + if strings.Count(price, ".") > 1 { + return 0, errors.New("Invalid format") + } + + multiply_by_10 = true + multiply_by_100 = false + + } + + c = string(price[len(price)-3:]) + c = string(c[0:1]) + + /* + Extracts the third last char and checks if it's a "." or a ",". + */ + if "," == c { + if strings.Count(price, ",") > 1 { + return 0, errors.New("Invalid format") + } + + multiply_by_10 = false + multiply_by_100 = false + + } else if "." == c { + if strings.Count(price, ".") > 1 { + return 0, errors.New("Invalid format") + } + + multiply_by_10 = false + multiply_by_100 = false + + } + + price = strings.Replace(price, ",", "", -1) + price = strings.Replace(price, ".", "", -1) + + /* + Casts the price to integer in cents (not euro!). + */ + price_int, err := strconv.Atoi(price) + if err != nil { + return 0, err + } + + if multiply_by_10 { + price_int = price_int * 10 + } else if multiply_by_100 { + price_int = price_int * 100 + } + + return price_int, nil +} -- cgit v1.2.3