/
helpers.go
102 lines (86 loc) 路 2 KB
/
helpers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package company
import (
"errors"
"fmt"
"github.com/PuerkitoBio/goquery"
"github.com/leaq-ru/parser/logger"
"github.com/leaq-ru/parser/rx"
"golang.org/x/net/idna"
u "net/url"
"regexp"
"strconv"
"strings"
)
func capitalize(in string) string {
text := strings.TrimSpace(in)
if !strings.Contains(text, " ") {
return strings.Title(text)
}
words := strings.SplitN(text, " ", 2)
return strings.Join([]string{
strings.Title(words[0]),
words[1],
}, " ")
}
func findInt(text string, compiledRx *regexp.Regexp) (result int, found bool) {
r, err := strconv.Atoi(rx.Spaces.ReplaceAllString(compiledRx.FindString(text), ""))
if err == nil {
result = r
found = true
}
return
}
func getByHrefStart(doc *goquery.Document, starts ...string) (hrefAttr string) {
for _, elem := range starts {
h, ok := doc.Find(fmt.Sprintf("a[href^='%s']", elem)).Attr("href")
if ok && h != elem {
hrefAttr = strings.TrimSpace(h)
return
}
}
return
}
func rawPhoneToValidPhone(in string) (phone int, err error) {
errNotPhone := errors.New("not phone")
numChunks := rx.Nums.FindAllString(in, -1)
if numChunks == nil {
err = errNotPhone
return
}
nums := strings.Join(numChunks, "")
if len(nums) != 11 {
err = errNotPhone
return
}
if string(nums[0]) == "8" {
nums = strings.Join([]string{"7", nums[1:]}, "")
}
return strconv.Atoi(nums)
}
func toOGImage(imgSrc string, url string) Link {
parsedImgSrcURL, err := u.Parse(imgSrc)
if err != nil {
logger.Log.Error().Err(err).Send()
return ""
}
baseURL, err := u.Parse(url)
if err != nil {
logger.Log.Error().Err(err).Send()
return ""
}
if parsedImgSrcURL.Scheme == "" {
parsedImgSrcURL.Scheme = http
}
if parsedImgSrcURL.Host == "" {
punycodeHost, err := idna.New().ToASCII(baseURL.Host)
if err != nil {
logger.Log.Error().Err(err).Send()
return ""
}
parsedImgSrcURL.Host = punycodeHost
}
return Link(parsedImgSrcURL.String())
}
func emailSuffixValid(email string) (valid bool) {
return !strings.HasSuffix(email, ".png")
}