package main import ( "log" "regexp" "strconv" "strings" "github.com/gocolly/colly" ) func detect_spirit_type(name string) string { if strings.Contains(name, "Gin") { return "Gin" } if strings.Contains(name, "Rum") { return "Rum" } if strings.Contains(name, "Vodka") { return "Wodka" } if strings.Contains(name, "Wodka") { return "Wodka" } if strings.Contains(name, "Whisky") { return "Whisky" } if strings.Contains(name, "Whiskey") { return "Whisky" } return "Anderes" } func extract_volume(volume string) (float32, error) { r_liter, err := regexp.Compile(`[0-9]+([,.][0-9]+)?( )?[lL](iter)?`) if err != nil { log.Fatal(err) } volume_noisy := r_liter.FindString(volume) r_liter2, err := regexp.Compile(`[0-9]+([,.][0-9]+)?`) if err != nil { log.Fatal(err) } volume_noisy = r_liter2.FindString(volume_noisy) volume_noisy = strings.Replace(volume_noisy, ",", ".", 1) volume64, err := strconv.ParseFloat(volume_noisy, 32) if err != nil { return 0, err } return float32(volume64), err } func extract_abv(abv_noisy string) (float32, error) { if strings.Contains(abv_noisy, "%") { abv_noisy = strings.Replace(abv_noisy, "%", "", 1) } abv_noisy = strings.Replace(abv_noisy, ",", ".", 1) abv_noisy = strings.TrimSpace(abv_noisy) abv64, err := strconv.ParseFloat(abv_noisy, 32) if err != nil { return 0, err } return float32(abv64), nil } /* * In litre, but float. */ func get_volume(e *colly.HTMLElement) float32 { volume_noisy := e.Request.Ctx.Get("volume") matched, err := regexp.MatchString(`[lL](iter)?`, volume_noisy) if err != nil { log.Fatal(err) } if !matched { log.Println("get_volume: not matched: " + volume_noisy) return 0 } volume, err := extract_volume(volume_noisy) if err != nil { log.Println("get_volume: " + volume_noisy) log.Fatal(err) } return volume } /* * In procent. (float) */ func get_abv(e *colly.HTMLElement) float32 { abv_noisy := e.Request.Ctx.Get("abv") if abv_noisy == "" { return 0 } abv, err := extract_abv(abv_noisy) if err != nil { log.Println("get_abv: " + abv_noisy) log.Fatal(err) } return abv }