summaryrefslogtreecommitdiff
path: root/crawler/convert_price.go
diff options
context:
space:
mode:
Diffstat (limited to 'crawler/convert_price.go')
-rw-r--r--crawler/convert_price.go103
1 files changed, 103 insertions, 0 deletions
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
+}